使用Voting Classifier集成KNN与决策树结合Pipeline的参数配置问题
问题根源
参数网格的命名规则错了。Pipeline里嵌套的分类器参数得按步骤层级指定:你的VotingClassifier是Pipeline中名为regressor的步骤,所以它内部的KNN和随机森林参数必须加上regressor__前缀,否则GridSearch找不到对应的参数项。
修正后的完整代码
import numpy as np from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.ensemble import VotingClassifier, RandomForestClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split, GridSearchCV # 步骤定义保留原逻辑 steps = [('scaler', StandardScaler()), ('regressor', VotingClassifier(estimators=[ ('knn', KNeighborsClassifier()), ('clf', RandomForestClassifier())],voting='soft'))] 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())
运行后会看到像regressor__knn__n_neighbors、regressor__clf__n_estimators这类完整参数名,照着用就行。
内容的提问来源于stack exchange,提问作者Hamza Abbasi
相关产品推荐
相关产品推荐

