Scikit - 结合规模和网格搜索

Scikit - Combining scale and grid search

我是 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,"after" Grid Search,模型在整个数据集上重新拟合(使用最佳估计器),我的理解是将再次使用管道,因此缩放器将适合整个数据集。理想情况下,我想重用适合的数据集来扩展我的 'test' 数据集。有没有办法直接从 GridSearchCV 检索它?

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

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

  3. 如果您将 transformers/estimators 包装到管道中 - 您必须为每个参数的名称添加前缀,例如:tuned_parameters = [{'svc__C': [1, 10, 100, 1000]}],请查看这些示例更多详情 Concatenating multiple feature extraction methods, Pipelining: chaining a PCA and a logistic regression

不管怎样,看完这篇文章,它可能会对你有所帮助GridSearchCV