Scikit-learn: Linear regression

Regression line
Trong bài viết này, ta sẽ tìm hiểu về mô hình hồi quy tuyến tính (linear regression) cũng như cài đặt một ví dụ đơn giản sử dụng thư viện scikit-learn.

Ý nghĩa

Phân tích hồi quy tuyến tính (linear regression) là một phương pháp phân tích quan hệ giữa biến phụ thuộc Y với một hay nhiều biến độc lập X. Mô hình hóa sử dụng hàm tuyến tính (bậc 1). Các tham số của mô hình (hay hàm số) được ước lượng từ dữ liệu.

Biến Y phụ thuộc (dependence) vào biến X (independence), nghĩa là X và Y có quan hệ positive nếu giá trị biến X tăng/giảm thì giá trị biến Y cũng tăng/giảm. Ngược lại X và Y có quan hệ negative nếu giá trị biến X tăng/giảm nhưng giá trị biến Y giảm/tăng.

Bài toán

Cho trước tập dữ liệu (x_i, y_i) (1 <= i <= n, n là số lượng mẫu) phân bố như hình sau.

Data points

Mục tiêu của chúng ta là tìm được một đường thẳng (line – linear regression) thể hiện gần đúng nhất phân bố của tập dữ liệu trên.

Regression line
Regression line

Đường thẳng này được ước lượng dựa trên độ lỗi (least square error) giữa giá trị dự đoán (estimated value) so với giá trị thực tế (actual value). Mục tiêu của chúng ta là tìm được đường hồi quy có độ lỗi so với tập dữ liệu nhỏ nhất (minimize error).

Như vậy, ta đi xây dựng mô hình hồi quy tuyến tính với phương trình đường thẳng y\prime = b_0 + b_1*x. Sau đó, dựa vào giá trị y\prime tìm được nhờ vào biến độc lập X trong tập huấn luyện ban đầu, ta tính được độ lỗi so với tập dữ liệu quan sát (observations). Để tối tiểu hóa độ lỗi này ta chỉ cần lấy đạo hàm bậc nhất. Từ đó, ta tìm được tham số (b_0, b_1) để thế vào mô hình hồi quy tuyến tính chúng ta cần tìm.

Study line
Study line

Ta có thể tham khảo thêm về cách tối tiểu hóa độ lỗi ở Wikipedia: https://en.wikipedia.org/wiki/Least_squares

Chương trình minh họa

Đầu tiên chúng ta sẽ tạo tập dữ liệu mẫu (x_i, y_i) gồm 20 phần tử. Sau đó, ta sẽ biểu diễn tập dữ liệu này ra biểu đồ.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# Create some simple data
np.random.seed(0)
X = np.random.random(size=(20, 1))
y = 3 * X.squeeze() + 2 + np.random.randn(20)

plt.plot(X.squeeze(), y, 'o')
Simple data
Simple data

Tiếp theo, ta xây dựng mô hình hồi quy tuyến tính thông qua lớp LinearRegression và hàm fit() trong scikit-learn.

model = LinearRegression()
model.fit(X, y)

# Plot the data and the model prediction
X_fit = np.linspace(0, 1, 100)[:, np.newaxis]
y_fit = model.predict(X_fit)

plt.plot(X.squeeze(), y, 'o')
plt.plot(X_fit.squeeze(), y_fit)
Linear regression
Linear regression

Hồi quy tuyến tính được sử dụng rộng rãi trong thực tế do tính chất đơn giản hóa của hồi quy. Hàm ước lượng thống kê được sử dụng phổ biến nhất là phương pháp bình phương nhỏ nhất (least square method).

Tham khảo thêm:

One thought on “Scikit-learn: Linear regression

Gửi phản hồ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 Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s