Scikit - 结合缩放和网格搜索

cpe*_*che 9 python scikit-learn cross-validation grid-search

我是 scikit 的新手,在结合数据比例和网格搜索方面有两个小问题。

  1. 高效洁牙机

考虑使用 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)
Run Code Online (Sandbox Code Playgroud)
  1. 取回内部定标器配件

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

Ibr*_*iev 3

  1. GridSearchCV 对 Pipeline 对象一无所知;它假设提供的估计器是原子的,因为它不能仅选择某个特定阶段(例如StandartScaler)并在不同数据上拟合不同阶段。GridSearchCV 所做的所有事情 - 在提供的估计器上调用 fit(X, y) 方法,其中 X,y - 一些数据分割。因此它适合同一分割上的所有阶段。
  2. 尝试这个:

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

  3. 如果您将变压器/估计器包装到管道中 - 您必须在每个参数的名称中添加前缀,例如:,tuned_parameters = [{'svc__C': [1, 10, 100, 1000]}]请查看这些示例以获取更多详细信息连接多个特征提取方法管道:链接PCA和逻辑回归

不管怎样,读一下这篇文章,它可能会对你有所帮助