1. Xác thực chéo trong lập trình R

Để biết liệu mô hình được thiết kế có hoạt động tốt hay không, chúng ta phải kiểm tra nó dựa trên những điểm dữ liệu không có trong quá trình đào tạo mô hình. Trong trường hợp này, một phần của tập dữ liệu sẽ không được sử dụng để huấn luyện mô hình. Khi mô hình đã sẵn sàng, tập dữ liệu dành riêng đó sẽ được sử dụng cho mục đích thử nghiệm. Giá trị của biến phụ thuộc được dự đoán trong giai đoạn thử nghiệm và độ chính xác của mô hình được tính toán trên cơ sở sai số dự đoán, tức là sự khác biệt về giá trị thực tế và giá trị dự đoán của biến phụ thuộc. Mục tiêu của xác thực chéo là kiểm tra khả năng của mô hình trong việc dự đoán dữ liệu mới không được sử dụng để ước tính dữ liệu đó. Có một số số liệu thống kê được sử dụng để đánh giá độ chính xác của mô hình hồi quy:

2. Các loại xác thực chéo

Trong quá trình phân vùng tập dữ liệu hoàn chỉnh thành tập huấn luyện và tập xác nhận, có khả năng bị mất một số điểm dữ liệu quan trọng và quan trọng cho mục đích huấn luyện. Vì những dữ liệu đó không được bao gồm trong tập huấn luyện, nên mô hình không có cơ hội phát hiện một số mẫu. Tình huống này có thể dẫn đến việc trang bị quá mức (overfitting) hoặc không vừa vặn (under fitting) của mô hình. Để tránh điều này, có nhiều loại kỹ thuật xác nhận chéo khác nhau đảm bảo lấy mẫu ngẫu nhiên của tập dữ liệu đào tạo và xác nhận và tối đa hóa độ chính xác của mô hình. Một số kỹ thuật xác thực chéo phổ biến nhất là:

  1. Phương pháp tiếp cận Bộ xác thực (Validation Set Approach)
  2. Bỏ qua một xác thực chéo (Leave one out cross-validation - LOOCV)
  3. Xác thực chéo K-lần (K-fold cross-Validation)
  4. Xác thực chéo K lần lặp lại (Repeated K-fold cross-validation)

Tập dữ liệu

## Warning in instance$preRenderHook(instance): It seems your data is too big
## for client-side DataTables. You may consider server-side processing: https://
## rstudio.github.io/DT/server.html

2.1 Validation Set Approach(or data split)

Trong phương pháp này, tập dữ liệu được chia ngẫu nhiên thành các tập huấn luyện và thử nghiệm. Các bước sau được thực hiện để thực hiện kỹ thuật này:

  1. Lấy mẫu ngẫu nhiên của tập dữ liệu
  2. Mô hình được đào tạo trên tập dữ liệu training
  3. Mô hình kết quả được áp dụng cho tập dữ liệu testing
  4. Tính toán lỗi dự đoán (predictions) bằng cách sử dụng số liệu hiệu suất mô hình
set.seed(123)
random_sample <- createDataPartition(raw_moi_3$do_am_percent,
                                     p = 0.8, list = FALSE)
training_dataset  <- raw_moi_3[random_sample, ]
testing_dataset <- raw_moi_3[-random_sample, ]
model_1 <- lm(do_am_percent ~., data = training_dataset)
predictions_1 <- predict(model_1, testing_dataset)
data.frame( R2 = caret::R2(predictions_1 , testing_dataset $ do_am_percent),
           RMSE = RMSE(predictions_1, testing_dataset $ do_am_percent),
           MAE = MAE(predictions_1, testing_dataset $ do_am_percent))
##           R2      RMSE       MAE
## 1 0.01774499 0.9279801 0.7346434

Ưu điểm:

  • Một trong những kỹ thuật cơ bản và đơn giản nhất để đánh giá một mô hình.
  • Không có bước phức tạp để thực hiện.

Nhược điểm:

  • Các dự đoán được thực hiện bởi mô hình phụ thuộc nhiều vào tập hợp con các quan sát được sử dụng để đào tạo và xác nhận.
  • Chỉ sử dụng một tập hợp con của dữ liệu cho mục đích đào tạo có thể làm cho mô hình bị sai lệch.

2.2 Leave One Out Cross-Validation(LOOCV)

Phương pháp này cũng chia tập dữ liệu thành 2 phần nhưng nó khắc phục được nhược điểm của phương pháp xác thực tập hợp. LOOCV thực hiện xác thực chéo theo cách sau:

  1. Đào tạo mô hình trên N-1 điểm dữ liệu
  2. Kiểm tra mô hình dựa trên một điểm dữ liệu còn lại ở bước trước
  3. Tính toán lỗi dự đoán
  4. Lặp lại 3 bước trên cho đến khi mô hình không được đào tạo và kiểm tra trên tất cả các điểm dữ liệu
  5. Tạo ra lỗi dự đoán tổng thể bằng cách lấy trung bình của các lỗi dự đoán trong mọi trường hợp
train_control_2 <- trainControl(method = "LOOCV")
model_2 <- train(do_am_percent ~., data = raw_moi_3,
               method = "lm",
               trControl = train_control_2)
print(model_2)
## Linear Regression 
## 
## 1035 samples
##  228 predictor
## 
## No pre-processing
## Resampling: Leave-One-Out Cross-Validation 
## Summary of sample sizes: 1034, 1034, 1034, 1034, 1034, 1034, ... 
## Resampling results:
## 
##   RMSE       Rsquared   MAE      
##   0.8079033  0.0772633  0.6411741
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Ưu điểm:

  • Mô hình ít sai lệch hơn vì hầu hết mọi điểm dữ liệu đều được sử dụng để đào tạo.
  • Không có sự ngẫu nhiên trong giá trị của số liệu hiệu suất vì LOOCV chạy nhiều lần trên tập dữ liệu.

Nhược điểm:

  • Việc huấn luyện mô hình N lần dẫn đến thời gian tính toán tốn kém nếu tập dữ liệu lớn.

2.3 K-fold Cross-Validation

Kỹ thuật xác nhận chéo này chia dữ liệu thành K tập con (các nếp gấp) có kích thước gần như bằng nhau. Trong số K nếp gấp này, một tập hợp con được sử dụng làm tập xác nhận, và những tập còn lại sẽ tham gia vào việc huấn luyện mô hình. Sau đây là quy trình làm việc đầy đủ của phương pháp này:

  1. Chia tập dữ liệu thành K tập hợp con một cách ngẫu nhiên
  2. Sử dụng tập con K-1 để đào tạo mô hình
  3. Kiểm tra mô hình dựa trên một tập hợp con còn lại ở bước trước
  4. Lặp lại các bước trên cho K lần, tức là, cho đến khi mô hình không được đào tạo và kiểm tra trên tất cả các tập con
  5. Tạo ra lỗi dự đoán tổng thể bằng cách lấy trung bình của các lỗi dự đoán trong mọi trường hợp
set.seed(125)
train_control_3 <- trainControl(method = "cv",
                              number = 10)

model_3 <- train(do_am_percent ~., data = raw_moi_3,
               method = "lm",
               trControl = train_control_3)
print(model_3)
## Linear Regression 
## 
## 1035 samples
##  228 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 931, 931, 930, 931, 933, 932, ... 
## Resampling results:
## 
##   RMSE       Rsquared    MAE      
##   0.8247941  0.08421977  0.6533602
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Ưu điểm:

  • Tốc độ tính toán nhanh.
  • Một phương pháp rất hiệu quả để ước tính sai số dự đoán và độ chính xác của một mô hình.

Nhược điểm:

  • Giá trị K thấp hơn dẫn đến mô hình sai lệch và giá trị K cao hơn có thể dẫn đến sự thay đổi trong các chỉ số hiệu suất của mô hình. Do đó, điều rất quan trọng là sử dụng giá trị chính xác của K cho mô hình (nói chung là K = 5 và K = 10 là giá trị thường dùng)

2.4 Repeated K-fold cross-validation

Trong phương pháp này, thuật toán xác nhận chéo K-lần được lặp lại một số lần nhất định

set.seed(125)
train_control_4 <- trainControl(method = "repeatedcv",
                              number = 10, repeats = 3)

model_4 <- train(do_am_percent ~., data = raw_moi_3,
               method = "lm",
               trControl = train_control_4)
print(model_4)
## Linear Regression 
## 
## 1035 samples
##  228 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold, repeated 3 times) 
## Summary of sample sizes: 931, 931, 930, 931, 933, 932, ... 
## Resampling results:
## 
##   RMSE      Rsquared    MAE      
##   0.828916  0.08127095  0.6518738
## 
## Tuning parameter 'intercept' was held constant at a value of TRUE

Ưu điểm: Trong mỗi lần lặp lại, mẫu dữ liệu được xáo trộn, điều này dẫn đến việc phát triển các phần dữ liệu mẫu khác nhau

Nhược điểm: Với mỗi lần lặp lại, thuật toán phải đào tạo mô hình từ đầu, có nghĩa là thời gian tính toán để đánh giá mô hình tăng lên theo số lần lặp lại