Trong xây dựng mô hình Machine Learning, hiệu suất dự báo không chỉ phụ thuộc vào thuật toán mà còn phụ thuộc rất lớn vào chất lượng dữ liệu đầu vào. Hai khái niệm cốt lõi giúp tối ưu hóa dữ liệu là Kỹ thuật đặc trưng (Feature Engineering) và Lựa chọn đặc trưng (Feature Selection).
Kỹ thuật đặc trưng (Feature Engineering)
Feature Engineering là quá trình sử dụng tri thức chuyên môn để trích xuất các thuộc tính từ dữ liệu thô, giúp thuật toán học máy hoạt động hiệu quả hơn. Quá trình này bao gồm các bước xử lý dữ liệu để chúng trở nên tương thích với các yêu cầu của mô hình.
1. Xử lý dữ liệu khuyết thiếu (Imputation)
Việc xử lý giá trị NA là bắt buộc đối với nhiều thuật toán. Dưới đây là hai phương pháp phổ biến:
- Imputation bằng Random Forest: Phương pháp này hiệu quả cho cả biến phân loại và biến liên tục, có khả năng xử lý tốt các dữ liệu không tuyến tính.
# Sử dụng thư viện missForest
library(missForest)
data_cleaned <- missForest(raw_data_set)$ximp
- Imputation bằng KNN: Sử dụng khoảng cách Euclidean để tìm K lân cận gần nhất và tính giá trị trung bình để lấp đầy khoảng trống.
# Sử dụng hàm kNN từ thư viện VIM
library(VIM)
data_imputed_knn <- kNN(dataset, k = 5, variable = "Target_Column")
2. Chuẩn hóa đặc trưng (Feature Scaling)
Việc đưa các biến về cùng một thang đo giúp các thuật toán dựa trên khoảng cách (như KNN, SVM) hội tụ nhanh hơn:
- Min-Max Scaling: Đưa giá trị về khoảng [0, 1].
- Standardization (Z-score): Biến đổi dữ liệu sao cho trung bình bằng 0 và độ lệch chuẩn bằng 1.
Lựa chọn đặc trưng (Feature Selection)
Lựa chọn đặc trưng nhằm loại bỏ các biến gây nhiễu, giảm chiều dữ liệu và ngăn chặn tình trạng quá khớp (overfitting). Có ba nhóm phương pháp chính:
1. Phương pháp lọc (Filter Methods)
Đây là phương pháp độc lập với mô hình, dựa trên các đặc tính thống kê như ANOVA, hệ số tương quan Pearson hoặc Chi-Square. Một kỹ thuật quan trọng trong nhóm này là lọc các biến có phương sai gần bằng 0 (Near Zero Variance) – những biến hầu như không thay đổi giá trị trên toàn bộ quan sát.
library(caret)
# Loại bỏ các biến ít thông tin
nzv_cols <- nearZeroVar(data_input)
filtered_data <- data_input[, -nzv_cols]
2. Phương pháp bao (Wrapper Methods)
Phương pháp này đánh giá các tập hợp con của các biến bằng cách huấn luyện mô hình thực tế và đo lường hiệu suất. Các kỹ thuật phổ biến bao gồm RFE (Recursive Feature Elimination) và Stepwise Selection.
3. Phương pháp nhúng (Embedded Methods)
Đây là các kỹ thuật tích hợp việc lựa chọn biến ngay trong quá trình huấn luyện mô hình. Ví dụ điển hình là LASSO Regression hoặc các mô hình dựa trên cây (Decision Trees).
Thực hành tính toán độ quan trọng của biến
Tùy vào thuật toán sử dụng, thứ hạng quan trọng của các biến sẽ khác nhau. Ví dụ dưới đây so sánh giữa cây quyết định (rpart) và Random Forest:
# Sử dụng rpart
model_tree <- train(Label ~ ., data = training_set, method = "rpart")
importance_tree <- varImp(model_tree)
# Sử dụng Random Forest
model_rf <- train(Label ~ ., data = training_set, method = "RRF")
importance_rf <- varImp(model_rf, scale = FALSE)
Lựa chọn biến với LASSO Regression
LASSO sử dụng tham số phạt L1 để ép hệ số của các biến không quan trọng về bằng 0, từ đó thực hiện lựa chọn đặc trưng.
library(glmnet)
# Khởi tạo mô hình LASSO với kiểm định chéo
lasso_cv <- cv.glmnet(x_matrix, y_vector, family = 'binomial', alpha = 1, type.measure = 'auc')
plot(lasso_cv)
Biểu đồ AUC sẽ giúp xác định số lượng biến tối ưu mà tại đó mô hình đạt hiệu suất cao nhất mà vẫn giữ được sự đơn giản.
Loại bỏ đặc trưng đệ quy (RFE)
RFE hoạt động bằng cách huấn luyện mô hình trên toàn bộ biến, xếp hạng độ quan trọng, sau đó loại bỏ biến yếu nhất và lặp lại quá trình cho đến khi tìm được số lượng biến tối ưu.
# Thiết lập cấu hình RFE với Random Forest và Cross-Validation
rfe_config <- rfeControl(functions = rfFuncs,
method = "repeatedcv",
repeats = 3,
number = 10)
# Thực hiện RFE
rfe_results <- rfe(x = x_train,
y = y_train,
sizes = c(1:10),
rfeControl = rfe_config)
# Xem kết quả các biến được chọn
predictors(rfe_results)
Lựa chọn biến bằng Stepwise (Từng bước)
Phương pháp này thường được áp dụng trong các mô hình hồi quy để tìm ra tập hợp biến giải thích tốt nhất cho biến mục tiêu.
# Sử dụng phương pháp loại bỏ lùi (Backward Selection)
step_ctrl <- trainControl(method = "cv", number = 10)
step_model <- train(Target ~ ., data = my_data,
method = "leapBackward",
tuneGrid = data.frame(nvmax = 1:5),
trControl = step_ctrl)
# Hiển thị kết quả tối ưu
summary(step_model$finalModel)
Kết quả từ mô hình cuối cùng sẽ chỉ ra những biến nào đóng góp tích cực vào việc giảm sai số (RMSE) và tăng hệ số xác định (R-squared).