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 访问,我相信它一次只能看到一个折叠。

不是很漂亮,但我认为您最好的选择是遍历 GridSearchCVgrid_scores_ cv_validation_scores 并手动获取一组参数,以最大限度地减少您选择的损失函数的最大值。

但不要认为它会保存分类器,如果您想使用它来进行预测,您可能必须重新训练另一个 logit。

【讨论】:

以上是关于Scikit 网格搜索参数(不是超参数)的主要内容,如果未能解决你的问题,请参考以下文章

必知必会,这4种算法超参自动优化方法真香啊

执行 python scikit-learn 网格搜索方法时出现无效参数错误

我应该在 SMOTE 之前还是之后执行网格搜索(用于调整超参数)?

Sklearn超参调优手段:网格搜索(Grid Search)和随机搜索(Randomized Search)

Sklearn超参调优手段:网格搜索(Grid Search)和随机搜索(Randomized Search)

在 SciKit-Learn 中使用 XGBoost 交叉验证进行网格搜索和提前停止