精度分数错误:分类指标无法处理多类和连续目标的混合[重复]

Posted

技术标签:

【中文标题】精度分数错误:分类指标无法处理多类和连续目标的混合[重复]【英文标题】:Precision score error: Classification metrics can't handle a mix of multiclass and continuous targets [duplicate] 【发布时间】:2022-01-24 04:13:47 【问题描述】:

我正在尝试使用超参数调整来优化某个性能指标的分类模型。在我尝试专门针对precision_score 指标调整我的模型之前,我没有收到上述错误;当我只是将我的模型用作正常预测器时,一切都运行得非常顺利,即使我添加了超参数调整也很好。只有当我尝试将其优化到某个指标时,它才会引发此错误。这是相关代码:

scorers = 
    
    'precision_score': make_scorer(precision_score),
    'recall_score': make_scorer(recall_score),
    'accuracy_score': make_scorer(accuracy_score)

rf = RandomForestRegressor()
cv=KFold(n_splits=5,random_state=1,shuffle=False)
rf_rsearch = RandomizedSearchCV(estimator = rf, param_distributions = random_hypparams, scoring=scorers,refit='precision_score', return_train_score=True, n_iter = 50, cv = cv , verbose=2, n_jobs = -1)
rf_rsearch.fit(OS_x, OS_y)

在这段代码中:

random_hyperparams:只是一个随机超参数网格,用于测试以找到最佳集合。 OS_x, OS_y 是使用 SMC 过采样的 x 和 y 训练集,具有各自的形状:(1290, 33) (1290,)

错误似乎发生在显示的代码块的最后一行。

【问题讨论】:

所有这3个分数只对分类问题有意义,而您使用的是回归模型,它们没有意义。 @desertnaut 我在做一个分类问题。 那恐怕你用错了模型,显然是 regression 的;试试RandomForestClassifier @desertnaut 是的,我意识到这是一个愚蠢的错误,谢谢!我将其更改为分类器并将 make_precision 行更改为 scorer = make_scorer(precision_score, greater_is_better=True, average="weighted") 但现在我收到此错误:目标是多类但平均值 ='binary'。请选择另一个平均设置,[None, 'micro', 'macro', 'weighted'] 之一。我不知道我什么时候收到这个错误,因为我已经定义了平均值 请打开一个包含完整详细信息的新问题 【参考方案1】:

错误消息表明您使用的precision_score 不支持对您传递的输出/目标类型进行评分。此模型是否进行多类或连续预测?

如果这是一个多类预测器,您应该能够根据precision_score进行优化,但您需要通过传递“micro”、“macro”、“samples”或“weighted”之一来定义多类目标的平均值' 以precision_score 的平均参数为default='binary (see documentation)。接受this *** post 的答案应该可以帮助您使用 make_scorer 做到这一点。

如果您的模型进行连续预测,您将需要选择支持连续输出/目标评估的计分器。 scikit-learn documentation 中“回归”下的指标可能会有所帮助。

【讨论】:

以上是关于精度分数错误:分类指标无法处理多类和连续目标的混合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

错误:分类指标无法处理多类多输出和多标签指标目标的混合

如何处理 ValueError:分类指标无法处理多标签指标和多类目标错误的混合

Python Sklearn“ValueError:分类指标无法处理多类多输出和二进制目标的混合”错误

混淆矩阵值错误:分类指标无法处理二进制和连续目标的混合

Python / Scikit-Learn - 无法处理多类和连续的混合

ValueError:分类指标无法处理多标签指标和连续多输出目标的混合