如何在Pipeline执行后获取clf.best_params_?解决属性错误问题
解决GridSearchCV无法获取best_params_的问题
你遇到的AttributeError原因很直接:你创建了GridSearchCV对象clf,但没有让它执行网格搜索流程,反而调用了原始pipe的fit方法。此时clf还是未训练的状态,自然不存在best_params_属性。
修正步骤
把代码里的:
pipe.fit(X_train,y_train) print(f'Best Parameters: {clf.best_params_}')
替换成:
clf.fit(X_train,y_train) print(f'Best Parameters: {clf.best_params_}')
额外说明
- 执行
clf.fit()后,除了best_params_,还可以获取其他有用属性:clf.best_score_:交叉验证得到的最优分数clf.best_estimator_:训练好的最优Pipeline模型,可以直接用它做预测,比如y_pred = clf.best_estimator_.predict(X_test)
- 另外你的代码开头漏了导入matplotlib,需要加上
import matplotlib.pyplot as plt,否则plt.subplots会报错。
完整修正后的关键代码片段
# ... 前面的数据生成、Pipeline和参数网格定义部分不变 ... clf = GridSearchCV(pipe, parameter_space, cv = 5, scoring = "accuracy", verbose = True) # 调用GridSearchCV的fit方法,而不是原始pipe的fit clf.fit(X_train,y_train) print(f'Best Parameters: {clf.best_params_}') # 可选:查看最优模型的预测准确率 y_pred = clf.predict(X_test) print(f'Test Accuracy: {accuracy_score(y_test, y_pred)}')
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

