使用KNN与随机森林构建集成模型时Pipeline参数错误的解决方法
问题解决:GridSearchCV参数命名错误修正
错误根源在于你定义网格搜索参数时,没正确匹配Pipeline中嵌套模型的层级结构。KNN和RandomForest是放在名为regressor的VotingClassifier步骤里的,所以参数名必须加上regressor__前缀,格式为regressor__子模型名__参数名。
修改后的完整代码
steps = [('scaler', StandardScaler()), ('regressor', VotingClassifier(estimators=[ ('knn', KNeighborsClassifier()), ('clf', RandomForestClassifier())]))] pipeline = Pipeline(steps) # 修正参数命名,添加regressor__前缀 parameters = [ {'regressor__knn__n_neighbors': np.arange(1, 50)}, { 'regressor__clf__n_estimators': [10, 20, 30], 'regressor__clf__criterion': ['gini', 'entropy'], 'regressor__clf__max_features': [5, 10, 15], 'regressor__clf__max_depth': ['auto', 'log2', 'sqrt', None] } ] X_train, X_test, y_train, y_test = train_test_split(X, y.values.ravel(), test_size=0.3, random_state=65) cv = GridSearchCV(pipeline, param_grid=parameters) cv.fit(X_train, y_train) y_pred = cv.predict(X_test)
核心说明
- 嵌套模型的参数必须遵循外层步骤名__子模型名__参数名的层级规则,Pipeline会通过这个路径定位到对应的子模型参数。
- 要是不确定参数的正确命名,可运行
print(pipeline.get_params().keys())查看所有可用参数列表,从中找到对应子模型的参数名。
内容的提问来源于stack exchange,提问作者Hamza Abbasi
相关产品推荐
相关产品推荐

