我是scikit的新手,在结合数据规模和网格搜索方面有两个小问题。
- 高效缩放器
考虑到使用Kfolds的交叉验证,我希望每次我们在K-1折叠上训练模型时,数据缩放器(例如使用预处理.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)
- 取回内部缩放器配件
当重新装配=True时,"在"网格搜索之后,模型将在整个数据集上重新装配(使用最佳估计器),我的理解是管道将再次使用,因此缩放器将适合整个数据集。理想情况下,我希望重用这种适合度来扩展我的"测试"数据集。有没有一种方法可以直接从GridSearchCV中检索它?
- GridSearchCV对Pipeline对象一无所知;它假设所提供的估计器是原子的,因为它不能只选择某个特定的阶段(例如StandartScaler)并在不同的数据上拟合不同的阶段。所有GridSearchCV都在提供的估计器上调用fit(X,y)方法,其中X,y-一些数据分割。因此,它适用于相同拆分的所有阶段
-
试试这个:
best_pipeline = my_grid_search.best_estimator_ best_scaler = best_pipeline["standartscaler"]
-
如果您将转换器/估计器封装到Pipeline中,则必须为每个参数的名称添加前缀,例如:
tuned_parameters = [{'svc__C': [1, 10, 100, 1000]}]
,请查看这些示例以了解更多详细信息连接多个特征提取方法,Pipelining:链接PCA和逻辑回归
无论如何,阅读本文,它可能会帮助您GridSearchCV