Python snippet: Linear regression

features_vs_target.png

Linear regression (Hồi quy tuyến tính) thường được ứng dụng vào dự đoán giá trị số thực khi cho trước dữ liệu đầu vào. Ví dụ một số ứng dụng của Linear regression:

  • Dự đoán mức lương sau khi ra trường của một người dựa vào các thông số như điểm trung bình khoá học, số lượng các hoạt động ngoại khoá đã tham gia, giới tính, …
  • Dự đoán giá chứng khoán ngày mai dựa vào lịch sử giá trước đó, các sự kiện xã hội, số lượng vốn đầu kỳ, …
  • Bao nhiêu người sẽ share bài viết của bạn trên facebook dựa trên số lượng bạn bè, số lượng bạn của bạn bè, độ phổ biến của hashtag, những bài viết trước đó, …
  • Điều chỉnh nhiệt độ phòng dựa trên thời gian trong ngày, nhiệt độ ngoài trời, ánh sáng trong phòng, …

Tiếp tục series Python snippet (Python snippet: Visualizing, Python snippet: Thu thập dữ liệu), tuần này tôi sẽ đưa vào một vài snippet liên quan đến linear regression áp dụng trên tập dữ liệu home_data để dự đoán giá nhà dựa trên một vài thuộc tính cơ bản như số lượng phòng ngủ, số lượng phòng tắm, điểm đánh giá, …

Lý thuyết: linear regression
Source code: data-science-works
Thư viện: matplotlib, pandas, scikit-learn
Notebooks: linear_regression_snippet.

Một suy nghĩ 14 thoughts on “Python snippet: Linear regression

  1. Dear anh, có bài toán thực tế như thế này có áp dụng được nội dung trên để xử lý vấn đề không, anh xem hộ em nhé:
    Với một công ty thì được định nghĩa các khoản chi phí (Các khoản mục nhỏ và chi tiết) theo hàng tháng và hàng tháng đó phát sinh ra các khoản doanh thu. Có thể áp dụng trên để xác định nếu như kế hoạch doanh thu của đơn vị tháng này là A thì chi phí dự đoán phải bỏ ra là bao nhiêu. (Dữ liệu lịch sử có dài trong 3-5 năm)

    Thích

    1. Dĩ nhiên là được. Bạn xác định input (features) và output (real-valued predictions) của regression model là thực hiện được.
      Độ chính xác của mô hình phụ thuộc vào tập thuộc tính bạn lựa chọn, bậc của mô hình, và cách bạn regularize mô hình.

      Thích

  2. Theo em hiểu phụ thuộc nhiều vào việc định nghĩa input và out put. Em muốn có hệ thống có sẵn để thử nghiệm, anh có thể gợi ý có ứng dụng nào không. Hoặc cách xây dựng một hệ thống đơn giản và nhanh được không anh

    Thích

    1. Ứng dụng của LR thì có nhiều (anh có liệt kê vài ứng dụng trong bài viết). Quan trọng ta nắm được nguyên lý để áp dụng cho từng bài toán mình gặp phải. Em có thể sử dụng code trong bài viết để thực nghiệm cho tập dữ liệu khác ngoài dự đoán giá nhà như chứng khoán chẳng hạn.

      Thích

  3. Cho mình hỏi là khi mình dùng hồi quy tuyến tính để ước lượng tương quan với ví dụ của bạn thì phần intercept_ nó chỉ in ra một giá trị trong khi phần coef_ nó có tới 3 giá trị. Mình chưa hiểu là tại sao intercept_ nó chỉ có một giá trị duy nhất trong khi mình nghĩ là với mỗi feature khác nhau thì nó có mỗi một intercept_ khác nhau? Liệu mình cố gắng train cho mỗi feature có một intercept_ và coef_ riêng biệt thì có làm cho mô hình chuẩn xác hơn so với hiện tại là một intercept_ và 3 coef_ không?

    “””
    DEFAULT MODEL
    “””
    linear = linear_model.LinearRegression()
    linear.fit(x_train, y_train)
    print(“Coef linear:”, linear.coef_)
    print(“Intercept:”, linear.intercept_)
    score_trained = linear.score(x_test,y_test)
    print(“Model scored:”, score_trained)

    Thích

      1. Cám ơn bạn giờ mình hiểu thêm một chút rồi. Như vậy nếu mình lấy 3 features như trong ví dụ theo hồi quy tuyến tính, sau khi mình tìm được coef_ và intercept_ thì mình trình bày nó lên một đồ thị như thế nào nhỉ? Vì nếu là dựa trên 1 feature (ví dụ như bedroom) thì đơn giản

        Code: plt.plot(x_test,linear.predict(x_test))
        Graph: http://imgur.com/a/jzUvU

        Nhưng như ví dụ trên 3 features thì mình phải hiển thị kết quả tìm được như thế nào cho hợp lý vì 3 features có đơn vị trên trục nằm ngang (trục hoành thì phải) khác nhau. Trong trường hợp này mình có phải flat cái ma trận x_test từ 3 cột về 1 cột rồi plot không?

        Thích

          1. Có phải ý Hồng là làm dạng scatter như code bên dưới hả. Nhưng nếu mình muốn biểu diễn cái đồ thị y = ax1 + bx2+cx3 + y0 thì chắc phải dùng plot3d hen? Ý là lung linh giống cái hình bên dưới. Chỗ này thì phải tìm hiểu về sự khác biệt của multiple linear regression và multivariate linear regression rồi.

            Graph: http://imgur.com/a/YciX9

            f,axes = plt.subplots(1,len(features),sharey=True)
            for i in range(0, len(features)):
            axes[i].scatter(x_test[features[i]],linear.predict(x_test))

            Thích

            1. Nếu bạn chỉ có 2 feature và 1 giá trị dự đoán thì có thể sử dụng 3Dplot. Nhiều hơn 2 feature, để 3Dplot bạn cần tổ hợp các feature lại với nhau cùng với giá trị dự đoán để biểu diễn. Ví dụ, y = w0 + w1x1 + w2x2 + w3x3. Các 3Dplot sẽ là (y, x1, x2), (y, x1, x3), (y, x2, x3).

              Thích

            2. Loay hoay cuối cùng cũng plot được với 2 features bedrooms và bathrooms. Cám ơn Hồng. Mới tự học nên còn trẻ trâu quá. Có nhiều cái chưa hiểu. :).

              Graph: http://imgur.com/a/6wjpP
              Code:

              max_bedrooms = max(x_test[features[0]])
              max_bathrooms = max(x_test[features[1]])
              step = 1/pow(2,5)
              plot_data_x = np.arange(1,max_bedrooms,step)
              plot_data_y = np.arange(1,max_bathrooms,step)
              X,Y = np.meshgrid(plot_data_x,plot_data_y)
              Z = linear.intercept_ + linear.coef_[0]*X + linear.coef_[1]*Y

              fig = plt.figure()
              ax = fig.add_subplot(111, projection=’3d’)
              ax.set_xlabel(features[0])
              ax.set_ylabel(features[1])

              ax.plot_surface(X,Y,Z,cmap=cm.Blues, alpha=0.7)
              ax.scatter(x_test[features[0]],x_test[features[1]],y_test)
              plt.show()

              Đã thích bởi 1 người

  4. Mình đang tìm hiểu phần Polynomial, mình không hiểu là tại sao kết quả lại không tốt bằng linear regression bình thường. Hồng có thể chỉ cho mình được không? Mình so sánh giữa Linear Regression và Linear Regression Polynomial thì kết quả được như sau:
    – Graph của Linear Regression bình thường: http://imgur.com/a/wADLD
    – Graph của Linear Regression với Polynomial: http://imgur.com/a/j1Iq3

    Code: https://bitbucket.org/rongchaua/machine-learning/src/7708a3dfde69155839673d605a74b3cbd439f65a/polynomial.py?at=default&fileviewer=file-view-default

    Thích

Bình luận về bài viết này