Scikit - 结合规模和网格搜索

Posted

技术标签:

【中文标题】Scikit - 结合规模和网格搜索【英文标题】:Scikit - Combining scale and grid search 【发布时间】:2016-03-07 13:52:39 【问题描述】:

我是 scikit 新手,在结合数据规模和网格搜索时遇到 2 个小问题。

    高效的缩放器

考虑使用 Kfolds 进行交叉验证,我希望每次我们在 K-1 折叠上训练模型时,数据缩放器(例如使用 preprocessing.StandardScaler())仅适合 K-1 折叠,并且然后应用于剩余的折叠。

我的印象是,以下代码将适合整个数据集的缩放器,因此我想修改它以使其行为与之前描述的一样:

classifier = svm.SVC(C=1)    
clf = make_pipeline(preprocessing.StandardScaler(), classifier)
tuned_parameters = ['C': [1, 10, 100, 1000]]
my_grid_search = GridSearchCV(clf, tuned_parameters, cv=5)
    检索内部定标器配件

当 refit=True,“在”Grid Search 之后,模型在整个数据集上进行 refit(使用最佳估计器),我的理解是管道将再次使用,因此缩放器将适合整个数据集。理想情况下,我想重用该拟合来扩展我的“测试”数据集。有没有办法直接从 GridSearchCV 中检索它?

【问题讨论】:

【参考方案1】:
    GridSearchCV 对 Pipeline 对象一无所知;它假设提供的估计器是原子的,因为它不能只选择某个特定阶段(例如,StandartScaler)并在不同数据上拟合不同阶段。 所有 GridSearchCV 都 - 在提供的估计器上调用 fit(X, y) 方法,其中 X,y - 一些数据拆分。因此,它适用于相同拆分的所有阶段。

    试试这个:

    best_pipeline = my_grid_search.best_estimator_ best_scaler = best_pipeline["standartscaler"]

    1234563 @

不管怎样,看看这个,它可能对你有帮助GridSearchCV

【讨论】:

所以你是说如果我想根据火车数据应用缩放,我必须实现自己的网格搜索?我认为有趣的是,它们不提供在训练测试拆分后应用预处理的功能。这是一种常见的用法,目的是不对测试数据引入偏差。

以上是关于Scikit - 结合规模和网格搜索的主要内容,如果未能解决你的问题,请参考以下文章

在 scikit-learn 中结合递归特征消除和网格搜索

使用 scikit-learn 进行递归特征消除和网格搜索

scikit-learn 中的超参数优化(网格搜索)

使用 scikit-learn 进行递归特征消除和网格搜索:DeprecationWarning

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

大规模服务网格性能优化 | Aeraki xDS 按需加载