更新
:理想情况下,不应使用以下答案,因为它会导致数据泄漏,如注释中所述。在此答案中,
GridSearchCV将对已经由预处理的数据上的超参数进行调整
StandardScaler,这是不正确的。在大多数情况下,这无关紧要,但是对缩放过于敏感的算法将给出错误的结果。
本质上,GridSearchCV还是一个估计器,实现管道使用的fit()和predict()方法。
所以代替:
grid = GridSearchCV(make_pipeline(StandardScaler(), LogisticRegression()), param_grid={'logisticregression__C': [0.1, 10.]}, cv=2, refit=False)做这个:
clf = make_pipeline(StandardScaler(), GridSearchCV(LogisticRegression(),param_grid={'logisticregression__C': [0.1, 10.]},cv=2,refit=True))clf.fit()clf.predict()它将要做的是,仅一次调用StandardScalar(),一次调用,
clf.fit()而不是您所描述的多次调用。
编辑:
True当在管道内使用GridSearchCV时,将refit更改为。如文档中所述:
refit:boolean,default = True用整个数据集重新拟合最佳估计量。如果为“
False”,则拟合后将无法使用此GridSearchCV实例进行预测。
如果refit =
False,
clf.fit()将不起作用,因为管道内部的GridSearchCV对象将在之后重新初始化
fit()。到时
refit=True,将对GridSearchCV重新拟合传入的整个数据的最佳评分参数组合
fit()。
因此,如果要建立管道,仅查看网格搜索的分数,则只有
refit=False合适。如果要调用该
clf.predict()方法,则
refit=True必须使用,否则将引发“未拟合”错误。



