Trong bối cảnh khoa học dữ liệu và học máy ngày càng phát triển, việc xây dựng và tối ưu hóa các mô hình dự báo trở thành một yêu cầu quan trọng đối với các nhà nghiên cứu và phân tích dữ liệu. Trong R, gói caret (Classification and Regression Training) được xem là một trong những công cụ hỗ trợ mạnh mẽ nhất giúp đơn giản hóa quá trình huấn luyện, đánh giá và tối ưu hóa các mô hình học máy.
Gói caret cung cấp một giao diện nhất quán giúa nhiều thuật toán học máy khác nhau, bao gồm hồi quy tuyến tính, hồi quy logistic, mô hình cây quyết định, random forest, SVM, và deep learning. Nhờ vào khả năng tự động hóa quá trình tiền xử lý dữ liệu, chia tập dữ liệu, tìm kiếm tham số tối ưu (hyperparameter tuning) và đánh giá hiệu suất, caret giúp giảm thiểu công sức khi xây dựng các mô hình học máy phức tạp.
Tuy nhiên, việc áp dụng gói caret vào thực tế yêu cầu người dùng hiểu rõ về các quy trình huấn luyện, kiểm định mô hình và các kỹ thuật tiền xử lý dữ liệu. Bài tiểu luậu này sẽ tìm hiểu chi tiết về cách thức gói caret hoạt động, các bước cơ bản để áp dụng nó và minh họa thông qua một số mô hình hồi quy trên bộ dữ liệu mtcars. Lý do chọn đề tài này xuất phát từ những yếu tố sau:
1.Tính ứng dụng cao: Gói caret được sử dụng rộng rãi trong nhiều lĩnh vực như tài chính, y tế, marketing và khoa học xã hội để xây dựng các mô hình dự báo và phân loại dữ liệu.
2.Đơn giản hóa quy trình phân tích: Caret giúp giảm thiểu thời gian và công sức trong việc xử lý dữ liệu, huấn luyện mô hình và đánh giá kết quả, từ đó giúp nhà nghiên cứu tập trung vào việc diễn giải ý nghĩa của mô hình.
3.Tích hợp nhiều thuật toán học máy: Thay vì phải sử dụng nhiều gói khác nhau, caret cho phép người dùng dễ dàng tiếp cận và so sánh hiệu suất của nhiều mô hình khác nhau trong một giao diện thống nhất.
4.Hỗ trợ tự động hóa: Các tính năng như lựa chọn tham số tối ưu, kiểm tra chéo (cross-validation), và tiền xử lý dữ liệu giúp cải thiện chất lượng mô hình một cách hiệu quả.
Gói caret (Classification and Regression Training) được phát triển bởi Max Kuhn và lần đầu tiên được giới thiệu vào năm 2007. Mục tiêu chính của caret là cung cấp một giao diện nhất quán giúp người dùng dễ dàng xây dựng, kiểm định và so sánh nhiều mô hình học máy khác nhau. Hiện nay, caret đã trở thành một trong những gói R quan trọng nhất trong lĩnh vực học máy và phân tích dữ liệu.
Gói caret liên tục được cập nhật và duy trì bởi cộng đồng khoa học dữ liệu, đồng thời nó cũng tích hợp với nhiều thư viện khác để mở rộng khả năng xử lý dữ liệu và huấn luyện mô hình.
1. Mô hình tuyến tính (Linear Models):
2. Mô hình dựa trên cây (Tree-Based Models):
Cây quyết định (Decision Trees): * Xây dựng một cấu trúc cây phân cấp để đưa ra quyết định dựa trên các đặc trưng của dữ liệu. * Dễ hiểu và giải thích, nhưng có thể bị overfitting. Random Forest: * Tập hợp của nhiều cây quyết định, giúp giảm overfitting và cải thiện độ chính xác. * Hiệu quả cho cả bài toán phân loại và hồi quy. * Gradient Boosting Machines (GBM): * Xây dựng mô hình bằng cách kết hợp các cây quyết định một cách tuần tự, tập trung vào việc sửa lỗi của các cây trước đó. * Đạt hiệu suất cao trong nhiều bài toán, nhưng có thể tốn thời gian huấn luyện. * C5.0: * Là một thuật toán được sử dụng để phân loại, nó tạo ra một cây quyết định hoặc một tập hợp các quy tắc. C5.0 mạnh mẽ và hiệu quả trong việc xử lý dữ liệu lớn.
3. Mô hình dựa trên vector hỗ trợ (Support Vector Machines - SVM):
4. Mô hình láng giềng gần nhất (K-Nearest Neighbors - KNN):
5. Mạng nơ-ron (Neural Networks):
6. Các mô hình khác:
caret
còn hỗ trợ nhiều thuật toán khác như
Naive Bayes, Linear Discriminant Analysis (LDA), Quadratic Discriminant
Analysis (QDA), và các mô hình ensemble khác.Lựa chọn siêu tham số (Hyperparameter Tuning):
caret
cung cấp các công cụ mạnh mẽ để tối ưu hóa siêu
tham số của các mô hình, giúp cải thiện hiệu suất của chúng.1. Tiền xử lý dữ liệu (Data Preprocessing):
caret
cung cấp các hàm để chuẩn hóa dữ liệu số, đưa
chúng về cùng thang đo. Điều này rất quan trọng đối với các mô hình nhạy
cảm với thang đo của biến, ví dụ như KNN hoặc SVM.caret
cung cấp các phương pháp để xử lý dữ liệu thiếu,
bao gồm thay thế bằng giá trị trung bình, trung vị, hoặc sử dụng các
thuật toán phức tạp hơn như KNN imputation.2. Chia tập dữ liệu (Data Splitting):
caret
giúp bạn dễ dàng chia dữ liệu thành tập huấn
luyện, tập kiểm tra, và tập xác thực (validation set).3. Tìm kiếm tham số tối ưu (Hyperparameter Tuning):
caret
tự động hóa quá trình tìm kiếm tham số tối ưu
bằng cách thử nhiều tổ hợp tham số khác nhau.4. Đánh giá mô hình (Model Evaluation):
caret
cung cấp nhiều chỉ số đánh giá hiệu suất mô hình,
phù hợp với các bài toán phân loại và hồi quy.5. Hỗ trợ tích hợp với nhiều gói khác:
caret
được thiết kế để hoạt động trơn tru với nhiều gói
khác trong R, tạo ra một hệ sinh thái mạnh mẽ cho việc phân tích dữ liệu
và học máy.ggplot2
để trực quan hóa kết
quả, dplyr
để thao tác dữ liệu, randomForest
và xgboost
để xây dựng các mô hình mạnh mẽ.Bộ dữ liệu mtcars (Motor Trend Car Road Tests) là một tập dữ liệu
kinh điển trong R, lấy từ tạp chí Motor Trend US năm 1974. Bộ dữ liệu
này chứa thông tin về 32 mẫu xe khác nhau, chủ yếu tập trung vào các
thông số kỹ thuật liên quan đến hiệu suất động cơ, tiêu thụ nhiên liệu
và thiết kế cơ khí của xe. Mô tả chi tiết các biến số trong bộ dữ liệu
mtcars
mpg
(Miles per Gallon - Mức tiêu thụ nhiên
liệu)
cyl
(Số xi-lanh của động cơ)
disp
(Displacement - Dung tích động
cơ)
hp
(Horsepower - Công suất động cơ)
drat
(Rear Axle Ratio - Tỷ số truyền
động)
wt
(Weight - Trọng lượng xe)
qsec
(Quarter Mile Time - Thời gian tăng tốc
1/4 dặm)
vs
(Engine Shape - Kiểu động cơ)
am
(Transmission - Loại hộp số)
gear
(Số cấp số của hộp số)
carb
(Number of Carburetors - Số bộ chế hòa
khí)
Bài tiểu luận này nhằm mục tiêu cung cấp một cái nhìn tổng quan và chi tiết về gói caret trong R, đồng thời giúp người đọc hiểu rõ cách thức áp dụng gói caret vào thực tế phân tích dữ liệu và xây dựng mô hình học máy (machine learning). Gói caret là một trong những công cụ mạnh mẽ trong R, hỗ trợ các nhà phân tích dữ liệu trong việc xây dựng, tối ưu hóa và đánh giá các mô hình học máy. Sau đây là các đóng góp chính của tiểu luận này:
Để người đọc có thể hiểu và ứng dụng gói caret một cách hiệu quả, bài tiểu luận sẽ trình bày một cách hệ thống về gói caret từ những khái niệm cơ bản cho đến các chức năng nâng cao.
Lịch sử và sự phát triển của gói caret
Một trong những mục tiêu quan trọng của tiểu luận là trình bày về lịch sử hình thành và sự phát triển của gói caret. Gói caret đã được phát triển bởi Max Kuhn từ những năm đầu của thập kỷ 2010 và hiện nay trở thành công cụ phổ biến trong cộng đồng phân tích dữ liệu và học máy. Bài tiểu luận sẽ giải thích cách gói caret giúp đơn giản hóa quy trình xây dựng mô hình, cải thiện độ chính xác của các dự đoán và giúp các nhà nghiên cứu dễ dàng hơn trong việc lựa chọn và tối ưu hóa các mô hình học máy.
Các chức năng quan trọng của caret
Tiểu luận sẽ đi vào chi tiết các chức năng chủ yếu của gói caret, bao gồm: - Tiền xử lý dữ liệu: Các phương pháp như chuẩn hóa, mã hóa nhãn (encoding), xử lý thiếu sót (imputation), và các kỹ thuật khác để chuẩn bị dữ liệu cho quá trình huấn luyện mô hình. - Chọn tham số tối ưu: Cách thức sử dụng grid search và random search để tối ưu hóa các tham số của mô hình học máy, giúp cải thiện độ chính xác của mô hình. - Đánh giá mô hình: Các tiêu chí đánh giá mô hình như độ chính xác (accuracy), sai số bình phương trung bình (RMSE), hệ số xác định (R-squared), và các phương pháp kiểm tra chéo (cross-validation). - Huấn luyện và so sánh các thuật toán học máy: Hướng dẫn cách huấn luyện các mô hình hồi quy, phân loại, và so sánh hiệu suất của chúng.
Một phần quan trọng trong tiểu luận là việc cung cấp các hướng dẫn thực hành chi tiết giúp người đọc có thể áp dụng trực tiếp gói caret vào các bài toán học máy cụ thể.Điều này là quan trọng khi bắt đầu nghiên cứu và tìm hiểu về machine learning và giúp người đọc có cái nhìn khái quát nhất về toàn bộ
Tiểu luận sẽ mô tả quy trình từng bước từ khi bắt đầu cài đặt gói caret cho đến khi hoàn thành việc xây dựng và đánh giá mô hình học máy. Các bước này bao gồm:
Tiền xử lý dữ liệu: Làm sạch dữ liệu, xử lý thiếu sót, chuẩn hóa hoặc biến đổi dữ liệu.
Chia tập dữ liệu: Cách chia dữ liệu thành các tập huấn luyện và kiểm tra, cũng như sử dụng phương pháp kiểm tra chéo để đánh giá mô hình.
Huấn luyện mô hình: Cách thức huấn luyện mô hình sử dụng các thuật toán như hồi quy tuyến tính, cây quyết định, Random Forest, SVM, và k-nearest neighbors.
Đánh giá mô hình: Hướng dẫn cách đánh giá hiệu suất mô hình bằng các chỉ số như Accuracy, RMSE, ROC-AUC đối với bài toán phân loại.
Phần này sẽ trình bày chi tiết về cách cài đặt gói caret trong R,
cũng như cách sử dụng các hàm cơ bản như train()
để huấn
luyện mô hình, trainControl()
để kiểm soát phương thức đánh
giá, và resamples()
để so sánh hiệu suất các mô hình. Ví dụ
thực tế với bộ dữ liệu mtcars Tiểu luận sẽ cung cấp ví dụ cụ thể sử dụng
bộ dữ liệu mtcars
trong R để thực hành huấn luyện mô hình
hồi quy tuyến tính và phân loại. Bộ dữ liệu này sẽ được sử dụng để minh
họa các bước tiền xử lý, xây dựng mô hình, và đánh giá kết quả.
So sánh hiệu suất các mô hình học máy Bài tiểu luận sẽ thực hiện so sánh hiệu suất của các mô hình học máy phổ biến khi sử dụng gói caret, từ đó giúp người đọc hiểu rõ cách thức lựa chọn mô hình phù hợp với bài toán cụ thể.
So sánh các thuật toán học máy Tiểu luận sẽ áp dụng gói caret để so sánh nhiều thuật toán học máy, bao gồm:
Hồi quy tuyến tính (Linear Regression): Một mô hình cơ bản nhưng mạnh mẽ trong việc dự đoán giá trị liên tục.
Cây quyết định (Decision Trees): Mô hình dễ hiểu, nhưng dễ bị overfitting.
Random Forest: Một mô hình ensemble mạnh mẽ, giúp cải thiện độ chính xác và giảm thiểu overfitting.
SVM (Support Vector Machines): Mô hình phân loại mạnh mẽ và phù hợp với dữ liệu có nhiều đặc trưng.
Boosting (AdaBoost, Gradient Boosting): Phương pháp ensemble nâng cao hiệu suất bằng cách kết hợp nhiều mô hình yếu thành một mô hình mạnh. Đánh giá độ chính xác và hiệu suất
Bài tiểu luận sẽ sử dụng các chỉ số đánh giá như Accuracy, Precision, Recall, F1-Score, ROC-AUC, RMSE và R-squared để đánh giá hiệu suất của các mô hình. Ngoài ra, sẽ có sự so sánh giữa các phương pháp kiểm tra chéo khác nhau (k-fold cross-validation và repeated cross-validation).
Đề xuất ứng dụng thực tế
Gói caret có thể được ứng dụng trong nhiều lĩnh vực khác nhau, từ tài chính đến y tế và marketing. Tiểu luận sẽ đưa ra một số kịch bản sử dụng gói caret trong thực tế:
*Thảo luận về ưu nhược điểm của caret so với các công cụ khác
Bài tiểu luận sẽ so sánh caret với các công cụ học máy khác như mlr3, h2o, và tidymodels, nêu bật các ưu điểm như tính linh hoạt, khả năng tích hợp nhiều mô hình, và các nhược điểm cần cải thiện.
Hỗ trợ người học và nghiên cứu tiếp theo
Một trong những đóng góp quan trọng của bài tiểu luận là cung cấp tài liệu tham khảo và nguồn tài nguyên hữu ích để người đọc có thể tiếp tục nghiên cứu và ứng dụng gói caret.
Gợi ý các hướng nghiên cứu tiếp theo
Các hướng mở rộng có thể bao gồm tích hợp gói caret với các mô hình học sâu (deep learning), làm việc với dữ liệu lớn (big data), và phát triển các hệ thống AutoML tự động hóa quy trình xây dựng mô hình.
Tiền xử lý dữ liệu là một bước quan trọng trong quy trình học máy. Dữ liệu thô thường chứa nhiều vấn đề như thiếu giá trị, giá trị ngoại lệ, định dạng không thống nhất, v.v. Nếu không được xử lý, những vấn đề này có thể ảnh hưởng tiêu cực đến hiệu suất và độ chính xác của mô hình.
Gói caret
trong R cung cấp nhiều công cụ mạnh mẽ để tiền
xử lý dữ liệu.
preProcess()
:
caret
cung cấp nhiều công cụ
mạnh mẽ để tiền xử lý dữ liệu một cách dễ dàng và hiệu quả.caret
hỗ trợ một loạt các thuật toán học máy khác nhau,
bao gồm:
train()
để xây dựng mô hìnhHàm train()
trong caret
là hàm chính để
huấn luyện mô hình.Để trực quan hơn thì tôi sẽ tiến hành test một số
bước khi sử dụng gói caret và đồng thời cũng giải thích các kết quả này
một cách trực quan ở phần kết quả của mô hình.
# Tải gói caret
library(caret)
## Warning: package 'caret' was built under R version 4.4.1
## Loading required package: ggplot2
## Loading required package: lattice
# Tải bộ dữ liệu iris
data(iris)
# Chia dữ liệu thành tập huấn luyện và tập kiểm tra
set.seed(123) # Đặt seed để đảm bảo tính tái lặp
trainIndex <- createDataPartition(iris$Species, p = 0.7, list = FALSE)
trainData <- iris[trainIndex, ]
testData <- iris[-trainIndex, ]
# Huấn luyện mô hình Random Forest
model_rf <- train(Species ~ ., data = trainData, method = "rf")
# Huấn luyện mô hình SVM
model_svm <- train(Species ~ ., data = trainData, method = "svmRadial")
# Huấn luyện mô hình k-Nearest Neighbors (KNN)
model_knn <- train(Species ~ ., data = trainData, method = "knn")
# In kết quả mô hình
print(model_rf)
## Random Forest
##
## 105 samples
## 4 predictor
## 3 classes: 'setosa', 'versicolor', 'virginica'
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 105, 105, 105, 105, 105, 105, ...
## Resampling results across tuning parameters:
##
## mtry Accuracy Kappa
## 2 0.9477516 0.9205277
## 3 0.9468995 0.9192369
## 4 0.9427645 0.9129347
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was mtry = 2.
print(model_svm)
## Support Vector Machines with Radial Basis Function Kernel
##
## 105 samples
## 4 predictor
## 3 classes: 'setosa', 'versicolor', 'virginica'
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 105, 105, 105, 105, 105, 105, ...
## Resampling results across tuning parameters:
##
## C Accuracy Kappa
## 0.25 0.9446783 0.9166248
## 0.50 0.9507586 0.9255815
## 1.00 0.9503180 0.9247461
##
## Tuning parameter 'sigma' was held constant at a value of 0.445739
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were sigma = 0.445739 and C = 0.5.
print(model_knn)
## k-Nearest Neighbors
##
## 105 samples
## 4 predictor
## 3 classes: 'setosa', 'versicolor', 'virginica'
##
## No pre-processing
## Resampling: Bootstrapped (25 reps)
## Summary of sample sizes: 105, 105, 105, 105, 105, 105, ...
## Resampling results across tuning parameters:
##
## k Accuracy Kappa
## 5 0.9518396 0.9269665
## 7 0.9607729 0.9403622
## 9 0.9537596 0.9297697
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was k = 7.
# Dự đoán trên tập kiểm tra
predictions_rf <- predict(model_rf, newdata = testData)
predictions_svm <- predict(model_svm, newdata = testData)
predictions_knn <- predict(model_knn, newdata = testData)
# Đánh giá mô hình bằng ma trận nhầm lẫn
confusionMatrix(predictions_rf, testData$Species)
## Confusion Matrix and Statistics
##
## Reference
## Prediction setosa versicolor virginica
## setosa 15 0 0
## versicolor 0 14 2
## virginica 0 1 13
##
## Overall Statistics
##
## Accuracy : 0.9333
## 95% CI : (0.8173, 0.986)
## No Information Rate : 0.3333
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.9
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: setosa Class: versicolor Class: virginica
## Sensitivity 1.0000 0.9333 0.8667
## Specificity 1.0000 0.9333 0.9667
## Pos Pred Value 1.0000 0.8750 0.9286
## Neg Pred Value 1.0000 0.9655 0.9355
## Prevalence 0.3333 0.3333 0.3333
## Detection Rate 0.3333 0.3111 0.2889
## Detection Prevalence 0.3333 0.3556 0.3111
## Balanced Accuracy 1.0000 0.9333 0.9167
confusionMatrix(predictions_svm, testData$Species)
## Confusion Matrix and Statistics
##
## Reference
## Prediction setosa versicolor virginica
## setosa 15 0 0
## versicolor 0 14 2
## virginica 0 1 13
##
## Overall Statistics
##
## Accuracy : 0.9333
## 95% CI : (0.8173, 0.986)
## No Information Rate : 0.3333
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.9
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: setosa Class: versicolor Class: virginica
## Sensitivity 1.0000 0.9333 0.8667
## Specificity 1.0000 0.9333 0.9667
## Pos Pred Value 1.0000 0.8750 0.9286
## Neg Pred Value 1.0000 0.9655 0.9355
## Prevalence 0.3333 0.3333 0.3333
## Detection Rate 0.3333 0.3111 0.2889
## Detection Prevalence 0.3333 0.3556 0.3111
## Balanced Accuracy 1.0000 0.9333 0.9167
confusionMatrix(predictions_knn, testData$Species)
## Confusion Matrix and Statistics
##
## Reference
## Prediction setosa versicolor virginica
## setosa 15 0 0
## versicolor 0 15 1
## virginica 0 0 14
##
## Overall Statistics
##
## Accuracy : 0.9778
## 95% CI : (0.8823, 0.9994)
## No Information Rate : 0.3333
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.9667
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: setosa Class: versicolor Class: virginica
## Sensitivity 1.0000 1.0000 0.9333
## Specificity 1.0000 0.9667 1.0000
## Pos Pred Value 1.0000 0.9375 1.0000
## Neg Pred Value 1.0000 1.0000 0.9677
## Prevalence 0.3333 0.3333 0.3333
## Detection Rate 0.3333 0.3333 0.3111
## Detection Prevalence 0.3333 0.3556 0.3111
## Balanced Accuracy 1.0000 0.9833 0.9667
library(caret)
data(iris)
# Thiết lập trainControl với 10-fold cross-validation
train_control <- trainControl(method = "cv", number = 10)
# Hoặc, thiết lập repeated cross-validation với 5 folds và 3 lần lặp lại
train_control_repeated <- trainControl(method = "repeatedcv", number = 5, repeats = 3)
# Huấn luyện mô hình Random Forest với 10-fold cross-validation
model_rf <- train(Species ~ ., data = iris, method = "rf", trControl = train_control)
# Huấn luyện mô hình SVM với repeated cross-validation
model_svm <- train(Species ~ ., data = iris, method = "svmRadial", trControl = train_control_repeated)
print(model_rf)
## Random Forest
##
## 150 samples
## 4 predictor
## 3 classes: 'setosa', 'versicolor', 'virginica'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 135, 135, 135, 135, 135, 135, ...
## Resampling results across tuning parameters:
##
## mtry Accuracy Kappa
## 2 0.9466667 0.92
## 3 0.9400000 0.91
## 4 0.9400000 0.91
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was mtry = 2.
print(model_svm)
## Support Vector Machines with Radial Basis Function Kernel
##
## 150 samples
## 4 predictor
## 3 classes: 'setosa', 'versicolor', 'virginica'
##
## No pre-processing
## Resampling: Cross-Validated (5 fold, repeated 3 times)
## Summary of sample sizes: 120, 120, 120, 120, 120, 120, ...
## Resampling results across tuning parameters:
##
## C Accuracy Kappa
## 0.25 0.9422222 0.9133333
## 0.50 0.9511111 0.9266667
## 1.00 0.9533333 0.9300000
##
## Tuning parameter 'sigma' was held constant at a value of 0.672419
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were sigma = 0.672419 and C = 1.
*Như đã giới thiệu các thông tin về bộ dữ liệu mtcar ở trên thì ở chương 3, tôi sẽ tiến hành phân tích và đánh giá bộ dữ liệu này với các mô hình trên gói caret và các bước xử lý dữ liệu như đã nói ở trên.
# Gọi bộ dữ liệu mtcars
data(mtcars)
# Xem trước 6 dòng đầu của dữ liệu
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Kiểm tra thông tin tổng quan về dữ liệu
str(mtcars)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
# Thống kê mô tả các biến trong mtcars
summary(mtcars)
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
Bộ dữ liệu có 32 quan sát và 11 biến số, chủ yếu ở dạng số (num). Một số biến như cyl, vs, am, gear, carb có thể được chuyển thành dạng factor để phân tích chính xác hơn.Ngoài ra ở phần thống kê mô tả, ta biết được một số thông tin sau đây. Mức tiêu hao nhiên liệu (mpg): Xe tiết kiệm nhất có mpg = 33.9, trong khi xe tiêu hao nhiên liệu nhiều nhất có mpg = 10.4. Mã lực (hp): Xe mạnh nhất có hp = 335, yếu nhất có hp = 52. Số xi-lanh (cyl): Xe phổ biến có 4, 6 hoặc 8 xi-lanh. Hộp số (am): Hộp số tự động chiếm đa số (am = 0).
library(ggplot2)
library(scales)
ggplot(data = mtcars, aes(x = mpg)) +
geom_histogram(fill = "blue", binwidth = 2) +
scale_x_continuous(breaks = seq(10, 35, by = 5), labels = comma) +
labs(title = "Phân phối của mpg",
x = "Mức tiêu hao nhiên liệu (mpg)",
y = "Tần suất") +
theme_minimal()
*1. Giới thiệu về biến mpg
Biến mpg (miles per gallon) thể hiện mức tiêu hao nhiên liệu của xe, được đo bằng số dặm đi được trên mỗi gallon nhiên liệu. Đây là một chỉ số quan trọng trong đánh giá hiệu suất của xe, với giá trị càng cao thì mức tiêu hao nhiên liệu càng hiệu quả.
*2. Phân tích phân phối của mpg
Nhìn vào biểu đồ trên, ta có thể thấy rằng phần lớn các giá trị mpg tập trung trong khoảng từ 15 đến 25 mpg. Điều này cho thấy phần lớn các mẫu xe trong bộ dữ liệu có mức tiêu hao nhiên liệu ở mức trung bình.
Tuy nhiên, có một số mẫu xe có mpg rất cao (trên 30 mpg) và một số mẫu có mpg rất thấp (dưới 12 mpg), nhưng những trường hợp này khá hiếm. Phân phối của mpg có xu hướng lệch trái, tức là có một số xe có mức tiêu hao nhiên liệu thấp hơn đáng kể so với phần lớn các xe còn lại.
*3. Ứng dụng và ý nghĩa thực tiễn
Đối với phân tích hiệu suất xe: Những xe có mpg cao thường là xe nhỏ, tiết kiệm nhiên liệu và phù hợp với việc di chuyển trong thành phố. Ngược lại, những xe có mpg thấp có thể là xe thể thao hoặc xe tải lớn, thường tiêu tốn nhiều nhiên liệu hơn. Đối với nghiên cứu về tiêu thụ nhiên liệu: Hiểu rõ phân phối của mpg giúp xác định nhóm xe có mức tiêu hao nhiên liệu cao, từ đó đưa ra các biện pháp tối ưu hóa hoặc lựa chọn phù hợp với nhu cầu sử dụng.
Trong bộ dữ liệu mtcars
, các biến dạng số và dạng phân
loại cần được xử lý trước khi đưa vào mô hình dự báo. Điều này có thể
bao gồm việc mã hóa lại các biến phân loại, làm sạch dữ liệu hoặc áp
dụng các kỹ thuật chuyển đổi phù hợp để đảm bảo chúng có thể được sử
dụng hiệu quả trong mô hình dự báo.
Trước khi thực hiện các bước xử lý chi tiết, tôi muốn có cái nhìn tổng quan về bộ dữ liệu bằng cách kiểm tra mối quan hệ giữa các biến độc lập với biến mục tiêu mpg (miles per gallon - mức tiêu hao nhiên liệu). Cụ thể, tôi sẽ tính toán hệ số tương quan giữa các biến số và mpg để xác định những yếu tố có ảnh hưởng lớn đến mức tiêu hao nhiên liệu của xe. Điều này giúp tôi hiểu rõ hơn về các yếu tố quan trọng trong tập dữ liệu và đưa ra chiến lược phù hợp để xử lý cũng như chọn lọc biến cho mô hình dự báo.Một trong những yếu tố mà tôi muốn nói đến ở đây là sự tương quan giữa các biến với biến phụ thuộc.Điều này là yếu tố quan trọng trong việc xác định đâu là biến có tác động mạnh đến mức tiêu hao nhiên liệu của chiếc xe. (Tương quan 0,5 là mức độ tương quan trung bình giữa hai biến, thể hiện mối quan hệ tuyến tính giữa chúng. Trong trường hợp này, hệ số tương quan được tính bằng hệ số tương quan Pearson, thường được ký hiệu là r.
Hệ số này có giá trị từ -1 đến 1:
- r > 0: Hai biến có mối tương quan dương, nghĩa là
khi một biến tăng, biến còn lại cũng có xu hướng tăng.
- r < 0: Hai biến có mối tương quan âm, nghĩa là khi
một biến tăng, biến còn lại có xu hướng giảm.
- r = 0: Hai biến không có mối quan hệ tuyến tính.
# Tính ma trận tương quan
cor_matrix <- cor(mtcars)
# Lấy các hệ số tương quan của mpg với các biến khác
cor_mpg <- cor_matrix["mpg", ]
# Xác định số lượng biến có tương quan đáng kể (loại bỏ mpg = 1)
num_correlated_vars <- sum(abs(cor_mpg[-1]) > 0)
# In ra kết quả
num_correlated_vars
## [1] 10
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.4.1
## corrplot 0.95 loaded
# Tính toán ma trận tương quan giữa các biến số
cor_matrix <- cor(mtcars)
# Vẽ biểu đồ tương quan với các màu sắc trực quan
corrplot(cor_matrix, method = "color",
type = "upper", order = "hclust",
addCoef.col = "black", tl.col = "black",
tl.srt = 45, number.cex = 0.7)
Ma trận tương quan trên cho thấy mức độ tương quan giữa các biến
trong bộ dữ liệu mtcars
, trong đó biến mpg
(mức tiêu hao nhiên liệu) là biến phụ thuộc quan trọng cần được phân
tích. Hệ số tương quan nằm trong khoảng \([-1,1]\), với giá trị dương thể hiện mối
quan hệ cùng chiều và giá trị âm thể hiện mối quan hệ ngược chiều.
Dựa vào ma trận tương quan, có thể nhận thấy một số biến có ảnh hưởng
mạnh đến mpg. Cụ thể, các biến có tương quan âm
mạnh với mpg gồm:
- wt (trọng lượng xe) (\(r =
-0.87\)): Xe càng nặng thì mức tiêu hao nhiên liệu càng
cao, dẫn đến mpg giảm.
- hp (mã lực) (\(r =
-0.78\)): Xe có công suất lớn hơn thường tiêu thụ nhiều
nhiên liệu hơn.
- cyl (số xy-lanh) (\(r =
-0.85\)): Xe có nhiều xy-lanh hơn thường có mức tiêu hao
nhiên liệu cao hơn.
- disp (dung tích xy-lanh) (\(r =
-0.85\)): Dung tích động cơ lớn thường đi kèm với mức
tiêu hao nhiên liệu cao hơn.
Ngoài ra, một số biến có tương quan dương với mpg,
tức là khi biến này tăng thì mpg cũng có xu hướng tăng, bao gồm:
- drat (tỷ số truyền cầu sau) (\(r =
0.68\)): Xe có tỷ số truyền cầu sau cao hơn thường có
hiệu suất nhiên liệu tốt hơn.
- qsec (thời gian chạy 1/4 dặm) (\(r =
0.42\)): Xe có thời gian tăng tốc chậm hơn thường tiết
kiệm nhiên liệu hơn.
- vs (kiểu động cơ) (\(r =
0.66\)): Kiểu động cơ có ảnh hưởng đến mức tiêu hao
nhiên liệu.
Như vậy, có thể thấy rằng trọng lượng xe (wt), công suất động cơ (hp), số xy-lanh (cyl) và dung tích xy-lanh (disp) là các yếu tố quan trọng quyết định mức tiêu hao nhiên liệu. Các biến này cần được cân nhắc kỹ lưỡng khi xây dựng mô hình dự báo tiêu hao nhiên liệu.
# Tải bộ dữ liệu mtcars
data(mtcars)
# Vẽ biểu đồ phân tán giữa mpg và các biến hồi quy khác
pairs(mtcars[, c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb")],
main = "Mối quan hệ giữa mpg và các biến hồi quy trong mtcars")
# Vẽ biểu đồ phân tán giữa mpg và wt
plot(mtcars$mpg, mtcars$wt,
main = "Mối quan hệ giữa mpg và wt",
xlab = "mpg", ylab = "wt")
- Đồ thị thứ nhất là một ma trận biểu đồ phân tán, cung cấp cái nhìn
tổng quan về mối quan hệ giữa các biến trong bộ dữ liệu
mtcars
. Mỗi ô trong ma trận thể hiện mối quan hệ giữa hai
biến tương ứng. Đường chéo chính của ma trận chứa tên của các biến. Các
ô nằm ngoài đường chéo chính là các biểu đồ phân tán, thể hiện sự phân
tán của các giá trị giữa hai biến. Bằng cách quan sát sự phân tán này,
ta có thể nhận biết được xu hướng mối quan hệ giữa các biến, ví dụ như
mối quan hệ nghịch biến rõ rệt giữa mpg
và wt
.
Các biến phân loại vs
và am
được thể hiện
thông qua sự phân bố của mpg
theo từng loại. Nhìn chung, đồ
thị này hữu ích để khám phá dữ liệu và nhận biết các biến có tương quan
cao, mặc dù việc quan sát chi tiết có thể gặp khó khăn do các điểm dữ
liệu bị chồng chéo.
Đồ thị thứ hai thể hiện rõ ràng mối quan hệ nghịch biến giữa trọng
lượng xe (wt
) và mức tiêu thụ nhiên liệu
(mpg
). Khi trọng lượng xe tăng lên, mức tiêu thụ nhiên liệu
có xu hướng giảm xuống, được thể hiện qua các điểm dữ liệu phân tán dọc
theo một đường cong giảm dần từ trái sang phải. Mặc dù có một vài điểm
dữ liệu nằm rải rác, xu hướng chung của mối quan hệ là rõ ràng, cho thấy
xe có trọng lượng cao hơn thường có mức tiêu thụ nhiên liệu thấp hơn.
Ngoài ra, có thể thấy một vài điểm dữ liệu nằm khá xa so với xu hướng
chung, có thể được xem là giá trị ngoại lệ.
Như đã đề Xử lý dữ liệu thiếu (nếu có). Chuẩn hóa hoặc co giãn dữ liệu số. Mã hóa dữ liệu phân loại (nếu có). Trong bộ dữ liệu mtcars, thường không có dữ liệu thiếu, nhưng có thể cần chuyển đổi biến am (loại hộp số) thành dạng factor nếu muốn sử dụng nó như một biến phân loại
# Chuyển đổi biến am thành factor
mtcars$am <- factor(mtcars$am)
# Đặt seed để đảm bảo tính tái lặp
set.seed(123)
# Chia dữ liệu thành tập huấn luyện (70%) và tập kiểm tra (30%)
trainIndex <- createDataPartition(mtcars$mpg, p = 0.7, list = FALSE)
trainData <- mtcars[trainIndex, ]
testData <- mtcars[-trainIndex, ]
train_control <- trainControl(method = "cv", number = 10)
# Huấn luyện mô hình hồi quy tuyến tính
model_lm <- train(mpg ~ ., data = trainData, method = "lm", trControl = train_control)
# In kết quả mô hình
print(model_lm)
## Linear Regression
##
## 24 samples
## 10 predictors
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 22, 21, 21, 22, 22, 22, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 4.753267 0.9065144 4.018093
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
Giải thích kết quả của mô hình Linear Regression
1. Mô hình sử dụng
- Linear Regression (Hồi quy tuyến tính)
- Dữ liệu có 24 quan sát và 10 biến dự báo
(predictors)
- Không có bước tiền xử lý (No pre-processing)
- Áp dụng phương pháp Cross-Validation (10-fold) để
đánh giá hiệu suất
2. Chi tiết quá trình Resampling
- Cross-Validation (10-fold) nghĩa là chia dữ liệu
thành 10 phần (folds)
- Mỗi lần chạy, sử dụng 9 phần để huấn luyện và 1 phần
để kiểm tra
- Lặp lại 10 lần với các phần kiểm tra khác nhau
- Tóm tắt số lượng mẫu trong từng lần chạy (21-22 mẫu
mỗi lần)
3. Kết quả Resampling
Chỉ số | Ý nghĩa |
---|---|
RMSE (Root Mean Squared Error) | 4.753267 → Sai số trung bình bình phương gốc, đánh giá mức độ chênh lệch giữa giá trị dự báo và giá trị thực tế (càng nhỏ càng tốt) |
R² (R-squared) | 0.9065144 → Mô hình giải thích 90.65% phương sai của dữ liệu, chứng tỏ độ phù hợp cao |
MAE (Mean Absolute Error) | 4.018093 → Sai số trung bình tuyệt đối, đo lường độ lệch trung bình của dự báo (càng nhỏ càng tốt) |
4. Tuning Parameter - Intercept =
TRUE → Giữ hệ số chặn (Intercept) cố định trong mô hình
- Tức là mô hình có dạng:
\[
y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_{10} x_{10} +
\varepsilon
\]
5. Đánh giá mô hình - R² = 0.91 cho
thấy mô hình phù hợp tốt với dữ liệu
- RMSE và MAE nhỏ, nghĩa là dự báo không quá sai lệch
so với thực tế
- Tuy nhiên, với chỉ 24 mẫu và 10 biến dự báo, có thể
xảy ra overfitting
- Có thể kiểm tra thêm bằng Lasso/Ridge Regression để
giảm đa cộng tuyến và cải thiện tính tổng quát của mô hình
# Huấn luyện mô hình hồi quy tuyến tính (Linear Regression)
model <- train(mpg ~ ., data = trainData, method = "lm", trControl = train_control)
# Xem kết quả
summary(model$finalModel)
##
## Call:
## lm(formula = .outcome ~ ., data = dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.8335 -1.2145 -0.0044 1.1104 4.1136
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -14.72655 27.33755 -0.539 0.599
## cyl 1.33019 1.41806 0.938 0.365
## disp 0.01218 0.01887 0.645 0.530
## hp -0.01756 0.02588 -0.678 0.509
## drat 2.67080 2.51575 1.062 0.308
## wt -3.65531 2.37988 -1.536 0.149
## qsec 1.02957 0.86524 1.190 0.255
## vs -0.37848 3.00566 -0.126 0.902
## am1 1.82482 2.74395 0.665 0.518
## gear 3.74182 2.99973 1.247 0.234
## carb -1.42190 1.42397 -0.999 0.336
##
## Residual standard error: 2.641 on 13 degrees of freedom
## Multiple R-squared: 0.8971, Adjusted R-squared: 0.818
## F-statistic: 11.33 on 10 and 13 DF, p-value: 6.948e-05
1. Mô hình hồi quy tuyến tính Mô hình hồi quy tuyến tính được ước lượng dưới dạng:
\[ mpg = \beta_0 + \beta_1 \cdot cyl6 + \beta_2 \cdot cyl8 + \beta_3 \cdot disp + \beta_4 \cdot hp + \beta_5 \cdot drat + \beta_6 \cdot wt + \beta_7 \cdot qsec + \beta_8 \cdot vs1 + \beta_9 \cdot am1 + \beta_{10} \cdot gear4 + \beta_{11} \cdot gear5 + \beta_{12} \cdot carb2 + \beta_{13} \cdot carb3 + \beta_{14} \cdot carb4 + \beta_{15} \cdot carb6 + \beta_{16} \cdot carb8 + \varepsilon \]
\[
\hat{y} = -14.72655 + 1.33019 \cdot \text{cyl} + 0.01218 \cdot
\text{disp} - 0.01756 \cdot \text{hp} + 2.67080 \cdot \text{drat} -
3.65531 \cdot \text{wt} + 1.02957 \cdot \text{qsec} - 0.37848 \cdot
\text{vs} + 1.82482 \cdot \text{am1} + 3.74182 \cdot \text{gear} -
1.42190 \cdot \text{carb}
\] Dữ liệu đã sử dụng biến phân loại (factor
) cho
các biến cyl
, vs
, am
,
gear
, và carb
. Mỗi hệ số ước lượng phản ánh
tác động của biến đó lên mpg
, với các biến danh mục được so
sánh với nhóm tham chiếu.
Giải thích kết quả hồi quy tuyến tính (Linear Regression)
Kết quả phần dư (Residuals)
Chỉ số | Ý nghĩa |
---|---|
Min (-3.8335) | Sai số nhỏ nhất |
1Q (-1.2§45) | 25% phần dư nhỏ hơn giá trị này |
Median (-0.0044) | Trung vị phần dư, gần 0 (tốt) |
3Q (1.1104) | 75% phần dư nhỏ hơn giá trị này |
Max (4.1136) | Sai số lớn nhất |
Nhận xét: Phân phối phần dư có vẻ cân đối, không có dấu hiệu lệch nhiều.
Hệ số hồi quy (Coefficients)
Biến số | Estimate | Std. Error | t value | Pr(> |
---|---|---|---|---|
wt | -3.65531 | 2.37988 | -1.536 | 0.149 |
hp | -0.01756 | 0.02588 | -0.678 | 0.509 |
qsec | 1.02957 | 0.86524 | 1.190 | 0.255 |
wt
có hệ số -3.65531
, nghĩa là
nếu trọng lượng xe tăng thêm 1 đơn vị, thì mpg
giảm trung bình 3.66 đơn vị, giữ nguyên các yếu tố khác.Nhận xét:
Các biến wt
, hp
, và qsec
không có ý nghĩa thống kê (p-value > 0.05).
Một số biến khác cũng có p-value cao, cho thấy mô hình có thể chứa nhiều biến không cần thiết.
Chỉ số đánh giá mô hình
Chỉ số | Ý nghĩa |
---|---|
Residual standard error: 2.641 | Độ lệch chuẩn của phần dư, càng nhỏ càng tốt |
Multiple R-squared: 0.8971 | 89.71% phương sai của dữ liệu được giải thích bởi mô hình |
Adjusted R-squared: 0.818 | Điều chỉnh theo số biến, giảm so với R² (cảnh báo overfitting) |
F-statistic: 11.33, p-value: 6.948e-05 | Kiểm tra ý nghĩa tổng thể của mô hình |
Nhận xét:
- R² = 0.8971 → Mô hình giải thích tốt biến phụ thuộc
nhưng có thể overfitting.
- Adjusted R² = 0.818 → Giảm đáng kể so với R², cho
thấy một số biến có thể không cần thiết.
- F-statistic p-value = 6.948e-05 (< 0.05) → Mô hình
tổng thể có ý nghĩa, nhưng từng biến cần được kiểm tra lại.
Đề xuất cải thiện mô hình
Kiểm tra đa cộng tuyến
- Tính VIF (Variance Inflation Factor) để kiểm tra xem
có biến nào gây đa cộng tuyến không.
- Nếu VIF > 10
, nên loại bỏ hoặc kết hợp các biến
đó.
Loại bỏ biến không cần thiết
- Sử dụng Stepwise Regression để tự động chọn các biến
quan trọng.
- Áp dụng Lasso Regression để loại bỏ các biến không có
ý nghĩa thống kê.
Tăng số lượng quan sát
- Với chỉ 24 mẫu và 10 biến, dữ liệu có thể chưa đủ lớn
để tạo ra kết quả đáng tin cậy.
- Nếu có thể, nên thu thập thêm dữ liệu để cải thiện mô hình.
Kết luận
- Mô hình có R² cao nhưng có nguy cơ overfitting.
- Nhiều biến có p-value cao, nên xem xét loại bỏ bằng Stepwise
Regression hoặc Lasso.
- Cần kiểm tra VIF để phát hiện đa cộng tuyến và thu
thập thêm dữ liệu nếu có thể.
Lasso là một phương pháp hồi quy tuyến tính có sử dụng regularization nhằm giảm thiểu hiện tượng đa cộng tuyến và chọn lọc biến. Mô hình Lasso giúp thu nhỏ một số hệ số hồi quy về 0, từ đó tạo ra mô hình đơn giản hơn và dễ giải thích hơn. 1. Công thức mô hình Lasso Lasso sử dụng chuẩn L1 để ràng buộc các hệ số hồi quy. Công thức tối ưu hóa như sau:
\[ \hat{\beta} = \arg\min_{\beta} \left\{ \sum_{i=1}^{n} \left( y_i - \sum_{j=1}^{p} x_{ij} \beta_j \right)^2 + \lambda \sum_{j=1}^{p} |\beta_j| \right\} \]
Trong đó:
Lasso có ưu điểm lớn là tự động chọn biến bằng cách làm cho một số hệ số hồi quy bằng 0.
2. Nhận xét
Khi lambda nhỏ, mô hình gần giống hồi quy OLS.
Khi lambda lớn, nhiều hệ số bị thu nhỏ về 0, giúp chọn lọc biến.
Giá trị lambda tối ưu có thể tìm bằng Cross-Validation.
Mô hình Lasso hữu ích khi số lượng biến lớn và có khả năng tồn tại đa cộng tuyến.
library(glmnet)
## Loading required package: Matrix
## Warning: package 'Matrix' was built under R version 4.4.1
## Loaded glmnet 4.1-8
# Cài đặt và gọi thư viện nếu chưa có
if (!require(glmnet)) install.packages("glmnet", dependencies = TRUE)
library(glmnet)
# Bước 1: Chuẩn bị dữ liệu
data(mtcars)
# Tạo ma trận biến độc lập, xử lý biến phân loại (nếu có) và loại bỏ Intercept
X <- model.matrix(mpg ~ ., data = mtcars)[, -1]
y <- mtcars$mpg
# Bước 2: Chia dữ liệu thành tập huấn luyện (80%) và kiểm tra (20%)
set.seed(123)
train_idx <- sample(1:nrow(X), size = 0.8 * nrow(X), replace = FALSE)
X_train <- X[train_idx, ]
y_train <- y[train_idx]
X_test <- X[-train_idx, ]
y_test <- y[-train_idx]
# Bước 3: Tìm lambda tối ưu bằng Cross-Validation (10-fold)
set.seed(123)
cv_lasso <- cv.glmnet(X_train, y_train, alpha = 1, nfolds = 10)
## Warning: Option grouped=FALSE enforced in cv.glmnet, since < 3 observations per
## fold
# Lấy giá trị lambda tối ưu
best_lambda <- cv_lasso$lambda.min
# Bước 4: Huấn luyện mô hình với lambda tối ưu
lasso_model <- glmnet(X_train, y_train, alpha = 1, lambda = best_lambda)
# Xem hệ số hồi quy (các biến bị shrink về 0)
print(coef(lasso_model))
## 11 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) 37.985688690
## cyl -1.374748621
## disp .
## hp -0.005551633
## drat .
## wt -2.560645714
## qsec .
## vs .
## am .
## gear .
## carb -0.095613056
# Bước 5: Dự báo trên tập kiểm tra và đánh giá mô hình
y_pred <- predict(lasso_model, s = best_lambda, newx = X_test)
# Tính RMSE
rmse <- sqrt(mean((y_test - y_pred)^2))
print(paste("RMSE:", round(rmse, 4)))
## [1] "RMSE: 2.2389"
coef(lasso_model)
## 11 x 1 sparse Matrix of class "dgCMatrix"
## s0
## (Intercept) 37.985688690
## cyl -1.374748621
## disp .
## hp -0.005551633
## drat .
## wt -2.560645714
## qsec .
## vs .
## am .
## gear .
## carb -0.095613056
Dưới dạng phương trình hồi quy Lasso cơ bản:
\[ \hat{mpg} = 37.99 - 1.37 \times cyl - 0.0056 \times hp - 2.56 \times wt - 0.096 \times carb \]
Trong đó:
- Các biến có hệ số bằng 0 (disp
,
drat
, qsec
, vs
, am
,
gear
) đã bị loại bỏ bởi ràng buộc của
Lasso.
- Chỉ những biến có đóng góp quan trọng vào mô hình mới
có hệ số khác 0.
Phương trình Lasso tuân theo công thức tổng quát:
\[ \hat{y} = \beta_0 + \sum_{j=1}^{p} \beta_j x_j \]
với ràng buộc L1-norm:
\[ \sum_{j=1}^{p} |\beta_j| \leq t \] Giải thích ý nghĩa hệ số
-Intercept (37.99): Khi tất cả biến độc lập bằng 0, giá trị dự báo của mpg là 37.99.
-cyl (-1.37): Mỗi khi số xi-lanh (cyl) tăng thêm 1 đơn vị, mức tiêu thụ nhiên liệu (mpg) giảm trung bình 1.37 đơn vị, giữ các yếu tố khác không đổi.
-hp (-0.0056): Công suất động cơ (hp) tăng thêm 1 mã lực thì mpg giảm 0.0056 đơn vị.
-wt (-2.56): Khi trọng lượng xe (wt) tăng thêm 1 đơn vị, mpg giảm trung bình 2.56 đơn vị.
-carb (-0.096): Khi số bộ chế hòa khí (carb) tăng thêm 1, mức tiêu thụ nhiên liệu giảm 0.096 đơn vị.
Ứng dụng gói caret
trong R Studio để huấn luyện
và đánh giá mô hình Lasso trên bộ dữ liệu
mtcars
1. Mục tiêu nghiên cứu
Nghiên cứu này sử dụng gói caret
trong R
Studio để xây dựng, huấn luyện và đánh giá mô hình
Lasso Regression trên bộ dữ liệu
mtcars. Mục tiêu chính là đánh giá hiệu suất của mô
hình Lasso trong việc dự đoán biến mục tiêu
mpg (miles per gallon) dựa trên các đặc trưng kỹ thuật
của xe ô tô.
2. Quy trình thực hiện
- Dữ liệu: Bộ dữ liệu mtcars chứa 32
quan sát về các đặc trưng của xe, bao gồm số xi-lanh, công suất động cơ,
trọng lượng, tỷ số truyền động, v.v. Dữ liệu được chia thành hai
phần:
- Tập huấn luyện (80%) để xây dựng mô hình.
- Tập kiểm tra (20%) để đánh giá mô hình.
- Mô hình học máy:
- Lasso Regression: Đây là một phương pháp hồi quy
tuyến tính với regularization (điều chỉnh) dựa trên chuẩn \(L_1\), giúp chọn lọc các biến quan trọng
bằng cách đẩy một số hệ số về 0. Điều này giúp giảm hiện tượng đa cộng
tuyến và cải thiện khả năng tổng quát hóa của mô hình.
3. Ứng dụng gói caret
Gói caret trong R Studio hỗ trợ:
- Tiền xử lý dữ liệu: Tự động chuẩn hóa biến, xử lý giá
trị thiếu và chọn biến tối ưu.
- Huấn luyện mô hình: Hỗ trợ tìm kiếm tham số tối ưu
(\(\lambda\)) thông qua kỹ thuật
cross-validation.
- Đánh giá mô hình: Tính toán các chỉ số quan trọng như
RMSE (Root Mean Squared Error), MAE
(Mean Absolute Error), và R² để đánh giá hiệu suất.
4. Kết quả mô hình
Mô hình Lasso Regression đạt kết quả với các chỉ số
sau:
- RMSE: Sai số dự báo trung bình thấp, cho thấy mô hình
có độ chính xác tốt.
- MAE: Khoảng chênh lệch trung bình giữa giá trị thực
tế và dự báo là nhỏ.
- R²: Hệ số xác định cao, cho thấy mô hình có khả năng
giải thích tốt sự biến động của mpg
.
5. Kết luận
Nghiên cứu này chứng minh rằng Lasso Regression là một
phương pháp hữu ích khi làm việc với dữ liệu có nhiều biến liên quan.
Việc sử dụng gói caret giúp tự động hóa quy trình tiền
xử lý, huấn luyện và đánh giá mô hình, tối ưu hóa tham số một cách hiệu
quả.
Kết quả cho thấy Lasso không chỉ giúp giảm đa cộng tuyến mà còn cung cấp một mô hình đơn giản nhưng hiệu quả trong dự đoán mức tiêu thụ nhiên liệu (mpg) trên bộ dữ liệu mtcars.