Scikit 网格搜索参数(不是超参数)
Posted
技术标签:
【中文标题】Scikit 网格搜索参数(不是超参数)【英文标题】:Scikit grid searching the parameters (not hyper parameters) 【发布时间】:2016-07-12 06:18:43 【问题描述】:Scikit 的GridSearch 非常适合我想找到最佳超参数。我想使用相同的理念来找到线性回归的最佳参数集,使用跨多个折叠的目标函数。如何在多个折叠上优化线性回归的参数(字面意思是 beta 和截距)?
用例(简化): 我有一个包含三年数据的数据集。我想定义什么是“所有年份都可以”的最佳线性回归。如果我将线性回归拟合到整个数据集,我将得到一个可以减少所有数据的最小二乘误差的数据集。我将有效地减少错误
但是,这 (min(error)
) 不是我的目标。我可以在这个目标上得到一个很好的结果,仅仅是因为分类器在第 1 年和第 2 年做得很好,这足以弥补第 3 年的损失。
我实际上想要最小化的是类似于min(max(error_year_1, error_year_1, error_year_1))
的东西。
解决这个问题的一个 hacky 方法是创建一个函数 f(b0, b1, b2, year1, year2, year3),它返回错误的最大值,然后使用 scipy 最小化该函数。
实际问题:有没有办法在 scikit 中做到这一点?
【问题讨论】:
【参考方案1】:在我看来,scikit 只提供对 scoring 的直接 api 访问,我相信它一次只能看到一个折叠。
不是很漂亮,但我认为您最好的选择是遍历 GridSearchCV
的 grid_scores_
cv_validation_scores
并手动获取一组参数,以最大限度地减少您选择的损失函数的最大值。
但不要认为它会保存分类器,如果您想使用它来进行预测,您可能必须重新训练另一个 logit。
【讨论】:
以上是关于Scikit 网格搜索参数(不是超参数)的主要内容,如果未能解决你的问题,请参考以下文章
执行 python scikit-learn 网格搜索方法时出现无效参数错误
我应该在 SMOTE 之前还是之后执行网格搜索(用于调整超参数)?
Sklearn超参调优手段:网格搜索(Grid Search)和随机搜索(Randomized Search)