【发布时间】:2020-10-01 12:39:05
【问题描述】:
我正在努力完成一个机器学习项目,我正在尝试将其结合起来:
- sklearn 列变换,可将不同的变换器应用于我的数值和分类特征
- 应用我的不同转换器和估算器的管道
-
GridSearchCV搜索最佳参数。
只要我在管道中手动填写不同转换器的参数,代码就可以完美运行。 但是,一旦我尝试传递不同值的列表以在我的网格搜索参数中进行比较,我就会收到各种无效参数错误消息。
这是我的代码:
首先我将我的特征分为数值型和分类型
from sklearn.compose import make_column_selector
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.impute import KNNImputer
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
numerical_features=make_column_selector(dtype_include=np.number)
cat_features=make_column_selector(dtype_exclude=np.number)
然后我为数值和分类特征创建了 2 个不同的预处理管道:
numerical_pipeline= make_pipeline(KNNImputer())
cat_pipeline=make_pipeline(SimpleImputer(strategy='most_frequent'),OneHotEncoder(handle_unknown='ignore'))
我将两者合并到另一个管道中,设置我的参数,然后运行我的GridSearchCV 代码
model=make_pipeline(preprocessor, LinearRegression() )
params={
'columntransformer__numerical_pipeline__knnimputer__n_neighbors':[1,2,3,4,5,6,7]
}
grid=GridSearchCV(model, param_grid=params,scoring = 'r2',cv=10)
cv = KFold(n_splits=5)
all_accuracies = cross_val_score(grid, X, y, cv=cv,scoring='r2')
我尝试了不同的方法来声明参数,但从未找到合适的方法。我总是收到“无效参数”错误消息。
您能帮我了解一下出了什么问题吗?
非常感谢您的支持,请保重!
【问题讨论】:
-
您省略了
preprocessor的定义。试试grid.get_params()。
标签: scikit-learn pipeline gridsearchcv