Bài 18, 19: Mô hình hồi quy bậc cao
Bài 18: Hồi quy đa thức
Khi chúng ta có một tập dữ liệu với một biến dự báo và một biến phản hồi , chúng ta thường sử dụng hồi quy tuyến tính để định lượng mối quan hệ giữa hai biến.
Tuy nhiên, hồi quy tuyến tính giả định rằng mối quan hệ giữa yếu tố dự đoán và biến phản hồi là tuyến tính. Phương trình của hồi quy tuyến tính có dạng:
Y = β 0 + β 1 X + ε
Nhưng trên thực tế, mối quan hệ giữa hai biến thực sự có thể là phi tuyến tính và việc cố gắng sử dụng hồi quy tuyến tính có thể dẫn đến một mô hình kém phù hợp.
Một cách để giải thích mối quan hệ phi tuyến giữa biến dự đoán và biến phản hồi là sử dụng hồi quy đa thức , có dạng:
Y = β 0 + β 1 X + β 2 X 2 +… + β h X h + ε
Trong phương trình này, h được gọi là bậc của đa thức.
Khi chúng ta tăng giá trị cho h , mô hình có thể phù hợp với các mối quan hệ phi tuyến tốt hơn, nhưng trong thực tế, chúng ta hiếm khi chọn h lớn hơn 3 hoặc 4. Khi h>4, mô hình trở nên quá nhạy và bị hiện tượng overfits data.
Lưu ý
- Mặc dù hồi quy đa thức có thể phù hợp với dữ liệu phi tuyến, nó vẫn được coi là một dạng của hồi quy tuyến tính vì nó tuyến tính theo các hệ số β 1 , β 2 ,…, β h .
- Hồi quy đa thức cũng có thể được sử dụng cho nhiều biến dự báo nhưng điều này tạo ra các term tương tác trong mô hình, điều này có thể làm cho mô hình trở nên cực kỳ phức tạp nếu sử dụng nhiều hơn một vài biến dự báo.
Khi nào sử dụng hồi quy đa thức
Chúng ta sử dụng hồi quy đa thức khi mối quan hệ giữa biến dự đoán và biến phản hồi là phi tuyến tính.
Có ba cách phổ biến để phát hiện mối quan hệ phi tuyến:
1. Vẽ biểu đồ Scatterplot.
Cách dễ nhất để phát hiện mối quan hệ phi tuyến là tạo biểu đồ phân tán của biến phản hồi so với biến dự đoán.
Ví dụ: nếu chúng ta có biểu đồ phân tán sau, chúng ta có thể thấy rằng mối quan hệ giữa hai biến là gần như tuyến tính, do đó, hồi quy tuyến tính có thể sẽ hoạt động tốt trên dữ liệu này.
Tuy nhiên, nếu biểu đồ phân tán của chúng ta trông giống như một trong các biểu đồ sau, chúng ta có thể thấy rằng mối quan hệ là phi tuyến tính và do đó hồi quy đa thức sẽ là một ý tưởng hay:
2. Tạo một phần dư so với phần vừa vặn.
Một cách khác để phát hiện tính phi tuyến tính là điều chỉnh một mô hình hồi quy tuyến tính đơn với dữ liệu và sau đó tạo ra một biểu đồ giá trị thặng dư - mức độ phù hợp (residuals vs. fitted values plot). [https://www.statology.org/how-to-create-a-residual-plot-in-excel/]
Nếu phần còn lại của biểu đồ được phân bố gần như đồng đều quanh 0 và không có mô hình rõ ràng, thì hồi quy tuyến tính đơn giản là đủ.
Tuy nhiên, nếu phần dư hiển thị một mẫu phi tuyến trong biểu đồ thì đây là một dấu hiệu cho thấy mối quan hệ giữa yếu tố dự đoán và phản hồi có thể là phi tuyến tính.
3. Tính R 2 của mô hình.
Giá trị R 2 của mô hình hồi quy cho ta biết mức độ phần trăm biến thiên trong biến phản hồi có thể được giải thích bởi (các) biến dự báo.
Đây có thể là một dấu hiệu cho thấy bạn có thể cần sử dụng hồi quy đa thức.
Có thể tham khảo thêm về R2 ở địa chỉ sau: [https://www.statology.org/good-r-squared-value/]
Cách xác định bậc của đa thức
Mô hình hồi quy đa thức có dạng sau:
Y = β 0 + β 1 X + β 2 X 2 +… + β h X h + ε
Trong phương trình này, h là bậc của đa thức.
Nhưng làm thế nào để chúng ta chọn giá trị phù hợp cho h ?
Trong thực tế, chúng ta fit với một số mô hình khác nhau với các giá trị h khác nhau và thực hiện xác nhận chéo k lần để xác định mô hình nào tạo ra sai số bình phương trung bình thử nghiệm (MSE) thấp nhất.
Ví dụ: chúng ta có thể fit các mô hình sau với một tập dữ liệu nhất định:
- Y = β 0 + β 1 X
- Y = β 0 + β 1 X + β 2 X 2
- Y = β 0 + β 1 X + β 2 X 2 + β 3 X 3
- Y = β 0 + β 1 X + β 2 X 2 + β 3 X 3 + β 4 X 4
Sau đó, chúng ta có thể sử dụng xác nhận chéo k-lần để tính toán MSE thử nghiệm của mỗi mô hình, điều này sẽ cho chúng ta biết mỗi mô hình hoạt động tốt như thế nào trên dữ liệu mà mô hình dự báo chưa gặp.
Sự cân bằng phương sai lệch của hồi quy đa thức
Tồn tại sự cân bằng phương sai lệch khi sử dụng hồi quy đa thức. Khi chúng ta tăng bậc của đa thức, độ chệch giảm (khi đómô hình trở nên nhạy hơn) nhưng phương sai tăng lên.
Như với tất cả các mô hình học máy, chúng ta phải tìm ra sự cân bằng tối ưu giữa độ chệch và phương sai.
Trong hầu hết các trường hợp, khi tăng bậc của đa thức đến một giá trị nào đó, khi vượt quá một giá trị nhất định, mô hình bắt đầu phù hợp với nhiễu của dữ liệu và MSE thử nghiệm bắt đầu giảm.
Để đảm bảo rằng chúng ta fit với một mô hình tốt nhưng không quá mềm dẻo, chúng ta sử dụng xác nhận chéo k-lần để tìm ra mô hình tạo ra MSE thử nghiệm thấp nhất.
Thực hiện hồi quy đa thức trong Python
Hướng dẫn sau giải thích cách thực hiện hồi quy đa thức trong Python.
Ví dụ: Hồi quy đa thức trong Python
Giả sử chúng ta có biến dự đoán sau (x) và biến phản hồi (y) trong Python:
x = [2, 3, 4, 5, 6, 7, 7, 8, 9, 11, 12] y = [18, 16, 15, 17, 20, 23, 25, 28, 31, 30, 29]
Nếu chúng ta tạo một biểu đồ phân tán đơn giản của dữ liệu này, chúng ta có thể thấy rằng mối quan hệ giữa x và y rõ ràng không phải là tuyến tính:
import matplotlib.pyplot as plt #create scatterplot plt.scatter(x, y)
Do đó, mô hình hồi quy tuyến tính sẽ không phù hợp với dữ liệu này. Thay vào đó, chúng ta có thể cố gắng điều chỉnh về mô hình hồi quy đa thức với bậc 3 bằng cách sử dụng hàm numpy.polyfit():
import numpy as np #polynomial fit with degree = 3 model = np.poly1d(np.polyfit(x, y, 3)) #add fitted polynomial line to scatterplot polyline = np.linspace(1, 12, 50) plt.scatter(x, y) plt.plot(polyline, model(polyline)) plt.show()
Chúng ta có thể thu được phương trình hồi quy đa thức vừa vặn bằng cách in ra các hệ số của mô hình:
print(model) poly1d([ -0.10889554, 2.25592957, -11.83877127, 33.62640038])
Phương trình hồi quy đa thức phù hợp cho mô hình là:
y = -0.109x 3 + 2.256x 2 - 11.839x + 33.626
Phương trình này có thể được sử dụng để tìm giá trị mong đợi cho biến phản hồi dựa trên một giá trị nhất định cho biến giải thích. Ví dụ: giả sử x = 4. Giá trị mong đợi cho biến phản hồi, y, sẽ là:
y = -0.109 (4) 3 + 2.256 (4) 2 - 11.839 (4) + 33.626 = 15.39 .
Chúng ta cũng có thể viết một hàm ngắn để thu được R^2 của mô hình, là tỷ lệ của phương sai trong biến phản hồi có thể được giải thích bằng các biến dự báo.
#define function to calculate r-squared def polyfit(x, y, degree): results = {} coeffs = numpy.polyfit(x, y, degree) p = numpy.poly1d(coeffs) #calculate r-squared yhat = p(x) ybar = numpy.sum(y)/len(y) ssreg = numpy.sum((yhat-ybar)**2) sstot = numpy.sum((y - ybar)**2) results['r_squared'] = ssreg / sstot return results #find r-squared of polynomial model with degree = 3 polyfit(x, y, 3) {'r_squared': 0.9841113454245183}
Trong ví dụ này, R^2 của mô hình là 0,9841 . Điều này có nghĩa là 98,41% sự thay đổi trong biến phản hồi có thể được giải thích bởi các biến dự báo.
Nhận xét
Đăng nhận xét