You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:39:24