超过 2 个分类器的管道

问题描述 投票:0回答:1

我正在尝试使用 Knn 和随机森林分类器构建一个集成。

steps = [('scaler', StandardScaler()),
     ('regressor', VotingClassifier(estimators=[
     ('knn', KNeighborsClassifier()), 
     ('clf', RandomForestClassifier())]))]
pipeline = Pipeline(steps)
parameters = [{'knn__n_neighbors': np.arange(1, 50)}, {
             'clf__n_estimators': [10, 20, 30],
             'clf__criterion': ['gini', 'entropy'],
             'clf__max_features': [5, 10, 15],
             '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)

我在运行上述代码时遇到以下错误:

Invalid parameter knn for estimator Pipeline(steps=[('scaler', StandardScaler()),
               ('regressor',VotingClassifier(estimators=[('knn', KNeighborsClassifier()),('clf', RandomForestClassifier())]))]). 
Check the list of available parameters with `estimator.get_params().keys()`

如何解决?

python-3.x scikit-learn random-forest knn scikit-learn-pipeline
1个回答
1
投票

我同意错误消息不清楚,但由于

knn
中的
VotingClassifier
估计器而引发错误。请检查
VotingClassifier
文档:

投票:str,{'hard','soft'},默认='hard' 如果“困难”,则使用预测的类标签进行多数规则投票。否则,如果为“软”,则根据预测概率之和的 argmax 来预测类标签,建议将其用于经过良好校准的分类器的集合。 (...)

属性:字典,默认=无 将每个估计器映射到要提取为预测器的属性列表的字典。

如果没有,则使用所有公共估计器属性。

具体来说,
KNeighborsClassifier
没有
predict_proba
方法,因此它不能与
soft
投票分类器一起使用。 如果您想将两个估计器保留在
VotingClassifier
中,则应该设置
voting='hard'

VotingClassifier(estimators=[('knn', KNeighborsClassifier()), ('clf', RandomForestClassifier())],voting='hard')

更新:- 2023年5月20日

steps = [('scaler', StandardScaler()),
         ('regressor', VotingClassifier(estimators=[
             ('knn', KNeighborsClassifier()), 
             ('clf', RandomForestClassifier())
         ]))
]

pipeline = Pipeline(steps)

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]
    }
]
© www.soinside.com 2019 - 2024. All rights reserved.