Một mô hình Machine Learning có thể đạt Accuracy rất cao trên Training Set nhưng hoạt động kém khi gặp dữ liệu mới. Ngược lại, có những mô hình không thể học được quy luật quan trọng ngay cả trên dữ liệu huấn luyện.
Hai hiện tượng này thường liên quan đến Overfitting và Underfitting. Chúng phản ánh sự khác biệt giữa khả năng học dữ liệu đã quan sát và khả năng Generalization trên những quan sát chưa từng gặp.
Để xây dựng mô hình tốt hơn, người học cần hiểu mức độ phức tạp của mô hình, Bias–Variance Tradeoff, Regularization và cách lựa chọn Hyperparameters thông qua Cross-Validation.
Bài viết sẽ giải thích bản chất của những khái niệm này, các dấu hiệu nhận biết, phương pháp khắc phục và cách thực hiện Hyperparameter Tuning bằng Python với scikit-learn.
1. Thế nào là một mô hình Machine Learning tốt?
Mục tiêu của Machine Learning không phải là ghi nhớ toàn bộ dữ liệu huấn luyện. Mục tiêu quan trọng hơn là học được những quy luật có khả năng áp dụng cho dữ liệu mới.
Khả năng đó được gọi là Generalization.
1.1. Training Performance và Generalization Performance
Training Performance mô tả kết quả của mô hình trên dữ liệu dùng để huấn luyện. Generalization Performance mô tả khả năng hoạt động trên những quan sát mới, thường được ước lượng thông qua Validation Set hoặc Test Set phù hợp.
Hai kết quả này không nhất thiết giống nhau.
Ví dụ, một Decision Tree rất sâu có thể phân chia dữ liệu huấn luyện thành những vùng nhỏ và ghi nhớ nhiều trường hợp riêng biệt. Tuy nhiên, các quy tắc quá chi tiết đó có thể không còn phù hợp khi dữ liệu thay đổi.
1.2. Vì sao Training Accuracy cao chưa đủ?
Training Accuracy cao chỉ cho thấy mô hình dự đoán tốt trên dữ liệu đã được sử dụng để fit. Nó không chứng minh mô hình sẽ đạt kết quả tương tự trên dữ liệu chưa từng gặp.
Để đánh giá đúng, cần xem xét đồng thời kết quả trên Training Set và dữ liệu Validation hoặc Test, sử dụng Metric phù hợp với bài toán.
2. Overfitting là gì?
Overfitting xảy ra khi mô hình học quá sát những đặc điểm riêng của dữ liệu huấn luyện, bao gồm cả nhiễu hoặc những biến động không có khả năng khái quát, khiến hiệu quả trên dữ liệu mới suy giảm.
Một mô hình Overfitting có thể đạt Training Error rất thấp nhưng Validation Error hoặc Test Error cao hơn đáng kể.
2.1. Ví dụ trực quan về Overfitting
Giả sử chúng ta muốn dự đoán giá nhà dựa trên diện tích. Quan hệ tổng thể có thể tương đối đơn giản, nhưng dữ liệu quan sát chứa nhiễu do vị trí, tình trạng nhà và những yếu tố chưa được đưa vào mô hình.
Nếu sử dụng một đường cong đa thức bậc rất cao để đi qua gần như mọi điểm huấn luyện, mô hình có thể học cả những dao động ngẫu nhiên thay vì chỉ học xu hướng chính.
Khi xuất hiện dữ liệu mới, đường cong phức tạp đó có thể đưa ra dự đoán không ổn định.
2.2. Dấu hiệu thường gặp của Overfitting
- Training Error rất thấp nhưng Validation Error cao hơn đáng kể.
- Training Accuracy cao nhưng Validation Accuracy thấp hơn rõ rệt.
- Kết quả thay đổi mạnh khi dữ liệu huấn luyện thay đổi.
- Mô hình có độ phức tạp lớn so với lượng thông tin hữu ích trong dữ liệu.
Khoảng cách giữa Training Performance và Validation Performance là một dấu hiệu cần kiểm tra, nhưng không phải bằng chứng duy nhất. Chênh lệch cũng có thể xuất hiện do khác biệt phân phối dữ liệu, cách chia tập hoặc lỗi trong quy trình đánh giá.
2.3. Những nguyên nhân phổ biến
- Mô hình có quá nhiều tham số hoặc mức độ linh hoạt không phù hợp.
- Dữ liệu huấn luyện ít hoặc không đủ đa dạng.
- Dữ liệu chứa nhiễu, Outliers hoặc Labels không chính xác.
- Regularization quá yếu so với độ phức tạp của mô hình.
- Quá trình lựa chọn mô hình phụ thuộc quá nhiều vào một Validation Set nhỏ.
Overfitting không chỉ xuất hiện ở Deep Learning. Decision Tree, Polynomial Regression, KNN, SVM và nhiều thuật toán khác đều có thể Overfit nếu được cấu hình không phù hợp.
3. Underfitting là gì?
Underfitting xảy ra khi mô hình không học được đầy đủ những quy luật quan trọng của dữ liệu, khiến kết quả kém ngay cả trên Training Set.
Nguyên nhân có thể là mô hình quá đơn giản, Features không đủ thông tin hoặc quá trình tối ưu chưa phù hợp.
3.1. Ví dụ về Underfitting
Giả sử mối quan hệ thực tế giữa hai biến có dạng đường cong rõ rệt. Nếu sử dụng một mô hình tuyến tính quá đơn giản, mô hình có thể không biểu diễn được cấu trúc này.
Khi đó, cả Training Error và Validation Error đều có thể cao.
3.2. Dấu hiệu thường gặp
- Training Performance thấp so với yêu cầu của bài toán.
- Validation Performance cũng thấp.
- Tăng dữ liệu không nhất thiết cải thiện đáng kể kết quả nếu mô hình vẫn không đủ khả năng biểu diễn.
- Mô hình bỏ qua những quan hệ quan trọng giữa Features và Target.
3.3. Nguyên nhân của Underfitting
- Model Complexity quá thấp.
- Regularization quá mạnh.
- Thiếu Features có giá trị dự đoán.
- Quá trình huấn luyện dừng trước khi mô hình học đủ.
- Hyperparameters hạn chế khả năng biểu diễn hoặc tối ưu của mô hình.
Ví dụ, một Decision Tree với max_depth=1 có thể quá đơn giản cho bài toán có nhiều quan hệ phi tuyến. Tuy nhiên, việc tăng độ sâu chỉ nên được quyết định sau khi đánh giá trên dữ liệu phù hợp.
4. So sánh Overfitting và Underfitting
| Tiêu chí | Underfitting | Overfitting |
|---|---|---|
| Bản chất | Không học đủ quy luật quan trọng | Học quá sát những đặc điểm riêng của Training Data |
| Training Error | Thường cao | Thường thấp |
| Validation Error | Thường cao | Có thể cao hơn Training Error đáng kể |
| Nguyên nhân thường gặp | Mô hình quá đơn giản, Features yếu hoặc tối ưu chưa đủ | Mô hình quá linh hoạt, dữ liệu ít hoặc nhiễu |
| Hướng xử lý | Tăng khả năng biểu diễn, cải thiện Features hoặc tối ưu | Regularization, đơn giản hóa mô hình, cải thiện dữ liệu |
Hai hiện tượng này không phải hai trạng thái tuyệt đối có thể xác định bằng một ngưỡng cố định. Việc chẩn đoán cần dựa trên Metric, Baseline, Learning Curve và cách dữ liệu được chia để đánh giá.
5. Bias–Variance Tradeoff: Nền tảng để hiểu Generalization
Bias–Variance Tradeoff là một cách tiếp cận lý thuyết giúp giải thích vì sao mô hình quá đơn giản hoặc quá linh hoạt đều có thể hoạt động kém trên dữ liệu mới.
5.1. Bias là gì?
Bias phản ánh sai lệch có hệ thống giữa dự đoán trung bình của mô hình qua những tập huấn luyện khác nhau và hàm mục tiêu thực sự.
Mô hình có Bias cao thường khó biểu diễn đầy đủ cấu trúc dữ liệu, ngay cả khi có thêm quan sát.
5.2. Variance là gì?
Variance phản ánh mức độ dự đoán của mô hình thay đổi khi tập huấn luyện thay đổi.
Mô hình có Variance cao có thể nhạy với những thay đổi nhỏ trong dữ liệu, khiến dự đoán không ổn định.
5.3. Phân rã sai số trong Regression
Trong Regression với Squared Error, dưới những giả định phù hợp, Expected Prediction Error tại một điểm có thể được phân rã thành:
Expected Error
= Bias² + Variance + Irreducible Noise
Trong đó:
- Bias²: Sai lệch có hệ thống của dự đoán trung bình.
- Variance: Mức độ biến động của dự đoán giữa các tập huấn luyện.
- Irreducible Noise: Thành phần biến động không thể loại bỏ hoàn toàn chỉ bằng cách thay đổi mô hình dự đoán dựa trên các Features hiện có.
Công thức này không nên được áp dụng máy móc cho mọi Loss Function hoặc mọi bài toán Classification. Nó chủ yếu cung cấp trực giác quan trọng về sự đánh đổi giữa Bias và Variance.
5.4. Vì sao tăng Model Complexity không phải lúc nào cũng tốt?
Khi tăng độ phức tạp, mô hình thường có khả năng mô tả Training Data tốt hơn. Tuy nhiên, nếu độ phức tạp tăng quá mức so với dữ liệu, Variance có thể tăng và Generalization suy giảm.
Ngược lại, giảm độ phức tạp quá nhiều có thể khiến Bias tăng và mô hình không học đủ quy luật.
Mục tiêu là lựa chọn mức độ phức tạp phù hợp với dữ liệu và bài toán, không phải luôn chọn mô hình đơn giản nhất hoặc phức tạp nhất.
6. Learning Curve: Chẩn đoán mô hình bằng dữ liệu
Learning Curve biểu diễn kết quả của mô hình trên Training Set và Validation Set khi thay đổi số lượng quan sát dùng để huấn luyện.
Learning Curve giúp trả lời một câu hỏi thực tế: liệu bổ sung dữ liệu có khả năng cải thiện mô hình hay không?
6.1. Learning Curve khi Underfitting
Nếu Training Error và Validation Error đều cao và gần nhau, mô hình có thể đang bị giới hạn bởi khả năng biểu diễn hoặc chất lượng Features.
Trong trường hợp này, chỉ bổ sung dữ liệu chưa chắc giải quyết được vấn đề.
6.2. Learning Curve khi Overfitting
Nếu Training Error thấp nhưng Validation Error cao hơn đáng kể, mô hình có thể đang Overfit.
Bổ sung dữ liệu đa dạng và phù hợp đôi khi giúp giảm khoảng cách này, nhưng hiệu quả còn phụ thuộc vào độ phức tạp của mô hình, chất lượng dữ liệu và quy trình huấn luyện.
6.3. Không nên kết luận chỉ từ một biểu đồ
Learning Curve là công cụ hỗ trợ chẩn đoán. Kết luận cần được đối chiếu với Baseline, phân phối dữ liệu, Metric và tính ổn định của kết quả giữa các lần chia dữ liệu.
7. Regularization: Kiểm soát độ phức tạp của mô hình
Regularization là nhóm kỹ thuật đưa thêm ràng buộc hoặc hình phạt vào quá trình học nhằm kiểm soát mức độ linh hoạt của mô hình.
Trong nhiều mô hình, Regularization giúp giảm nguy cơ Overfitting bằng cách hạn chế nghiệm quá phức tạp hoặc quá nhạy với dữ liệu huấn luyện.
7.1. L1 Regularization
L1 Regularization bổ sung hình phạt dựa trên tổng giá trị tuyệt đối của các hệ số:
Objective = Data Loss + λ × Σ|w_j|
L1 có thể đưa một số hệ số về đúng 0, từ đó tạo ra nghiệm thưa và hỗ trợ lựa chọn đặc trưng trong những điều kiện phù hợp.
7.2. L2 Regularization
L2 Regularization bổ sung hình phạt dựa trên tổng bình phương các hệ số:
Objective = Data Loss + λ × Σ(w_j²)
L2 thường làm giảm độ lớn các hệ số thay vì đưa nhiều hệ số về đúng 0.
Trong các công thức minh họa này, λ là hệ số điều chỉnh cường độ Regularization. Quy ước về hệ số và cách chuẩn hóa Loss có thể khác nhau giữa các thư viện hoặc thuật toán.
7.3. Regularization quá mạnh có thể gây Underfitting
Regularization không phải lúc nào cũng cải thiện mô hình. Nếu mức phạt quá lớn, mô hình có thể mất khả năng biểu diễn những quan hệ quan trọng.
Vì vậy, cường độ Regularization cần được lựa chọn dựa trên Validation Performance thay vì chỉ quan sát Training Error.
8. Những cách khắc phục Overfitting và Underfitting
Việc cải thiện mô hình nên bắt đầu bằng xác định nguyên nhân thay vì thay đổi tham số một cách ngẫu nhiên.
8.1. Khi mô hình có dấu hiệu Overfitting
- Giảm Model Complexity, chẳng hạn giới hạn độ sâu của Decision Tree.
- Tăng Regularization khi thuật toán hỗ trợ.
- Bổ sung dữ liệu huấn luyện đa dạng và phù hợp nếu có thể.
- Kiểm tra Outliers, nhiễu và chất lượng Labels.
- Sử dụng Early Stopping với những thuật toán huấn luyện lặp phù hợp.
- Kiểm tra Data Leakage và tính hợp lệ của cách chia dữ liệu.
8.2. Khi mô hình có dấu hiệu Underfitting
- Thử mô hình có khả năng biểu diễn linh hoạt hơn.
- Cải thiện Features hoặc bổ sung thông tin có giá trị dự đoán.
- Giảm Regularization nếu đang quá mạnh.
- Điều chỉnh quá trình tối ưu hoặc số vòng huấn luyện khi phù hợp.
- Kiểm tra xem Metric và Baseline có được xác định đúng không.
Không nên mặc định rằng tăng dữ liệu luôn chữa Overfitting hoặc tăng độ phức tạp luôn chữa Underfitting. Mỗi thay đổi cần được kiểm chứng bằng quy trình đánh giá nhất quán.
9. Hyperparameter Tuning là gì?
Hyperparameter Tuning là quá trình lựa chọn các Hyperparameters nhằm tối ưu hiệu quả của mô hình theo một tiêu chí đánh giá xác định.
Hyperparameters là những cấu hình được thiết lập trước hoặc bên ngoài quá trình fit thông thường của mô hình.
9.1. Parameter và Hyperparameter khác nhau thế nào?
| Tiêu chí | Parameter | Hyperparameter |
|---|---|---|
| Cách xác định | Được học từ Training Data | Được cấu hình hoặc lựa chọn thông qua quy trình tuning |
| Ví dụ | Hệ số của Logistic Regression | C của Logistic Regression |
| Ví dụ khác | Các giá trị tại Leaf Nodes của Decision Tree | max_depth, min_samples_leaf |
9.2. Hyperparameters của một số thuật toán
| Thuật toán | Hyperparameters thường gặp |
|---|---|
| Decision Tree | max_depth, min_samples_split, min_samples_leaf, ccp_alpha |
| Random Forest | n_estimators, max_depth, max_features, min_samples_leaf |
| KNN | n_neighbors, weights, metric |
| SVM | C, kernel, gamma |
| Logistic Regression | C, penalty, solver |
Không phải mọi tổ hợp Hyperparameters đều hợp lệ hoặc có ý nghĩa. Ví dụ, một số loại Regularization chỉ được hỗ trợ bởi những Solver nhất định.
10. Grid Search và Random Search
Hai phương pháp phổ biến để tìm Hyperparameters là Grid Search và Random Search.
10.1. Grid Search
Grid Search đánh giá tất cả tổ hợp Hyperparameters được liệt kê trong một Search Space xác định.
Ví dụ:
max_depth = [3, 5, 7]
min_samples_leaf = [1, 3, 5]
Số tổ hợp = 3 × 3 = 9
Nếu sử dụng 5-Fold Cross-Validation, chín tổ hợp sẽ tạo ra 45 lần fit trong quá trình đánh giá, chưa tính lần refit mô hình cuối cùng nếu được bật.
Grid Search dễ hiểu và phù hợp khi Search Space nhỏ. Tuy nhiên, chi phí tính toán tăng nhanh khi số Hyperparameters hoặc số giá trị thử nghiệm tăng.
10.2. Random Search
Random Search lấy mẫu các tổ hợp Hyperparameters từ những tập giá trị hoặc phân phối đã xác định.
Thay vì đánh giá toàn bộ tổ hợp, người dùng quy định số lần thử nghiệm thông qua tham số như n_iter trong RandomizedSearchCV.
Random Search thường hữu ích khi Search Space lớn hoặc chỉ một số Hyperparameters có ảnh hưởng mạnh đến kết quả.
10.3. So sánh Grid Search và Random Search
| Tiêu chí | Grid Search | Random Search |
|---|---|---|
| Cách tìm kiếm | Thử các tổ hợp được liệt kê | Lấy mẫu tổ hợp từ Search Space |
| Chi phí tính toán | Phụ thuộc vào toàn bộ số tổ hợp | Kiểm soát bằng số lần thử nghiệm |
| Ưu điểm | Có hệ thống, dễ tái lập | Linh hoạt với Search Space lớn |
| Hạn chế | Có thể rất tốn kém | Có thể bỏ lỡ vùng tham số tốt |
Cả hai phương pháp đều không bảo đảm tìm được cấu hình tối ưu toàn cục trong mọi trường hợp. Chất lượng kết quả phụ thuộc vào Search Space, ngân sách tính toán, cách đánh giá và mức độ ổn định của dữ liệu.
11. Cross-Validation trong Hyperparameter Tuning
Hyperparameter Tuning không nên dựa trực tiếp trên Test Set. Nếu liên tục thay đổi tham số để tối đa hóa điểm Test, tập Test sẽ trở thành một phần của quá trình lựa chọn mô hình.
Điều này làm cho kết quả đánh giá cuối cùng có nguy cơ lạc quan quá mức.
11.1. Quy trình phù hợp
Dataset
|
v
Train / Test Split
|
v
Training Set
|
v
Cross-Validation
|
v
Hyperparameter Search
|
v
Chọn cấu hình tốt
|
v
Refit trên Training Set
|
v
Đánh giá trên Test Set
|
v
Báo cáo kết quả
11.2. Vì sao cần Pipeline?
Nếu mô hình sử dụng StandardScaler, PCA, Imputation hoặc Feature Selection, các bước này cần được fit trong từng Fold của Cross-Validation.
Pipeline giúp bảo đảm quá trình tiền xử lý và huấn luyện được thực hiện đúng trên phần dữ liệu huấn luyện của mỗi Fold, hạn chế Data Leakage.
11.3. Nested Cross-Validation
Khi cần ước lượng hiệu quả Generalization của cả quy trình lựa chọn Hyperparameters, có thể sử dụng Nested Cross-Validation.
Trong đó, vòng Cross-Validation bên trong được dùng để lựa chọn Hyperparameters, còn vòng bên ngoài dùng để đánh giá quy trình lựa chọn đó trên dữ liệu chưa tham gia tuning.
Nested Cross-Validation thường tốn chi phí tính toán hơn, nhưng có thể hữu ích khi so sánh nhiều phương pháp trên bộ dữ liệu nhỏ và muốn hạn chế Selection Bias.
12. Thực hành: Nhận biết Overfitting bằng Decision Tree
Chúng ta sẽ sử dụng bộ dữ liệu Breast Cancer Wisconsin có sẵn trong scikit-learn để minh họa ảnh hưởng của max_depth đến Training Accuracy và Validation Accuracy.
Bộ dữ liệu này được sử dụng cho mục đích học thuật và thực hành Machine Learning, không thay thế các quy trình đánh giá y khoa.
12.1. Cài đặt thư viện
pip install numpy pandas matplotlib scikit-learn
12.2. So sánh các mức độ sâu của Decision Tree
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import (
train_test_split,
cross_validate,
StratifiedKFold
)
from sklearn.tree import DecisionTreeClassifier
# 1. Tải dữ liệu
data = load_breast_cancer()
X = data.data
y = data.target
# 2. Chia Train/Test
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42,
stratify=y
)
# 3. Cross-Validation trên Training Set
cv = StratifiedKFold(
n_splits=5,
shuffle=True,
random_state=42
)
depths = [1, 2, 3, 4, 5, 7, 10, None]
results = []
for depth in depths:
model = DecisionTreeClassifier(
max_depth=depth,
random_state=42
)
scores = cross_validate(
model,
X_train,
y_train,
cv=cv,
scoring="accuracy",
return_train_score=True
)
results.append({
"max_depth": str(depth),
"Train Accuracy": scores[
"train_score"
].mean(),
"Validation Accuracy": scores[
"test_score"
].mean()
})
results_df = pd.DataFrame(results)
print(results_df)
# 4. Trực quan hóa
plt.figure(figsize=(9, 5))
plt.plot(
results_df["max_depth"],
results_df["Train Accuracy"],
marker="o",
label="Train Accuracy"
)
plt.plot(
results_df["max_depth"],
results_df["Validation Accuracy"],
marker="o",
label="Validation Accuracy"
)
plt.xlabel("max_depth")
plt.ylabel("Accuracy")
plt.title("Decision Tree Complexity vs Accuracy")
plt.legend()
plt.grid(alpha=0.3)
plt.show()
12.3. Cách diễn giải kết quả
Khi tăng max_depth, Decision Tree có khả năng xây dựng nhiều quy tắc phân chia hơn. Vì vậy, Training Accuracy thường có xu hướng tăng hoặc không giảm khi các điều kiện khác được giữ cố định.
Tuy nhiên, Validation Accuracy không nhất thiết tăng liên tục. Sau một mức độ phức tạp nhất định, mô hình có thể bắt đầu học những đặc điểm riêng của Training Data thay vì những quy luật có khả năng khái quát.
Đoạn mã không giả định trước độ sâu nào là tốt nhất. Kết quả thực tế cần được xác định bằng cách chạy chương trình và xem xét sự ổn định giữa các Fold.
13. Hyperparameter Tuning bằng GridSearchCV
Tiếp theo, chúng ta sử dụng GridSearchCV để tìm cấu hình Decision Tree phù hợp hơn dựa trên Cross-Validation.
13.1. Xây dựng Search Space
from sklearn.model_selection import (
GridSearchCV,
StratifiedKFold
)
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import (
accuracy_score,
f1_score,
classification_report
)
# X_train, X_test, y_train, y_test
# được tạo từ ví dụ trước
model = DecisionTreeClassifier(
random_state=42
)
param_grid = {
"max_depth": [2, 3, 4, 5, 7, None],
"min_samples_split": [2, 5, 10],
"min_samples_leaf": [1, 2, 4]
}
cv = StratifiedKFold(
n_splits=5,
shuffle=True,
random_state=42
)
grid_search = GridSearchCV(
estimator=model,
param_grid=param_grid,
scoring="f1_macro",
cv=cv,
n_jobs=-1,
refit=True
)
grid_search.fit(X_train, y_train)
print(
"Best Parameters:",
grid_search.best_params_
)
print(
"Best CV F1 Macro:",
grid_search.best_score_
)
# Đánh giá trên Test Set
best_model = grid_search.best_estimator_
y_pred = best_model.predict(X_test)
print(
"Test Accuracy:",
accuracy_score(y_test, y_pred)
)
print(
"Test F1 Macro:",
f1_score(
y_test,
y_pred,
average="macro"
)
)
print(
classification_report(
y_test,
y_pred,
target_names=data.target_names
)
)
13.2. Giải thích đoạn mã
param_grid: Xác định các giá trị Hyperparameters cần thử.GridSearchCV: Đánh giá các tổ hợp tham số bằng Cross-Validation.scoring="f1_macro": Sử dụng Macro F1 làm tiêu chí lựa chọn, giúp mỗi lớp đóng góp ngang nhau vào Metric tổng hợp.cv=5: Thực hiện đánh giá qua năm Fold theo bộ chia đã cấu hình.best_params_: Trả về tổ hợp tham số có điểm Cross-Validation tốt nhất theo tiêu chí lựa chọn.best_score_: Trả về điểm Cross-Validation trung bình của cấu hình được chọn.best_estimator_: Mô hình được refit trên toàn bộ Training Set với cấu hình tốt nhất khirefit=True.
Giá trị best_score_ là kết quả đã được sử dụng để lựa chọn cấu hình nên có thể lạc quan hơn một ước lượng đánh giá độc lập. Test Set vẫn cần được giữ riêng cho bước đánh giá cuối cùng.
14. RandomizedSearchCV: Tuning với ngân sách giới hạn
Khi Search Space lớn, RandomizedSearchCV có thể giúp kiểm soát số lượng tổ hợp được thử nghiệm.
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
rf_model = RandomForestClassifier(
random_state=42,
n_jobs=-1
)
param_distributions = {
"n_estimators": [100, 200, 300],
"max_depth": [None, 5, 10, 20],
"min_samples_leaf": [1, 2, 4],
"max_features": ["sqrt", "log2"]
}
random_search = RandomizedSearchCV(
estimator=rf_model,
param_distributions=param_distributions,
n_iter=20,
scoring="f1_macro",
cv=5,
random_state=42,
n_jobs=-1,
refit=True
)
random_search.fit(X_train, y_train)
print(
"Best Parameters:",
random_search.best_params_
)
print(
"Best CV Score:",
random_search.best_score_
)
print(
"Test Score:",
random_search.score(X_test, y_test)
)
Trong ví dụ này, n_iter=20 giới hạn số tổ hợp Hyperparameters được lấy mẫu để đánh giá. Việc chọn 20 lần thử chỉ nhằm minh họa cách sử dụng công cụ, không phải một con số tối ưu cho mọi bài toán.
Khi sử dụng n_jobs=-1 ở cả RandomizedSearchCV và RandomForestClassifier, có thể xảy ra cạnh tranh tài nguyên do xử lý song song ở nhiều cấp. Trong môi trường có tài nguyên hạn chế, nên cân nhắc chỉ bật song song ở một cấp.
15. Những sai lầm thường gặp khi Hyperparameter Tuning
15.1. Tuning trực tiếp trên Test Set
Đây là sai lầm quan trọng vì khiến Test Set không còn độc lập với quá trình lựa chọn mô hình.
Hyperparameters cần được lựa chọn bằng Validation Set hoặc Cross-Validation trên Training Set.
15.2. Search Space quá rộng nhưng thiếu định hướng
Thử quá nhiều cấu hình không phù hợp có thể gây lãng phí tài nguyên mà không cải thiện đáng kể chất lượng mô hình.
Nên bắt đầu từ các Hyperparameters có ảnh hưởng rõ ràng đến Model Complexity và dựa trên đặc điểm thuật toán để xác định khoảng giá trị hợp lý.
15.3. Chọn Metric không phù hợp
Nếu dữ liệu mất cân bằng, tối ưu Accuracy có thể tạo ra mô hình không đáp ứng mục tiêu nhận diện lớp thiểu số.
Cần xác định Metric chính trước khi Tuning, chẳng hạn Recall, F1 Macro, ROC-AUC hoặc Average Precision tùy bài toán.
15.4. Bỏ qua Data Leakage
StandardScaler, PCA, Imputation và Feature Selection cần được thực hiện đúng trong từng Fold nếu các bước này học thống kê hoặc cấu trúc từ dữ liệu.
Pipeline là lựa chọn phù hợp để kết hợp tiền xử lý và mô hình trong quá trình Hyperparameter Tuning.
15.5. Cho rằng cấu hình tốt nhất trên Validation luôn tốt nhất trong thực tế
Validation Score là một ước lượng dựa trên dữ liệu hữu hạn. Kết quả có thể thay đổi khi phân phối dữ liệu, thời gian hoặc điều kiện vận hành thay đổi.
Do đó, ngoài Metric, cần xem xét tính ổn định, chi phí tính toán, khả năng giải thích và yêu cầu triển khai.
16. Quy trình xây dựng mô hình tốt hơn trong thực tế
Một quy trình cải thiện mô hình có hệ thống thường gồm các bước sau:
- Xác định mục tiêu: Chọn Metric phản ánh đúng chi phí và yêu cầu của bài toán.
- Xây dựng Baseline: Bắt đầu với mô hình đơn giản để có điểm tham chiếu.
- Kiểm tra dữ liệu: Phân tích chất lượng Labels, Features, Outliers và phân phối dữ liệu.
- Thiết kế Validation: Lựa chọn Stratified, Group-Based hoặc Time-Based Split khi phù hợp.
- Chẩn đoán: So sánh Training và Validation Performance, sử dụng Learning Curve nếu cần.
- Điều chỉnh độ phức tạp: Thử Regularization, Feature Engineering hoặc thay đổi thuật toán.
- Hyperparameter Tuning: Dùng Grid Search, Random Search hoặc phương pháp tìm kiếm khác trong ngân sách phù hợp.
- Đánh giá cuối cùng: Refit cấu hình được chọn trên Training Set rồi đánh giá trên Test Set độc lập.
- Giám sát sau triển khai: Theo dõi hiệu quả, Data Drift và những thay đổi trong môi trường sử dụng.
Quy trình này giúp tránh việc cải thiện mô hình chỉ bằng thử nghiệm ngẫu nhiên và tập trung vào những nguyên nhân thực sự ảnh hưởng đến Generalization.
17. Kết luận
Overfitting và Underfitting là hai vấn đề cốt lõi trong Machine Learning. Overfitting khiến mô hình học quá sát dữ liệu huấn luyện, trong khi Underfitting khiến mô hình không học đủ những quy luật quan trọng.
Bias–Variance Tradeoff cung cấp nền tảng để hiểu sự đánh đổi giữa khả năng biểu diễn và độ ổn định của mô hình. Regularization giúp kiểm soát độ phức tạp, còn Learning Curve hỗ trợ chẩn đoán hiệu quả khi thay đổi lượng dữ liệu huấn luyện.
Hyperparameter Tuning cho phép lựa chọn cấu hình phù hợp hơn thông qua những phương pháp như Grid Search và Random Search. Tuy nhiên, việc Tuning chỉ có ý nghĩa khi được thực hiện cùng Cross-Validation, Metric phù hợp và quy trình tránh Data Leakage.
Mục tiêu cuối cùng không phải là tìm mô hình có Training Accuracy cao nhất, mà là xây dựng mô hình có khả năng Generalization tốt, ổn định và đáp ứng yêu cầu thực tế.
18. Tài liệu tham khảo
- scikit-learn. Underfitting vs. Overfitting. Ví dụ minh họa ảnh hưởng của độ phức tạp mô hình. https://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting.html
- scikit-learn. Learning Curves. Tài liệu về Learning Curve và đánh giá khả năng Generalization. https://scikit-learn.org/stable/modules/learning_curve.html
- scikit-learn. Tuning the Hyper-parameters of an Estimator. Tài liệu chính thức về Grid Search và Random Search. https://scikit-learn.org/stable/modules/grid_search.html
- scikit-learn. GridSearchCV. Tài liệu API và cách lựa chọn Hyperparameters bằng Cross-Validation. https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
- scikit-learn. RandomizedSearchCV. Tài liệu API về tìm kiếm Hyperparameters ngẫu nhiên. https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html
- scikit-learn. Cross-validation: Evaluating Estimator Performance. Tài liệu về Cross-Validation và các chiến lược chia dữ liệu. https://scikit-learn.org/stable/modules/cross_validation.html
- scikit-learn. Common Pitfalls and Recommended Practices. Tài liệu về Data Leakage và thực hành Machine Learning phù hợp. https://scikit-learn.org/stable/common_pitfalls.html
- Bergstra, J., & Bengio, Y. (2012). Random Search for Hyper-Parameter Optimization. Journal of Machine Learning Research, 13, 281–305. https://www.jmlr.org/papers/v13/bergstra12a.html
19. Học thêm Data, AI và Machine Learning tại MCNA
Nếu bạn muốn xây dựng nền tảng về Python, Data Analysis và ứng dụng AI trong công việc, có thể tham khảo các chương trình học tại MCNA Technology School:
- Combo 5 khóa AI & Power BI: Tìm hiểu chương trình Combo 5 khóa AI & Power BI
- Combo Python: Tìm hiểu chương trình Combo Python
Tác giả
Nguyễn Quốc Hải – Data Analyst tại MCNA Technology School
MCNA Technology School là đơn vị tiên phong đào tạo AI, Big Data, Business Intelligence tại Việt Nam. Chuyên sâu về Power BI, Python, SQL và Data Analytics — đối tác đào tạo của 300+ doanh nghiệp lớn như Viettel Global, Masan Group, Techcombank, VPBank, Daikin.
🌐 Website: mcna.vn
📘 Facebook: facebook.com/mcnatechnologyschool
▶️ YouTube: youtube.com/@mcna.technology.school
💼 LinkedIn: linkedin.com/company/mcna-vn
📞 Hotline: 0939.866.825 (Mr. Minh Khang)
📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B, TT2, Văn Quán, Hà Đông
📍 TP.HCM: The BIB Space, 50B Phan Tây Hồ, Cầu Kiệu

