RandomizedSearchCV 是 scikit‑learn sklearn.model_selection
模块提供的超参数优化工具。它通过在给定的参数分布中随机抽取一定数量的参数组合,并使用交叉验证评估每个组合的模型性能,从而寻找表现最好的超参数组合。
1. 工作原理
- 随机抽样:从用户指定的
param_distributions
(可以是离散列表或概率分布)中随机采样n_iter
次,每次得到一组超参数。 - 交叉验证:对每组超参数执行交叉验证(由
cv
参数决定),计算指定评分指标(scoring
)。 - 结果记录:所有实验的得分、训练时间、参数值等会保存在
cv_results_
中。 - 返回最佳:搜索结束后,
best_estimator_
、best_params_
、best_score_
分别给出最佳模型、对应参数和最佳得分。
2. 关键参数
参数 | 作用 | 常用取值示例 |
---|---|---|
estimator |
待调优的基模型(如 RandomForestClassifier 、SVC ) |
RandomForestClassifier() |
param_distributions |
参数空间的分布或列表 | {'n_estimators': randint(50,200), 'max_depth': [None, 10, 20, 30]} |
n_iter |
随机抽样的次数(即搜索的组合数) | 50 |
scoring |
评价指标(如 'accuracy' 、'roc_auc' ) |
'f1' |
cv |
交叉验证折数或分割策略 | 5 、StratifiedKFold(n_splits=5) |
n_jobs |
并行计算的核数,-1 表示使用全部 CPU |
-1 |
refit |
是否在全部数据上使用最佳参数重新训练模型 | True |
random_state |
随机种子,保证可复现 | 42 |
这些参数在官方文档中有完整说明。
3. 使用步骤与示例代码
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
# 1. 加载数据
X, y = load_iris(return_X_y=True)
# 2. 定义模型
est = RandomForestClassifier(random_state=42)
# 3. 设置参数分布
param_dist = {
'n_estimators': randint(50, 200), # 随机整数 50\~199
'max_depth': [None, 5, 10, 15, 20], # 离散列表
'max_features': ['sqrt', 'log2', None],
'bootstrap': [True, False]
}
# 4. 创建 RandomizedSearchCV
search = RandomizedSearchCV(
estimator=est,
param_distributions=param_dist,
n_iter=30, # 采样 30 组
scoring='accuracy',
cv=5,
n_jobs=-1,
random_state=42,
refit=True
)
# 5. 执行搜索
search.fit(X, y)
# 6. 查看结果
print("最佳参数:", search.best_params_)
print("最佳得分:", search.best_score_)
该示例展示了从数据加载、参数分布定义、搜索对象创建到最终获取最佳参数的完整流程。
4. 与 GridSearchCV 的对比
维度 | GridSearchCV | RandomizedSearchCV |
---|---|---|
搜索方式 | 穷举所有可能的参数组合 | 随机抽样固定次数 |
计算成本 | 参数组合多时成本指数级增长 | 只受 n_iter 控制,成本可控 |
适用场景 | 参数空间小、希望找到全局最优 | 参数空间大、计算资源有限 |
搜索效率 | 对所有组合都评估,可能冗余 | 更快找到“足够好”的组合 |
并行化 | 同样支持 n_jobs |
同样支持 n_jobs |
5. 适用场景
如果超参数数量极少且搜索空间可控,使用 GridSearchCV 仍是更直接的选择。
6. 注意事项
- 随机性:不同随机种子可能得到不同的最佳组合,建议多次运行或设定
random_state
。 - 分布选择:对连续超参数使用概率分布(如
uniform
、loguniform
)能更好覆盖搜索空间。 - 交叉验证策略:对不平衡数据应使用分层交叉验证(
StratifiedKFold
)。 - 结果解释:
cv_results_
包含每次实验的完整信息,可转为 DataFrame 进一步分析。
总结
RandomizedSearchCV 通过随机抽样与交叉验证相结合,在保证搜索质量的同时显著降低计算开销,是处理大规模超参数调优的实用工具。掌握其核心参数、使用流程以及与 GridSearchCV 的区别,可帮助在机器学习项目中更高效地寻找最佳模型配置。
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!