📢 转载信息
原文链接:https://www.kdnuggets.com/7-scikit-learn-tricks-for-hyperparameter-tuning
原文作者:Iván Palomares Carrascosa
Scikit-learn 超参数调优的 7 个技巧
准备好学习这 7 个 Scikit-learn 技巧,将您机器学习模型的超参数调优技能提升到一个新的水平了吗?
作者:Iván Palomares Carrascosa, KDnuggets 技术内容专家,发布于 2026 年 1 月 29 日,分类:机器学习
引言
对机器学习模型的超参数进行调优在一定程度上是一种手艺或工艺,需要正确的技能来平衡经验、直觉和大量的实验。在实践中,这个过程有时可能会让人感到不知所措,因为复杂的模型具有很大的搜索空间,超参数之间的相互作用很复杂,而且调整后性能的提升有时很微妙。
下面,我们整理了一个包含 7 个 Scikit-learn 技巧的列表,可将您机器学习模型的超参数调优技能提升到新的水平。
1. 利用领域知识约束搜索空间
不约束一个原本巨大的搜索空间,无异于在(大)干草堆中寻找一根针!请利用领域知识——如果需要,也可以利用领域专家——首先为模型中一些相关的超参数定义一套经过良好选择的界限。这将有助于降低复杂性,提高运行过程的可行性,排除不合理的设置。
对于随机森林示例中的两个典型超参数,其示例参数网格可能如下所示:
param_grid = {"max_depth": [3, 5, 7], "min_samples_split": [2, 10]}
2. 从随机搜索开始,广泛探索
在预算有限的情况下,可以尝试利用随机搜索(Random Search)。这是一种高效的方法,通过引入一个由分布驱动的采样过程来探索大型搜索空间,该过程从一些超参数值的范围内进行采样。就像在这个示例中对 C(即控制 SVM 模型边界刚性的超参数)进行采样一样:
param_dist = {"C": loguniform(1e-3, 1e2)} RandomizedSearchCV(SVC(), param_dist, n_iter=20)
3. 利用网格搜索进行局部精炼
在随机搜索找到有希望的区域后,有时最好应用一个聚焦的网格搜索,以进一步探索这些区域,从而识别出边际收益。先探索,后利用。
GridSearchCV(SVC(), {"C": [5, 10], "gamma": [0.01, 0.1]})
4. 将预处理管道封装到超参数调优中
Scikit-learn 的管道(Pipelines)是简化和优化端到端机器学习工作流并防止诸如数据泄漏等问题的绝佳方式。如果我们将一个管道传递给搜索实例,就可以同时调整预处理和模型超参数,如下所示:
param_grid = { "scaler__with_mean": [True, False], # 缩放超参数 "clf__C": [0.1, 1, 10], # SVM 模型超参数 "clf__kernel": ["linear", "rbf"] # 另一个 SVM 超参数 } grid_search = GridSearchCV(pipeline, param_grid, cv=5) grid_search.fit(X_train, y_train)
5. 用交叉验证换取速度与可靠性的平衡
虽然应用交叉验证是基于 Scikit-learn 的超参数调优中的常态,但值得注意的是,省略它意味着只使用一个训练-验证分割:这更快,但结果的变异性更大,有时可靠性较低。增加交叉验证的折数(例如 cv=5)可以提高性能的稳定性,以便于模型间的比较。找到一个最适合您的平衡值:
GridSearchCV(model, params, cv=5)
6. 优化多个指标
当存在多种性能权衡时,让您的调优过程监控多个指标有助于揭示在使用单一分数优化时可能出现的无意中的妥协。此外,您可以使用 refit 来指定用于确定最终“最佳”模型的主要目标。
from sklearn.model_selection import GridSearchCV param_grid = { "C": [0.1, 1, 10], "gamma": [0.01, 0.1] } scoring = { "accuracy": "accuracy", "f1": "f1" } gs = GridSearchCV( SVC(), param_grid, scoring=scoring, refit="f1", # 用于选择最终模型的指标 cv=5 ) gs.fit(X_train, y_train)
7. 明智地解释结果
一旦您的调优过程结束,并且找到了最佳分数的模型,请更进一步,使用 cv_results_ 来更好地理解参数交互、趋势等,或者,如果您愿意,可以对结果进行可视化。以下示例在完成搜索和训练过程后,为名为 gs 的网格搜索对象构建了报告和结果排名:
import pandas as pd results_df = pd.DataFrame(gs.cv_results_) # 报告的目标列 columns_to_show = [ 'param_clf__C', 'mean_test_score', 'std_test_score', 'mean_fit_time', 'rank_test_score' ] print(results_df[columns_to_show].sort_values('rank_test_score'))
总结
超参数调优在系统化和深思熟虑时最为有效。通过结合智能搜索策略、适当的验证以及对结果的仔细解释,您可以在不浪费计算资源或过度拟合的情况下,提取出有意义的性能提升。将调优视为一个迭代学习过程,而不仅仅是一个优化复选框。
Iván Palomares Carrascosa 是人工智能、机器学习、深度学习和大型语言模型(LLMs)领域的领导者、作家、演讲者和顾问。他培训和指导他人如何在现实世界中利用人工智能。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区