是否可以使用带有sklearn的make_pipeline的gridsearchCV执行超参数调整

问题描述

当前,我可以通过使用make_column_transformermake_pipeline来构建模型,该模型类似于:

from sklearn.compose import make_column_transformer
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import OneHotEncoder
from sklearn.tree import DecisionTreeClassifier
from sklearn.pipeline import make_pipeline

[in]: dtc = DecisionTreeClassifier()

[in]: column_trans = make_column_transformer(
    (OneHotEncoder(handle_unkNown='ignore'),['var1','var2','var3','var4','var5','var6'
                                              ]),remainder='passthrough')

[in]: column_trans.fit_transform(X)

[in] pipe = make_pipeline(column_trans,dtc)

[in]: cross_val_score(pipe,X_train,y_train,cv=5,scoring='accuracy').mean()

[out]: ... prediction

我已经阅读了文档,似乎找不到任何有关将流程简化为gridsearchcv内容

解决方法

以下是scikit-learn上的示例,其中在管道中使用GridSearchCV:https://scikit-learn.org/stable/tutorial/statistical_inference/putting_together.html

您提到的make_pipeline方法是“管道构造函数的简写”(Reference),它仅返回管道对象。因此,最后,直接使用管道构造函数将得到相同的结果,并且您可以根据他们的示例来定位自己。

我假设您要在GridSearchCV方法调用之前执行cross_val_score(),以识别最佳参数。

因此,您可以将代码调整为与其相似:

search = GridSearchCV(pipe,your_param_grid)
search.fit(X_train,y_train)
print(search.best_params_)