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"]
不管怎样,看看这个,它可能对你有帮助GridSearchCV
【讨论】:
所以你是说如果我想根据火车数据应用缩放,我必须实现自己的网格搜索?我认为有趣的是,它们不提供在训练测试拆分后应用预处理的功能。这是一种常见的用法,目的是不对测试数据引入偏差。以上是关于Scikit - 结合规模和网格搜索的主要内容,如果未能解决你的问题,请参考以下文章
使用 scikit-learn 进行递归特征消除和网格搜索:DeprecationWarning