You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sklearn生成含概率的混淆矩阵报错,求原因及解决方法

混淆矩阵报错原因及解决方案

问题场景

执行以下代码尝试生成包含概率的混淆矩阵:

y_pred_train = logistic.predict_proba(X_train)
confusion_matrix(y_train, y_pred_train)

触发错误:

ValueError: Classification metrics can't handle a mix of binary and continuous-multioutput targets

打印y_pred_train[:,1]得到:

array([0.20189988, 0.71620557, 0.69289002, ..., 0.05712549, 0.02956872,
   0.14208470])

尝试仅传入y_pred_train的第一列,仍然报错。

报错原因

  1. 输入类型不匹配:confusion_matrix要求输入离散的类别标签(比如二元分类中的0/1),但predict_proba返回的是每个样本属于各类别的连续概率值(0到1之间的浮点数),两者数据类型不符合函数要求,这是核心错误原因。
  2. 单列传入仍报错的原因:即使取y_pred_train[:,1],得到的依然是连续概率值,不是类别标签;若y_train是一维标签数组,传入的概率数组维度或类型不匹配也会触发错误,但核心还是连续值与离散标签的冲突。

解决方案

方案1:将概率转换为类别标签

通过设定阈值(默认常用0.5,可根据业务需求调整),把概率值转为对应的类别标签:

# 以0.5为阈值,将第二类的概率转为类别标签
y_pred_labels = (y_pred_train[:, 1] >= 0.5).astype(int)
# 生成混淆矩阵
confusion_matrix(y_train, y_pred_labels)

如果是多分类任务,可直接调用模型的predict方法获取类别标签:

y_pred_labels = logistic.predict(X_train)
confusion_matrix(y_train, y_pred_labels)

方案2:自定义概率维度的分析逻辑

若你确实需要分析概率与分类结果的关系,而非标准混淆矩阵,可以:

  • 将概率划分为多个区间(如0-0.2、0.2-0.4等),统计每个区间内真实标签的分布情况
  • 使用precision_recall_curve、roc_curve等工具,分析概率和分类性能的关联,替代混淆矩阵的使用。

内容的提问来源于stack exchange,提问作者CodeMaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:25:11