Bài 14: Hồi quy Ridge


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 để phù hợp 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
  • Xj :  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
  • 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ì vấn đề  đ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.

Một cách để giải quyết vấn đề này mà không cần loại bỏ hoàn toàn một số biến dự báo khỏi mô hình là sử dụng một phương pháp được gọi là hồi quy ridgephương pháp  này thay vào đó tìm cách giảm thiểu những điều sau:

RSS + λΣβ2

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 ridge 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 đến vô cùng, hệ số phạt co giãn sẽ có ảnh hưởng nhiều hơn và các  hệ số ước tính của hồi quy ridge  tiến gần đến 0.

Nói chung, các biến dự báo ít ảnh hưởng nhất trong mô hình sẽ tiền về 0 nhanh nhất.

Tại sao sử dụng hồi quy Ridge?

Lợi thế của hồi quy ridge 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à một đạ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à đượ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 ridge là "thêm vào" một chút sai lệch để 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:

Sự cân bằng phương sai sai lệch hồi quy Ridge

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 hơn và sự co dãn 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 co giãntrong hồi quy ridge sẽ 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ể.

Đến một điểm nhất định, chúng ta có thể giảm MSE thử nghiệm tổng thể.

Kiểm tra hồi quy Ridge Giảm MSE

Điều này có nghĩa là mô hình được fit theo hồi quy ridge sẽ tạo ra sai số kiểm tra nhỏ hơn so với mô hình được fit theo hồi quy bình phương nhỏ nhất.

Các bước để thực hiện hồi quy Ridge trong thực tế

Các bước sau có thể được sử dụng để thực hiện hồi quy ridge:

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 ( VIF (variance inflation factor)) cho mỗi biến dự báo.

Nếu chúng ta phát hiện ra 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 một số tài liệu khác cho là 10) thì hồi quy ridge có thể 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 ridgei 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: Chuẩn hóa từng biến dự báo

Trước khi thực hiện hồi quy ridge, chúng ta nên chia tỷ lệ dữ liệu sao cho mỗi biến dự báo có giá trị trung bình bằng 0 và độ lệch chuẩn là 1. Điều này đảm bảo rằng không có biến dự báo đơn lẻ nào có ảnh hưởng quá mức khi thực hiện hồi quy ridge.

Bước 3: Điều chỉnh mô hình hồi quy ridge và chọn một giá trị cho λ.

Không có công thức chính xác nào để chúng ta có thể sử dụng để xác định giá trị nào là phù hợp  cho λ. Trong thực tế, có hai cách phổ biến để chọn λ:

(1) Tạo sơ đồ vết Ridge. Đây là một biểu đồ trực quan hóa các giá trị của ước lượng hệ số khi λ tăng dần về phía vô cùng. Thông thường, chúng ta chọn λ làm giá trị mà hầu hết các ước lượng hệ số bắt đầu ổn định.

Âm mưu dấu vết Ridge

(2) Tính MSE thử nghiệm cho mỗi giá trị của λ.

Một cách khác để chọn λ là chỉ cần tính MSE thử nghiệm của mỗi mô hình với các giá trị khác nhau của λ và chọn λ là giá trị tạo ra MSE thử nghiệm thấp nhất.

Ưu và nhược điểm của hồi quy Ridge

Lợi ích lớn nhất  của hồi quy ridge là khả năng tạo ra sai số bình phương trung bình thử nghiệm (MSE) thấp hơn so với hồi quy bình phương nhỏ nhất khi có đa cộng tuyến.

Tuy nhiên, nhược điểm lớn nhất  của hồi quy ridge là không có khả năng thực hiện lựa chọn biến vì nó bao gồm tất cả các biến dự báo trong mô hình cuối cùng. Vì một số yếu tố dự đoán sẽ bị thu hẹp lại rất gần bằng 0, điều này có thể gây khó khăn cho việc giải thích kết quả của mô hình.

Trong thực tế, hồi quy ridge có tiềm năng tạo ra một mô hình có thể đưa ra dự đoán tốt hơn so với mô hình bình phương nhỏ nhất nhưng thường khó diễn giải kết quả của mô hình hơn. 

Tùy thuộc vào việc giải thích mô hình hoặc độ chính xác của dự đoán quan trọng hơn đối với bạn, bạn có thể chọn sử dụng bình phương nhỏ nhất thông thường hoặc hồi quy ridge trong các tình huống khác nhau.

Hồi quy Ridge 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 ridge 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 ridge trong Python:

import pandas as pd
from numpy import arange
from sklearn.linear_model import Ridge
from sklearn.linear_model import RidgeCV
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 Ridge

Tiếp theo, chúng ta sẽ sử dụng hàm RidgeCV() của thư viện sklearn để fit mô hình hồi quy ridge 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 RidgeCV() chỉ kiểm tra các giá trị alpha .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 = RidgeCV(alphas=arange(0, 1, 0.01), cv=cv, scoring='neg_mean_absolute_error')

#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 ridge 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 ridge phù hợp để 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 ridge regression model
model.predict([new])

array([104.16398018])

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à  104,16398018 .

Bạn 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/ridge_regression.py]

Nhận xét

Bài đăng phổ biến từ blog này

Bài 11: Đánh giá chéo K-Fold

Bài 1, 2. Học máy theo cách tiếp cận thống kê và minh hoạ với Python