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.

13 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)

    Số lượt 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.

      Số lượt thích

  2. 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)

    Số lượt 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?

        Số lượt 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))

            Số lượt 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).

              Số lượt 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()

              Liked by 1 person

  3. 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

    Số lượt thích

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

w

Connecting to %s