我正在尝试使用 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()`
如何解决?
我同意错误消息不清楚,但由于
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]
}
]