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

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

  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)
  1. 检索内部定标器配件

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

【问题讨论】:

    标签: python scikit-learn cross-validation grid-search


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

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

    3. 1234563 @

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

    【讨论】:

    • 所以你是说如果我想根据火车数据应用缩放,我必须实现自己的网格搜索?我认为有趣的是,它们不提供在训练测试拆分后应用预处理的功能。这是一种常见的用法,目的是不对测试数据引入偏差。
    猜你喜欢
    • 2013-01-29
    • 2015-11-19
    • 2015-10-01
    • 2016-07-12
    • 2016-07-18
    • 2017-12-29
    • 2016-08-30
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多