最值得调的三个超参数是n_estimators、max_depth和max_features;n_estimators通常100–500足够,max_depth建议从10开始试,max_features分类默认"sqrt"、回归默认"auto",可尝试"log2"提升泛化性。

直接调:用 GridSearchCV 或 RandomizedSearchCV,别手写循环;默认参数在多数场景下够用,盲目调参反而容易过拟合。
哪些超参数最值得调?
对 Random Forest 影响最大、且调起来有实际收益的就三个:n_estimators、max_depth、max_features。其他如 min_samples_split 或 ccp_alpha 属于精细调控,只在特定过拟合/欠拟合时才需碰。
-
n_estimators:树的数量。通常 100–500 足够,再往上验证误差下降极慢,还拖慢预测速度 -
max_depth:单棵树最大深度。设为None(不限制)易过拟合;设太小(如 3–5)会欠拟合;建议从 10 开始试 -
max_features:每次分裂考虑的特征数。分类默认是"sqrt",回归是"auto"(等价于"n_features")。换成"log2"有时能小幅提升泛化性
用 RandomizedSearchCV 比 GridSearchCV 更实际
全网格搜索在 3 个参数上很容易爆炸——比如各试 10 个值,就是 1000 次训练。而 RandomizedSearchCV 在相同计算量下更可能撞中优质区域,尤其当参数重要性不均等时。
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint, uniform
rf = RandomForestClassifier(random_state=42)
param_dist = {
"n_estimators": randint(100, 600),
"max_depth": randint(5, 25),
"max_features": ["sqrt", "log2", None],
"criterion": ["gini", "entropy"]
}
search = RandomizedSearchCV(
rf, param_distributions=param_dist,
n_iter=50, cv=3, n_jobs=-1, random_state=42
)
search.fit(X_train, y_train)
注意:n_iter=50 不代表只跑 50 次——它指从分布中采样 50 组参数组合,每组都要做 3 折 CV,实际训练 150 棵森林。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
调参前必须做这三件事
跳过它们,调参结果基本不可信:
- 先用
train_test_split留出独立的test_set,所有搜索过程只在train_set上进行,最终评估必须用未见过的test_set - 确保特征已标准化?不需要。Random Forest 对量纲不敏感,标准化反而可能干扰重要特征的分裂逻辑
- 检查目标变量是否严重不平衡?如果是,别只看 accuracy;在
RandomizedSearchCV中传入scoring="f1"或"roc_auc",否则搜索会偏向多数类
真正难的不是怎么写 RandomizedSearchCV,而是判断哪次 CV 得分波动大、要不要加 cv=StratifiedKFold(n_splits=5)、以及发现 max_depth 搜索区间里最优值总卡在边界时,该缩小区间还是放宽它——这些细节没日志、没验证曲线,光靠 score 数字根本没法决策。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










