调用ROCAUC时报RandomForestClassifier无target_type_属性如何解决
问题原因排查
- 第一个报错的核心原因是ROCAUC工具的调用逻辑不符合要求:你提前完成了随机森林模型的拟合,而ROCAUC需要在自身的
fit执行阶段,从训练标签中推断目标类型(二分类/多分类/多标签),并将对应标识写入模型的target_type_属性,提前拟合的模型缺失这个属性就会触发报错。 - 第二个报错是前一个问题的连锁反应:ROCAUC实例初始化过程中因为属性缺失没有完成实例构造,调试器尝试读取实例repr时就会抛出该错误。
解决方法
方案1(推荐,符合标准API规范)
调整代码执行顺序,不要提前拟合模型,由ROCAUC接管模型拟合流程:
from yellowbrick.classifier import ROCAUC from sklearn.ensemble import RandomForestClassifier # 仅实例化模型,不提前fit rf = RandomForestClassifier(**{"max_features": 0.4, "n_estimators":15,"min_samples_leaf": 0.1,"random_state":42}) # 实例化ROCAUC roc_viz = ROCAUC(rf) # 用ROCAUC的fit方法传入训练集,自动完成模型拟合和目标类型推断 roc_viz.fit(X_train, y_train) # 传入测试集打分 roc_viz.score(X_test, y_test) # 渲染ROC图 roc_viz.show()
方案2(兼容已拟合模型的临时方案)
如果必须使用已经提前拟合好的模型,可以手动给模型补充target_type_属性:
# 二分类场景加这一行 rf.target_type_ = "binary" # 如果是多分类场景,替换为 # rf.target_type_ = "multi" # 如果是多标签分类场景,替换为 # rf.target_type_ = "multilabel" roc_viz = ROCAUC(rf) roc_viz.score(X_test, y_test) roc_viz.show()
额外排查点
如果调整代码后仍有报错,检查依赖版本兼容性:要求scikit-learn >= 1.0,yellowbrick >= 1.5,可执行以下命令升级依赖:pip install -U scikit-learn yellowbrick
内容的提问来源于stack exchange,提问作者mab66
相关产品推荐
相关产品推荐

