Bài 15: Hồi quy Lasso
Trong hồi quy tuyến tính bội thông thường , chúng ta sử dụng tập hợp p biến dự báo và biến phản hồi để fit với mô hình có dạng:
Y = β 0 + β 1 X 1 + β 2 X 2 +… + β p X p + ε
ở đây:
- Y : Biến phản hồi
- X j : Biến dự báo thứ j
- β j : Tác động trung bình lên Y của việc gia tăng một đơn vị trong X j , giữ cố định tất cả các yếu tố dự đoán khác
- ε : Phần lỗi (error term)
Các giá trị cho β 0 , β 1 , B 2 ,…, β p được chọn bằng cách sử dụng phương pháp bình phương nhỏ nhất , phương pháp này tối thiểu hóa tổng các phần dư bình phương (RSS):
RSS = Σ (y i - ŷ i ) 2
ở đây:
- Σ : Kí hiệu tổng
- y i : Giá trị phản hồi thực tế cho lần quan sát thứ i
- ŷ i : Giá trị phản hồi dự đoán dựa trên mô hình hồi quy tuyến tính bội
Tuy nhiên, khi các biến dự báo có tương quan cao thì hiện tượng đa cộng tuyến (https://www.statology.org/multicollinearity-regression/) có thể trở thành một vấn đề. Điều này có thể làm cho các ước lượng hệ số của mô hình không đáng tin cậy và có phương sai cao. Có nghĩa là, khi mô hình được áp dụng cho một tập dữ liệu mới mà nó chưa từng có, nó sẽ có khả năng hoạt động kém.
Một cách để giải quyết vấn đề này là sử dụng một phương pháp được gọi là hồi quy lasso , phương pháp này thay vào đó tìm cách giảm thiểu những điều sau:
RSS + λΣ | β j |
trong đó j nằm trong khoảng từ 1 đến p và λ ≥ 0.
Số hạng thứ hai trong phương trình này được gọi là hệ số phạt co giãn (shrinkage penalty).
Khi λ = 0, hệ số phạt này không có hiệu lực và hồi quy lasso tạo ra các ước lượng hệ số giống như phương pháp bình phương nhỏ nhất.
Tuy nhiên, khi λ tiến gần đến vô cùng, hệ số phạt trở nên ảnh hưởng nhiều hơn và các biến dự báo không thể nhập được trong mô hình sẽ bị thu hẹp về 0 và một số thậm chí bị loại khỏi mô hình.
Tại sao sử dụng Lasso Regression?
Lợi thế của hồi quy lasso so với hồi quy bình phương nhỏ nhất nằm ở sự cân bằng phương sai lệch .
Nhớ lại rằng sai số bình phương trung bình (MSE) là đại lượng mà chúng ta có thể sử dụng để đo độ chính xác của một mô hình nhất định và nó được tính như sau:
MSE = Var ( f̂ ( x 0 )) + [Bias ( f̂ ( x 0 ))] 2 + Var (ε)
MSE = Phương sai + Độ lệch 2 + Lỗi không thể điều chỉnh được
Ý tưởng cơ bản của hồi quy lasso là đưa ra một chút điều chỉnh để phương sai có thể được giảm đáng kể, dẫn đến MSE tổng thể thấp hơn.
Để minh họa điều này, hãy xem xét biểu đồ sau:
Lưu ý rằng khi λ tăng, phương sai giảm đáng kể với độ chệch tăng rất ít. Tuy nhiên, vượt ra khỏi một điểm nhất định, phương sai giảm ít nhanh hơn và sự co lại trong các hệ số khiến chúng bị đánh giá thấp hơn đáng kể, dẫn đến sự gia tăng lớn độ chệch.
Chúng ta có thể thấy từ biểu đồ rằng MSE thử nghiệm là thấp nhất khi chúng ta chọn một giá trị cho λ tạo ra sự cân bằng tối ưu giữa độ chệch và phương sai.
Khi λ = 0, hệ số phạt trong hồi quy lasso không có hiệu lực và do đó nó tạo ra các ước lượng hệ số giống như bình phương nhỏ nhất. Tuy nhiên, bằng cách tăng λ đến một điểm nhất định, chúng ta có thể giảm MSE thử nghiệm tổng thể.
Điều này có nghĩa là mô hình được fit bằng hồi quy lasso sẽ tạo ra sai số kiểm tra nhỏ hơn so với mô hình phù hợp bằng hồi quy bình phương nhỏ nhất.
Hồi quy Lasso so với hồi quy Ridge
Hồi quy Lasso và hồi quy ridge đều được gọi là phương pháp chính quy hóa (https://www.statology.org/bias-variance-tradeoff/) vì cả hai đều cố gắng giảm thiểu tổng bình phương các phần dư bình phương (RSS) cùng với một số hệ số phạt.
Nói cách khác, chúng hạn chế hoặc chính quy hóa các ước lượng hệ số của mô hình.
Tuy nhiên, các hệ số phạt mà chúng sử dụng hơi khác nhau một chút:
- Hồi quy Lasso cố gắng giảm thiểu RSS + λΣ | β j |
- Hồi quy Ridge cố gắng giảm thiểu RSS + λΣβ j 2
Khi chúng ta sử dụng hồi quy ridge, các hệ số của mỗi yếu tố dự báo bị thu hẹp về 0 nhưng không có hệ số nào trong số chúng có thể hoàn toàn về 0 .
Ngược lại, khi chúng ta sử dụng hồi quy lasso, có thể một số hệ số có thể hoàn toàn về 0 khi λ đủ lớn.
Về mặt kỹ thuật, hồi quy lasso có khả năng tạo ra các mô hình “thưa thớt” - các mô hình chỉ bao gồm một tập hợp con của các biến dự báo.
Điều này đặt ra câu hỏi: Hồi quy ridge hay hồi quy lasso tốt hơn?
Câu trả lời: Chúng có quan hệ lẫn nhau!
Trong trường hợp chỉ có một số lượng nhỏ các biến dự báo là quan trọng, thì hồi quy lasso có xu hướng hoạt động tốt hơn vì nó có thể thu nhỏ các biến không quan trọng hoàn toàn về 0 và loại bỏ chúng khỏi mô hình.
Tuy nhiên, khi nhiều biến dự báo có ý nghĩa trong mô hình và hệ số của chúng gần như bằng nhau thì hồi quy ridge có xu hướng hoạt động tốt hơn vì nó giữ tất cả các yếu tố dự báo trong mô hình.
Để xác định mô hình nào tốt hơn trong việc đưa ra dự đoán, chúng ta thực hiện xác thực chéo k-lần . Mô hình nào tạo ra sai số bình phương trung bình thử nghiệm thấp nhất (MSE) là mô hình được ưu tiên sử dụng.
Các bước để thực hiện hồi quy Lasso trong thực tế
Các bước sau có thể được sử dụng để thực hiện hồi quy lasso:
Bước 1: Tính toán ma trận tương quan và giá trị VIF cho các biến dự báo.
Đầu tiên, chúng ta nên tạo một ma trận tương quan và tính toán các giá trị VIF (variance inflation factor) cho mỗi biến dự báo.
Nếu chúng ta phát hiện mối tương quan cao giữa các biến dự báo và giá trị VIF cao (một số tài liệu cho rằng giá trị VIF “cao” là 5 trong khi những tài liệu khác sử dụng 10) thì hồi quy lasso có khả năng thích hợp để sử dụng.
Tuy nhiên, nếu không có đa cộng tuyến trong dữ liệu thì có thể không cần thực hiện hồi quy lasso ngay từ đầu. Thay vào đó, chúng ta có thể thực hiện hồi quy bình phương nhỏ nhất thông thường.
Bước 2: Điều chỉnh mô hình hồi quy lasso và chọn một giá trị cho λ.
Khi chúng ta xác định rằng hồi quy lasso thích hợp để sử dụng, chúng ta có thể điều chỉnh mô hình (sử dụng các ngôn ngữ lập trình phổ biến như R hoặc Python) bằng cách sử dụng giá trị tối ưu cho λ.
Để xác định giá trị tối ưu cho λ, chúng ta có thể fitvới một số mô hình sử dụng các giá trị khác nhau cho λ và chọn λ là giá trị tạo ra MSE thử nghiệm thấp nhất.
Bước 3: So sánh hồi quy lasso với hồi quy ridge và hồi quy bình phương nhỏ nhất thông thường.
Cuối cùng, chúng ta có thể so sánh mô hình hồi quy lasso của mình với mô hình hồi quy ridge và mô hình hồi quy bình phương nhỏ nhất để xác định mô hình nào tạo ra MSE thử nghiệm thấp nhất bằng cách sử dụng xác nhận chéo k-lần.
Tùy thuộc vào mối quan hệ giữa các biến dự báo và biến phản hồi, một trong ba mô hình này hoàn toàn có khả năng hoạt động tốt hơn các mô hình khác trong các tình huống khác nhau.
Hồi quy Lasso với Python
Hướng dẫn sau cung cấp một ví dụ từng bước về cách thực hiện hồi quy lasso trong Python.
Bước 1: Nhập các gói cần thiết
Đầu tiên, chúng ta sẽ nhập các gói cần thiết để thực hiện hồi quy lasso trong Python:
import pandas as pd
from numpy import arange
from sklearn.linear_model import LassoCV
from sklearn.model_selection import RepeatedKFold
Bước 2: Tải dữ liệu
Đối với ví dụ này, chúng ta sẽ sử dụng một tập dữ liệu có tên là mtcars , chứa thông tin về 33 chiếc xe khác nhau. Chúng ta sẽ sử dụng hp làm biến phản hồi và các biến sau làm yếu tố dự đoán:
- mpg
- wt
- drat
- qsec
Đoạn mã sau cho biết cách tải và xem tập dữ liệu này:
#define URL where data is located
url = "https://raw.githubusercontent.com/Statology/Python-Guides/main/mtcars.csv"
#read in data
data_full = pd.read_csv(url)
#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]
#view first six rows of data
data[0:6]
mpg wt drat qsec hp
0 21.0 2.620 3.90 16.46 110
1 21.0 2.875 3.90 17.02 110
2 22.8 2.320 3.85 18.61 93
3 21.4 3.215 3.08 19.44 110
4 18.7 3.440 3.15 17.02 175
5 18.1 3.460 2.76 20.22 105
Bước 3: Điều chỉnh mô hình hồi quy Lasso
Tiếp theo, chúng ta sẽ sử dụng hàm LassoCV() từ thư viện sklearn để fit với mô hình hồi quy lasso và chúng ta sẽ sử dụng hàm RepeatedKFold() để thực hiện xác thực chéo k-lần để tìm giá trị alpha tối ưu để sử dụng cho hệ số phạt.
Lưu ý: Thuật ngữ “alpha” được sử dụng thay vì “lambda” trong Python.
Đối với ví dụ này, chúng ta sẽ chọn k = 10 lần gấp và lặp lại quy trình xác nhận chéo 3 lần.
Cũng lưu ý rằng LassoCV() chỉ kiểm tra các giá trị alpha 0,1, 1 và 10 theo mặc định. Tuy nhiên, chúng ta có thể xác định phạm vi alpha của riêng mình từ 0 đến 1 theo số gia 0,01:
#define predictor and response variables X = data[["mpg", "wt", "drat", "qsec"]] y = data["hp"] #define cross-validation method to evaluate model cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1) #define model model = LassoCV(alphas=arange(0, 1, 0.01), cv=cv, n_jobs=-1) #fit model model.fit(X, y) #display lambda that produced the lowest test MSE print(model.alpha_) 0.99
Giá trị lambda giảm thiểu MSE thử nghiệm là 0,99 .
Bước 4: Sử dụng mô hình để đưa ra dự đoán
Cuối cùng, chúng ta có thể sử dụng mô hình hồi quy lasso cuối cùng để đưa ra dự đoán về các quan sát mới. Ví dụ: đoạn mã sau cho biết cách xác định một chiếc ô tô mới với các thuộc tính sau:
- mpg: 24
- wt: 2,5
- drat: 3,5
- qsec: 18,5
Đoạn mã sau đây cho thấy cách sử dụng mô hình hồi quy lasso được trang bị để dự đoán giá trị hp của quan sát mới này:
#define new observation
new = [24, 2.5, 3.5, 18.5]
#predict hp value using lasso regression model
model.predict([new])
array([105.63442071])
Dựa trên các giá trị đầu vào, mô hình dự đoán chiếc xe này có giá trị mã lực là 105,63442071 .
Có thể tìm thấy mã Python hoàn chỉnh được sử dụng trong ví dụ này tại [https://github.com/Statology/Python-Guides/blob/main/lasso_regression.py]
Nhận xét
Đăng nhận xét