Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In
Continue with Google
Continue with Facebook
or use


Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here
Continue with Google
Continue with Facebook
or use


Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.


Have an account? Sign In Now

Sorry, you do not have a permission to ask a question, You must login to ask question.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Stack Ask

Stack Ask Logo Stack Ask Logo

Stack Ask Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 2465
Next
Answered
monkey
  • 3
monkeyEnlightened
Asked: October 13, 20212021-10-13T01:34:47+00:00 2021-10-13T01:34:47+00:00In: Machine Learning

[Deep Learning] Làm thế nào để xác định được cái hàm tuyến tính nào cần dùng

  • 3

Bài toán của anh là recommendation: matching sự kiện có liên quan đến người dùng nhất để bán. Ngày trước anh dùng phương pháp tìm hàm sai số với Linear Regression. Thực ra lúc đó anh cũng đoán mò cái hàm ban đầu là f(x) = a1x1 +a2x2 + .. + anxn + b; cơ mà anh cứ sợ nó sai. Theo anh hiểu thì có 2 cách để xác định cái hàm tuyến tính ban đầu:

1. Sử dụng công cụ đồ hoạ chiếu tất cả các điểm về dạng đồ thì 2 chiều từ đó nhìn vào mật độ phân bố để đoán ra được hàm tuyến tính
2. Có 1 định lý toán học nào đó hoặc có 1 kiểu toán học nào đó có thể áp dụng để suy ra được cái hàm tuyến tính ban đầu này

Anh hiểu vậy đúng không em?

deep learningmodel
  • 16 16 Answers
  • 392 Views
  • 0 Followers
  • 0
Answer
Share
  • Facebook
  • Report

16 Answers

  • Voted
  • Oldest
  • Recent
  1. Best Answer
    Vu Luong Anh Pundit
    2021-10-13T01:51:30+00:00Added an answer on October 13, 2021 at 1:51 am
    This answer was edited.

    Em chưa có kinh nghiệm làm recommendation system nhưng Linear Regression thì em biết. Với y = f(x) = a1x_1 + a2x_2 + ... + anx_n + b. Trong đó a1, a2, ..., an, b là các tham số ta cần đi tìm để xác định hàm. Ví dụ ta có 1 bộ dữ liệu gồm 100 quan sát {x^(1), y^(1)}, {x^(2), y^(2)}..., {x^(100), y^(100)}, nhiệm vụ của học máy (machine learning) là đi tìm bộ tham số (a1, a2…, b) sao cho sai số trên bộ dữ liệu là nhỏ nhất.

    • Nếu anh dùng hàm sai số đơn giản như Least Square Error thì có thể tính ra công thức nghiệm luôn (bằng cách tính tay đạo hàm):

    Nguồn: https://machinelearningcoban.com/2016/12/28/linearregression/#-nghiem-theo-cong-thuc

    • Nếu anh dùng hàm sai số phức tạp thì có thể dùng PyTorch để tính đạo hàm, và dùng thuật toán tối ưu Gradient Descent để tìm tham số.
    • Nếu anh không quan tâm phía sau nó chạy như nào thì có thể dùng thư viện sklearn: https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

     

    Đi vào trọng tâm câu hỏi của anh:

    1. Người ta không làm vậy anh ạ. Linear Regression có thể học cho dữ liệu nhiều chiều (không cân đưa về 2 chiều). Ở 2 chiều thì nó sẽ là đường thẳng, 3 nhiều nó là mặt phẳng, nhiều chiều nó là Hyper-plane. Tuy nhiên, nó vẫn chỉ là dạng tuyến tính (không biểu diễn được mặt cong hay phức tạp hơn)
    2. Đúng rồi anh, mình có thể tính đạo hàm của hàm mất mát và suy ra công thức nghiệm như em viết ở trên.

    P/S: Linear Regression là thuật toán học máy thông thường chứ không phải Deep Learning. Khi nào dùng mô hình nhiều lớp (như neural networks mới gọi là Deep Learning anh ạ)

     

    • 2
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • tvd12 Enlightened
      2021-10-13T08:43:10+00:00Replied to answer on October 13, 2021 at 8:43 am

      Như thế này có vẻ hàn lâm quá nhỉ, vậy có 1 cách nào đó đơn giản để anh là kỹ sư lập trình, và anh có một số kiến thức về toàn nhất định, anh có thể sử dụng các thuật toán cơ bản kiểu Linear Regression để giải quyết bài toán cho mình không? Cứ giả định anh chấp nhận 1 sai số lớn nhé. Vì khách hàng của anh cũng là một người bình thường, biết xíu xíu về kỹ thuật, nếu mà dùng định lý hay gì đó chứng minh e là họ không hiểu.

      Anh hiểu là anh sẽ cần trả qua mấy bước này:

      1. Thu thập dữ liệu
      2. Tối ưu dữ liệu đầu vào để loại bỏ các dữ liệu trùng nhau
      3. Lựa chọn một cách thức nào đó để đưa ra được 1 cái model (một cái biểu thức – một cái hàm nào đó)
      4. Sau khi đã có model thì đưa nó vào các công cụ tìm kiếm kiểu elasticsearch để nó đánh score cho dữ liệu. Việc học cũng không cần liên tục, giả sử cái model anh đưa vào nó mang lại kết quả kinh doanh tốt hơn thì anh coi là hợp lý.
      5. Thay đổi cách tính toán để tìm ra model mới nếu model cũ không hiệu quả

      Mấy bước này có đang đúng như những gì em được học và em đang thực hiện không?

      • 1
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report
      • Vu Luong Anh Pundit
        2021-10-13T14:00:05+00:00Replied to answer on October 13, 2021 at 2:00 pm

        Về cơ bản em thấy đúng rồi anh. Ở bước 4 em chưa biết elasticsearch là gì, thường em sẽ để bước 4 là mang model ở bước 3 đi dự đoán cho dữ liệu mới (hoặc dự đoán tương lai).

        Em làm research thì chỉ tập trung ở bước 3, đi nghiên cứu và phát triển các model mới. Những dự án thực tế thì có rất nhiều thư viện hỗ trợ model sẵn, ví dụ tiêu biểu là sklearn, anh có thể dùng mà không cần hiểu thuật toán, biểu thức toán học phía sau.

        Ví dụ nếu mình dùng Linear Regression ở bước 3 và 4 (X, y là dữ liệu thu thập, X_new là dữ liệu cần đoán):

        from sklearn import datasets, linear_model
        
        # fit the model by Linear Regression
        regr = linear_model.LinearRegression()
        regr.fit(X, y) // Step 3
        
        y_prediction = regr.predict(X_new) // Step 4
        
        
        • 2
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp
          • Report
        • tvd12 Enlightened
          2021-10-13T14:08:13+00:00Replied to answer on October 13, 2021 at 2:08 pm

          Nếu như vậy thì tương lai, những người như em sẽ tạo ra các model cho thế giới này, và đến 1 lúc nào đó đủ số lượng model cover được hết tất cả các trường hợp và viết hết thành lib thì những lập trình viên sẽ không cần phải quan tâm quá nhiều đến bên trong là gì mà chỉ cần gọi hàm là đủ đúng không em?

          • 0
          • Share
            Share
            • Share on Facebook
            • Share on Twitter
            • Share on LinkedIn
            • Share on WhatsApp
            • Report
          • Vu Luong Anh Pundit
            2021-10-14T00:23:22+00:00Replied to answer on October 14, 2021 at 12:23 am

            Rất khó để cover hết các trường hợp anh ạ, tương tự như bên lập trình mỗi ngôn ngữ có điểm mạnh điểm yếu riêng, bên học máy các mô hình cụ thể cũng chỉ dùng được trong 1 số cases nhất định.

            Có một số dự án đang hướng đến cái anh nói, chỉ cần đưa dữ liệu đầu vào, mô tả bài toán xong nó tự cho ra model. Tiêu biểu là thằng AutoML của Google.

            Tuy nhiên, muốn đạt được sai số nhỏ và triển khai thực tế được thì thường phải có domain knowledge (ví dụ làm bài toán y tế thì phải có chuyên gia y tế trong team). Đồng thời cũng phải tinh chỉnh mô hình bằng tay trong một số bước.

            • 1
            • Share
              Share
              • Share on Facebook
              • Share on Twitter
              • Share on LinkedIn
              • Share on WhatsApp
              • Report
  2. Tata Vu Beginner
    2021-10-14T02:05:47+00:00Added an answer on October 14, 2021 at 2:05 am

    Hồi quy tuyến tính hiểu nôm na là. Có giá trị đầu vào là x. Đầu ra là y. Mỗi cặp đầu vào đâu ra là 1 điểm trên biểu đồ. Chúng ta tìm đg thẳng đi qua chúng. Đường thẳng đó dùng để suy đoán các cặp giá trị đầu vào đầu ra. Nếu ko vẽ dc đường thẳng thì ko tuyến tính. Vd hàm y=f(x)= 5x + 2 là tuyến tính. Còn hàm y=f(x)= x^2 ko tuyến tính vậy đặt xx = x^2 thì y=f(xx) là tuyến tính

    • 2
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • monkey Enlightened
      2021-10-14T02:15:38+00:00Replied to answer on October 14, 2021 at 2:15 am

      Nhưng làm sao anh bạn có thể xác định nó là đường thẳng hay parabola hay đường tròn? đó mới là câu hỏi của mình

      • 0
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report
      • Vu Luong Anh Pundit
        2021-10-14T04:15:35+00:00Replied to answer on October 14, 2021 at 4:15 am

        @moneky Nếu anh chọn Linear Regression thì anh đã chọn dùng đường thẳng rồi ạ. Còn nếu anh muốn dùng cái đường/mặt phức tạp hơn thì em recommend dùng Neural Networks, vì nó có thể xấp xỉ mọi hàm.

        • 1
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp
          • Report
        • monkey Enlightened
          2021-10-14T04:20:09+00:00Replied to answer on October 14, 2021 at 4:20 am

          À, ok em, từ trước giờ anh vẫn nghĩ Linear Regression dùng cho cả hàm bậc 2 trở lên được 😀

          • 0
          • Share
            Share
            • Share on Facebook
            • Share on Twitter
            • Share on LinkedIn
            • Share on WhatsApp
            • Report
          • Vu Luong Anh Pundit
            2021-10-14T04:24:27+00:00Replied to answer on October 14, 2021 at 4:24 am

            Vẫn có cách để Linear Regression học được hàm đa thức bậc cao như ví dụ @Tata Vu nói ở trên (đặt xx = x^2). Kỹ thuật này còn có thể gọi là kernel, là một mảng khác nữa của học máy.

            Em nghĩ kỹ sư lập trình thì nên biết cách dùng Neural Networks là đủ rồi anh ạ, các mô hình khác đều có thể dùng lại của sklearn.

            • 1
            • Share
              Share
              • Share on Facebook
              • Share on Twitter
              • Share on LinkedIn
              • Share on WhatsApp
              • Report
  3. Tata Vu Beginner
    2021-10-14T01:43:14+00:00Added an answer on October 14, 2021 at 1:43 am

    Rất nhiều cái mà thế giới đã làm ra, chúng ta chỉ cần hiểu và sử dụng là cũng đã đau đầu rồi. Còn nghiên cứu sâu thì cần rất nhiều thời gian cho 1 cái rất nhỏ. Người Việt mình nói chung rất giỏi thuật toán, đó là điều kiện cần để xây dựng các Deep learn. Nhưng khổ nỗi ko mua nổi 1 con máy chủ để chứa đủ lượng dữ liệu cần thiết => sai số lớn. Nên toàn để nước ngoài …

    • 0
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
  4. monkey Enlightened
    2021-10-14T02:43:18+00:00Added an answer on October 14, 2021 at 2:43 am

    @Vu Luong Anh, trước đây dữ liệu event của anh kiểu thế này:

    x1. Giới tính
    x2. Sở thích
    x3. Địa điểm

    Sau khi phân tích anh thấy rằng:

    1. Đương nhiên là nam thì thích tham gia sự kiện có nhiều nữ và nữ thích tham gia sự kiện nhiều nam
    2. Những người có cùng sở thích sẽ muốn tham gia cùng 1 event
    3. Những event có địa điểm gần user nhất sẽ dễ được chọn.

    Nên anh đánh trọng số là (thực ra anh không có cơ sở khoa học, mà anh dựa theo suy đoán trên tập dữ liệu khoảng 300k bản ghi):

    1. cho x1 là: 30
    2. cho x2 là: 20
    3. cho x3 là: 50

    Anh sẽ dùng Point làm đại lượng tính toán, và cách tính của anh thế này:

    a. nếu user là nam:

    1. x1 = tỉ lệ nữ / tổng người tham gia
    2. x2 = số lượng sở thích của user / tổng số lượng sở thích
    3. x3 = khoảng cách của user đến event / khoảng cách tối đa mà user chấp nhận

    b. nếu user là nữ

    1. x1 = tỉ lệ nam / tổng người tham gia
    2. x2 = số lượng sở thích của user / tổng số lượng sở thích
    3. x3 = khoảng cách của user đến event / khoảng cách tối đa mà user chấp nhận

    anh quy định rằng 1.0 Point sẽ là phù hợp nhất nên hàm ban đầu của anh là:

    y = (30 * x1 + 20 * x2 + 50 * x3) / 100

    Sau đó anh sử dụng linear regression và anh được 1 cái mớ dữ liệu kiểu này anh gọi nó là model.

    Sau đó anh mang cái model này đi loop danh sách các event (anh dùng elasticsearch) anh sẽ tìm ra các event nào có score gần 1 nhất và suggest cho user

    Câu hỏi của anh là: em có làm giống như anh không hay em có cách làm khác?

    • 0
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report
    • Vu Luong Anh Pundit
      2021-10-14T04:20:44+00:00Replied to answer on October 14, 2021 at 4:20 am

      Ở đây anh đang lập trình kiểu heuristic truyền thống, không phải lập trình Machine Learning anh ạ, vì cái y là do anh tự suy diễn ra.

      Muốn dùng ML anh phải có cả dữ liệu thật của y, tức là anh có rất nhiều bản ghi của cả x1, x2, x3, và y. Lúc đó anh dùng Linear Regression nó sẽ cho ra trọng số tương ứng. Nó ngược với việc anh đoán trọng số và suy ra y.

      • 0
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
        • Report
      • monkey Enlightened
        2021-10-14T04:29:56+00:00Replied to answer on October 14, 2021 at 4:29 am
        This answer was edited.

        Không, cái y là anh có kết quả đó em ạ, vì các event được bán trước đó rồi, nên anh có:

        1. danh sách các event đã bán
        2. danh sách các user đã tham gia

        Tức là anh đã có cả x1, x2, x3 và y rồi em ạ thế nên anh mới truyền được đủ tham số cho cái Linear Regression.

        Em hay dùng đại lượng gì để làm kết quả cuối cùng khi sử dụng model?

        • 0
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp
          • Report
        • Vu Luong Anh Pundit
          2021-10-14T09:07:23+00:00Replied to answer on October 14, 2021 at 9:07 am

          Vậy input của anh là thông tin user, output là event anh muốn recommend phải không ạ? Nếu vậy bài toán không phải là regression mà là classification. Trong trường hợp này mình nên dùng categorical lost function ví dụ Cross-Entropy Loss Function.

          • 0
          • Share
            Share
            • Share on Facebook
            • Share on Twitter
            • Share on LinkedIn
            • Share on WhatsApp
            • Report
  5. monkey Enlightened
    2021-10-15T03:23:18+00:00Added an answer on October 15, 2021 at 3:23 am

    @Vu Luong Anh: anh tách ra đây nhé. Anh thấy là cái kiểu phân cụm là nó sẽ phân rõ ra 2 loại, 1 loại là các event phù hợp với user, 2 là các event không phù hợp. Tuy nhiên thực tế khi bán event thì anh thấy nó chỉ có các event phù hợp ít hay nhiều thôi kiểu khi user vào search thì kết quả kiểu là:

    event1 – độ phù hợp 1.0
    event2 – độ phù hợp 0.9
    event3 – độ phù hợp 0.8
    ….
    event4 – độ phù hợp 0.001

    nên anh nghĩ regression sẽ phù hợp hơn em nhỉ?

    • 0
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

You must login to add an answer.

Continue with Google
Continue with Facebook
or use


Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 823
  • Answers 1k
  • Best Answers 80
  • Users 334
  • Popular
  • Answers
  • monkey

    [Deep Learning] Làm thế nào để xác định được cái ...

    • 16 Answers
  • Thành Vương

    Bug sai đường dẫn khi config ckeditor lên live

    • 14 Answers
  • Tú Trần Anh

    [Ezyfox Server] Unity game client không gửi được command khi ...

    • 12 Answers
  • tvd12
    tvd12 added an answer Anh thấy chỉ cần lúc tạo bảng em cứ khai… January 20, 2023 at 4:28 pm
  • monkey
    monkey added an answer 1. Anh chưa hiểu là cơ sở dữ liệu của… January 16, 2023 at 9:55 am
  • monkey
    monkey added an answer Em có thể tham khảo 2 lớp này: https://github.com/youngmonkeys/ezymq/tree/master/ezymq-kafka/src/main/java/com/tvd12/ezymq/kafka/serialization. Ở… January 16, 2023 at 6:34 am

Related Questions

  • tvd12

    [Machine Learning]Training bằng ảnh

    • 6 Answers

Top Members

tvd12

tvd12

  • 76 Questions
  • 1k Points
Enlightened
monkey

monkey

  • 122 Questions
  • 1k Points
Enlightened
Nguyễn Thái Sơn

Nguyễn Thái Sơn

  • 205 Questions
  • 307 Points
Enlightened

Trending Tags

#formatdate .net .net core .net oop abstract class access app access token ai analytics android ansible anti-flooding apache poi api app architecture artificial intelligence assembly async asyncawait atomicboolean authentication backend backend nestjs background bash script batch bean big project binding bitcoin blockchain blog boot-nodes branch british btree bucket4j buffered build bundle c# c# .net cache caching callback career career path cast centos chat cloud cloud reliability commit communication company computer science concurrent config-css connection pool content-disposition contract convert date to number cookie cors cosmos cosmos-sdk crawl data cron css database database migration datasource datastructure deadlock decentralized exchange deep learning deploy contract design-pattern design patterns devops dex di distraction programing dns docker download draw.io du học duration dữ liệu lớn eclip editor elasticsearch email employee english erc20 erc721 estimation eth ethereum ethereum login excel exception exception handle exception handler executor export compliance extensions exyfox ezyfox ezyfox-boot ezyfox-server ezyfoxserver ezyhttp ezymq-kafka ezyredis facebook fe filter floating point flutter format json freetank french front-end frontend fullstack fulltextsearch future gallery game game-box game-room game-server gateway get get file zip git glide go golang google gorilla graduation thesis graphql grapql grpc guide h2 database handy terminal hazelcast hibernate hibernateconfig html http https hyperloglog image index indexing integration-test intellij interface interview io ioc ipfs isolate issue it java java core javacore javascript java spring javaw java web jenkins jetbrains job join jotform jpa js json json file jsonproperty json to object jsp jsp & servlet junit-test jvm jwt kafka keep promise kerberos keycloak kotlin language languague library list load-balancing load balancer lock log log4j log4j-core login lưu trữ machine learning macos mail mail template main maria db math maven merge message queue messaging metamask microservice microservices migration mobile model mongo monitoring mq msgpack multi-threading multiple tenant multithread multithreading mysql n naming naming convention nan netcore netty networking nft nft game nginx nio node.js nodejs non-blocking io null oop opensource optimize orm otp message paginaiton pagination pancakeswap panic partition pdf pgpool phỏng vấn plugin pointer postgresql pre private_key procedure profile programming project management promise properties push-noti push message android push notification python python unicode qrcode question queue rabbitmq reactive reactjs reactjs download readmoretextview recyclerview redis refactor refresh token regex replica repository request resilence4j resource rest resttemplate roadmap ropssten ropsten round robin rust rxjava s3 schedule scheduled scheduled spring boot search security send email send mail server servlet session shift jis singleton sjis slack smart contract soap socket socket server soft delete solution sosanh spring spring-boot-test spring-jpa spring aop spring boot springboot spring data jpa spring redis spring security springsecurity springwebflux mysql spring websocket spring websocket cors sql sql server sse ssl email stackask storage stream stream api stress test structure trong spring boot study synchronize synchronized system environment variables test thread threadjava threadpool thread pool thymeleaf tomcat totp tracking location transaction transfer transfer git udp uniswap unit test unity upload upload file utf-8 file validate validate date vector view volatile vue vue cli watermark web web3 web3 client webassembly webflux webpack websocket windows 11 winforms work zip file zookeeper

Footer

Stack Ask

Stack Ask is where Developers Ask & Answers. It will help you resolve any questions and connect you with other people.

About Us

  • Meet The Team
  • About Us
  • Contact Us

Legal Stuff

  • Terms of Service
  • Privacy Policy
  • Cookie Policy

Help

Follow

© 2021 Stack Ask. All Rights Reserved
Powered by youngmonkeys.org