Bài 10: Đánh giá  chéo bỏ ra một lần quan sát (Leave-One-Out Cross-Validation) (LOOCV)


Để đánh giá hiệu suất của một mô hình trên tập dữ liệu, chúng ta cần đo lường mức độ phù hợp của các dự đoán của mô hình với dữ liệu quan sát.

Cách phổ biến nhất để đo điều này là sử dụng sai số bình phương trung bình (MSE), được tính như sau:

MSE = (1 / n) * Σ (y i - f (x i )) 2

ở đây:

  • n: Tổng số quan sát
  • yi : Giá trị phản hồi của lần quan sát thứ i
  • f (x i): Giá trị phản hồi dự báo của lần quan sát thứ i

Các dự đoán của mô hình càng gần với các quan sát, MSE sẽ càng nhỏ.

Trong thực tế, chúng ta sử dụng quy trình sau để tính toán MSE của một mô hình nhất định:

1. Tách tập dữ liệu thành tập huấn luyện và tập thử nghiệm.

Tập hợp đào tạo so với thử nghiệm trong học máy

2. Xây dựng mô hình chỉ sử dụng dữ liệu từ tập huấn luyện.

LOOCV trong học máy

3. Sử dụng mô hình để đưa ra các dự đoán trên bộ thử nghiệm và đo lường MSE - đây được gọi là MSE thử nghiệm .Tập hợp đào tạo so với thử nghiệm

MSE thử nghiệm cho chúng ta một ý tưởng về việc một mô hình sẽ hoạt động tốt như thế nào trên dữ liệu mà nó chưa biết trước đây, tức là dữ liệu không được sử dụng để “đào tạo” mô hình.

Tuy nhiên, hạn chế của việc chỉ sử dụng một tập thử nghiệm là MSE thử nghiệm có thể thay đổi rất nhiều tùy thuộc vào quan sát nào được sử dụng trong tập huấn luyện và thử nghiệm.

Nếu chúng ta sử dụng một tập hợp quan sát khác cho tập huấn luyện và tập thử nghiệm thì MSE thử nghiệm của chúng ta có thể lớn hơn hoặc nhỏ hơn nhiều.

Một cách để tránh vấn đề này là điều chỉnh một mô hình nhiều lần bằng cách sử dụng một bộ huấn luyện và thử nghiệm khác nhau mỗi lần, sau đó tính MSE thử nghiệm là giá trị trung bình của tất cả MSE thử nghiệm.

Phương pháp  này được gọi là đánh giá chéo và một dạng cụ thể của nó được gọi là: leave-one-out cross-validation.

Leave-one-out cross-validation - Đán giá chéo bỏ ra một lần quan sát

LOOCV sử dụng cách tiếp cận sau để đánh giá một mô hình:

1.  Tách tập dữ liệu thành tập huấn luyện và tập thử nghiệm, sử dụng tất cả trừ một quan sát như một phần của tập huấn luyện:

LOOCV

Lưu ý rằng chúng ta chỉ để lại một quan sát "ra" khỏi tập huấn luyện. Đây là lý do mà phương pháp này có tên là: đanh giá chéo "bỏ ra một lần quan sát".

2. Xây dựng mô hình chỉ sử dụng dữ liệu từ tập huấn luyện.

Xây dựng mô hình với cách tiếp cận LOOCV

3. Sử dụng mô hình để dự đoán giá trị phản hồi của một quan sát còn lại ngoài mô hình và tính toán MSE.

Xác nhận chéo để lại một lần

4.  Lặp lại quy trình n lần.

Cuối cùng, chúng ta lặp lại quá trình này  n lần (với  n là tổng số quan sát trong tập dữ liệu), mỗi lần bỏ ra một quan sát khác với tập huấn luyện.

Sau đó, chúng ta tính MSE thử nghiệm là giá trị trung bình của tất cả MSE thử nghiệm:

Kiểm tra MSE = (1 / n) * ΣMSE i

ở đây:

  • n: Tổng số quan sát trong tập dữ liệu
  • MSEi:  Thử nghiệm MSE trong lần chạy mô hình thứ i.

Ưu và nhược điểm của LOOCV

LOOCV có những ưu điểm sau:

  • LOOCV cung cấp một thước đo MSE thử nghiệm ít sai lệch hơn nhiều so với việc sử dụng một tập thử nghiệm đơn lẻ bởi vì chúng ta liên tục điều chỉnh một mô hình với một tập dữ liệu có chứa  n-1 quan sát.
  • LOOCV có xu hướng không đánh giá quá cao MSE thử nghiệm so với việc sử dụng một bộ thử nghiệm duy nhất.

Tuy nhiên, LOOCV có những nhược điểm sau:

  • Nó có thể là một quá trình tốn thời gian để sử dụng khi  n lớn.
  • Nó cũng có thể tốn thời gian nếu một mô hình đặc biệt phức tạp và mất nhiều thời gian để "fit"  với tập dữ liệu.
  • Tốn kém về mặt tính toán.

Lưu ý rằng LOOCV cũng có thể được sử dụng trong cả cài đặt hồi quy và phân lớpĐối với các bài toán hồi quy, LOOCV tính MSE kiểm tra là chênh lệch bình phương trung bình giữa các dự đoán và quan sát trong khi trong các bài toán phân lớp, LOOCV tính MSE kiểm tra là phần trăm các quan sát được phân lớp chính xác trong  n mô hình lặp lại.

LOOCV với Python

Bước 1: Tải các thư viện cần thiết

Đầu tiên, chúng ta sẽ tải các chức năng và thư viện cần thiết cho ví dụ này:

from sklearn.model_selection import train_test_split
from sklearn.model_selection import LeaveOneOut
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression
from numpy import mean
from numpy import absolute
from numpy import sqrt
import pandas as pd

Bước 2: Tạo dữ liệu

Tiếp theo, chúng ta sẽ tạo một DataFrame có chứa hai biến dự đoán, x1 và x2 và một biến phản hồi y.

df = pd.DataFrame({'y': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
                   'x1': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
                   'x2': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})

Bước 3: Thực hiện LOOCV

Tiếp theo, chúng ta sẽ điều chỉnh một mô hình hồi quy tuyến tính bội trên tập dữ liệu và thực hiện LOOCV để đánh giá hiệu suất của mô hình.

#define predictor and response variables
X = df[['x1', 'x2']]
y = df['y']

#define cross-validation method to use
cv = LeaveOneOut()

#build multiple linear regression model
model = LinearRegression()

#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error',
                         cv=cv, n_jobs=-1)

#view mean absolute error
mean(absolute(scores))

3.1461548083469726

Từ kết quả đầu ra, chúng ta có thể thấy rằng sai số tuyệt đối trung bình (MAE) là  3,146 . Tức là, sai số tuyệt đối trung bình giữa dự đoán của mô hình và dữ liệu quan sát thực tế là 3,146.

Nói chung, MAE càng thấp thì mô hình càng có khả năng dự đoán các quan sát thực tế chặt chẽ hơn.

Một số liệu thường được sử dụng khác để đánh giá hiệu suất của mô hình là sai số bình phương trung bình gốc (RMSE). Đoạn mã sau cho biết cách tính số liệu này bằng LOOCV:

#define predictor and response variables
X = df[['x1', 'x2']]
y = df['y']

#define cross-validation method to use
cv = LeaveOneOut()

#build multiple linear regression model
model = LinearRegression()

#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring='neg_mean_squared_error',
                         cv=cv, n_jobs=-1)

#view RMSE
sqrt(mean(absolute(scores)))

3.619456476385567

Từ kết quả đầu ra, chúng ta có thể thấy rằng RMSE là 3,619 . RMSE càng thấp, mô hình càng có khả năng dự đoán các quan sát thực tế chặt chẽ hơn.

Trong thực tế, chúng ta thường "fit "với một số mô hình khác nhau và so sánh RMSE hoặc MAE của từng mô hình để quyết định mô hình nào tạo ra tỷ lệ lỗi thử nghiệm thấp nhất và do đó là mô hình tốt nhất để sử dụng.

Nhận xét

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

AI chatbot hỗ trợ cho GV lên kế hoạch dạy học STEAM theo quy trinh 5E (GV mầm non và GV Tiểu học)

Mô hình IRT 3PL

Trang blog của Nguyễn Thế Dũng - ĐHSP Huế. Mời đọc.