Bài 19: Hồi quy thích nghi đa biến Spline (Multivariate Adaptive Regression Splines)
Khi mối quan hệ giữa một tập hợp các biến dự báo và một biến phản hồi là tuyến tính, chúng ta thường có thể sử dụng hồi quy tuyến tính, giả định rằng mối quan hệ giữa một biến dự báo nhất định và một biến phản hồi có dạng:
Y = β 0 + β 1 X + ε
Nhưng trên thực tế, mối quan hệ giữa các 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 quyết 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 trở nên linh hoạt hơn và có thể phù hợp với dữ liệu phi tuyến.
Tuy nhiên, hồi quy đa thức có một vài nhược điểm:
1. Hồi quy đa thức có thể dễ dàng bị overfits trên tập dữ liệu, nếu h được chọn quá lớn. Trong thực tế, h thường không lớn hơn 3 hoặc 4 vì khi vượt qua 4, mô hình quá nhạy với nhiễu, đối với một tập huấn luyện và không tổng quát hóa tốt cho dữ liệu cần dự báo.
2. Hồi quy đa thức áp đặt một hàm toàn cục trên toàn bộ tập dữ liệu, không phải lúc nào cũng chính xác.
Một thay thế cho hồi quy đa thức là các splines hồi quy thích ứng đa biến (multivariate adaptive regression splines - MARS).
Ý tưởng cơ bản
Phương pháp MARS hoạt động như sau:
1. Chia một tập dữ liệu thành k phần
Đầu tiên, chúng ta chia một tập dữ liệu thành k phần khác nhau. Các điểm mà chúng ta phân chia tập dữ liệu được gọi là các nút thắt (knots).
Chúng ta xác định các nút thắt bằng cách đánh giá từng điểm cho mỗi dự báo như một nút thắt tiềm năng và tạo ra một mô hình hồi quy tuyến tính bằng cách sử dụng các tính năng ứng viên. Điểm có thể giảm thiểu lỗi nhất trong mô hình được cho là nút thắt.
Khi chúng ta đã xác định được nút thắt đầu tiên, sau đó chúng ta lặp lại quy trình để tìm các nút thắt bổ sung. Chúng ta có thể tìm thấy bao nhiêu nút thắt, nếu ta cho là hợp lý để bắt đầu.
2. Xây dựng hàm hồi quy cho từng mảnh để tạo thành một hàm khớp nối (hinge function).
Khi chúng ta đã chọn các nút và fit với mô hình hồi quy cho từng phần của tập dữ liệu, tiếp đó chúng ta cần xây dựng các hàm khớp nối, được ký hiệu là h(xa) , trong đó a là (các) giá trị điểm cắt.
Ví dụ, hàm khớp nối cho mô hình có một nút có thể như sau:
- y = β 0 + β 1 (4,3 - x) nếu x <4,3
- y = β 0 + β 1 (x - 4,3) nếu x> 4,3
Trong trường hợp này, ta xác định rằng việc chọn 4,3 làm giá trị điểm cắt có thể giảm sai số nhiều nhất trong số tất cả các giá trị điểm cắt có thể có. Sau đó, chúng ta phù hợp với một mô hình hồi quy khác với các giá trị nhỏ hơn 4,3 so với các giá trị lớn hơn 4,3.
Hàm khớp nối với hai nút có thể như sau:
- y = β 0 + β 1 (4,3 - x) nếu x <4,3
- y = β 0 + β 1 (x - 4,3) nếu x> 4,3 & x <6,7
- y = β 0 + β 1 (6,7 - x) nếu x> 6,7
Trong trường hợp này, ta xác định rằng việc chọn 4.3 và 6.7 làm giá trị điểm cắt có thể giảm sai số nhiều nhất trong số tất cả các giá trị điểm cắt có thể có. Sau đó, chúng ta điều chỉnh một mô hình hồi quy cho các giá trị nhỏ hơn 4,3, một mô hình hồi quy khác cho các giá trị từ 4,3 đến 6,7 và một mô hình hồi quy khác cho các giá trị lớn hơn 4,3.
3. Chọn k dựa trên xác nhận chéo k-lần.
Cuối cùng, khi chúng ta đã xây dựng một số mô hình khác nhau bằng cách sử dụng số lượng nút thắt khác nhau cho mỗi mô hình, chúng tacó thể thực hiện xác nhận chéo k-lần để xác định mô hình tạo ra sai số bình phương trung bình thử nghiệm thấp nhất (MSE).
Mô hình có MSE thử nghiệm thấp nhất được chọn là mô hình tổng quát hóa tốt nhất cho dữ liệu mới.
Ưu điểm & Nhược điểm
Các đường hồi quy thích ứng đa biến có những ưu và nhược điểm sau:
Ưu điểm :
- Có thể được sử dụng cho cả bài toán hồi quy và phân lớp.
- MARS hoạt động tốt trên các tập dữ liệu lớn.
- Cung cấp khả năng tính toán nhanh chóng.
- MARS không yêu cầu phải chuẩn hóa các biến dự báo.
Nhược điểm:
- MARS có xu hướng hoạt động không tốt như các phương pháp phi tuyến tính như phương pháp Random Forest và Gradient Boosting Machines.
MARS với Python
Các splines hồi quy thích ứng đa biến (MARS) có thể được sử dụng để mô hình hóa các mối quan hệ phi tuyến giữa một tập hợp các biến dự báo và một biến phản hồi .
Phương pháp này hoạt động như sau:
1. Chia một tập dữ liệu thành k phần.
2. Phù hợp với một mô hình hồi quy cho từng phần.
3. Sử dụng xác nhận chéo k-lần để chọn một giá trị cho k .
Hướng dẫn sau cung cấp một ví dụ từng bước về cách khớp mô hình MARS với tập dữ liệu bằng Python.
Bước 1: Cài đặt các gói cần thiết
Để phù hợp với mô hình MARS trong Python, chúng ta sẽ sử dụng hàm Earth() từ thư viện sklearn-Contrib-py-earth . Chúng ta sẽ bắt đầu bằng cách cài đặt gói này:
pip install sklearn-contrib-py-earth
Tiếp theo, chúng ta sẽ import một số gói cần thiết khác:
import pandas as pd from numpy import mean from sklearn.model_selection import cross_val_score from sklearn.model_selection import RepeatedKFold from sklearn.datasets import make_regression from pyearth import Earth
Bước 2: Tạo tập dữ liệu
Đối với ví dụ này, chúng ta sẽ sử dụng hàm make_regression() để tạo một tập dữ liệu giả với 5.000 quan sát và 15 biến dự báo:
#create fake regression data X, y = make_regression(n_samples=5000, n_features=15, n_informative=10, noise=0.5, random_state=5)
Bước 3: Xây dựng & Tối ưu hóa mô hình MARS
Tiếp theo, chúng ta sẽ sử dụng hàm Earth() để xây dựng mô hình MARS và hàm RepeatedKFold() để thực hiện xác nhận chéo k-lần để đánh giá hiệu suất của mô hình.
Đối với ví dụ này, chúng ta sẽ thực hiện xác thực chéo 10 lần, lặp lại 3 lần.
#define the model model = Earth() #specify cross-validation method to use to evaluate model cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1) #evaluate model performance scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1) #print results mean(scores) -1.745345918289
Từ kết quả đầu ra, chúng ta có thể thấy rằng sai số tuyệt đối trung bình (bỏ qua dấu âm) cho loại mô hình này là 1.7453 .
Trong thực tế, chúng ta có thể fit với nhiều mô hình khác nhau với một tập dữ liệu nhất định (như Ridge, Lasso, Hồi quy tuyến tính bội, Bình phương tối thiểu từng phần, Hồi quy đa thức, v.v.) và so sánh sai số tuyệt đối trung bình giữa tất cả các mô hình để xác định mô hình tạo ra MAE thấp nhất.
Lưu ý rằng chúng ta cũng có thể sử dụng các số liệu khác để đo lường lỗi, chẳng hạn như sai số R^2 được điều chỉnh hoặc bình phương trung bình.
Có thể tìm thấy mã Python hoàn chỉnh được sử dụng trong bài này tại [https://github.com/Statology/Python-Guides/blob/main/multivariate_adaptive_regression_splines.py]
Nhận xét
Đăng nhận xét