ValueError: Classification metrics can‘t handle a mix of continuous-multioutput and multiclass targe

Posted cx元

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ValueError: Classification metrics can‘t handle a mix of continuous-multioutput and multiclass targe相关的知识,希望对你有一定的参考价值。

1.问题描述:

使用scikit-learn的accuracy_score方法对logicRegression三分类模型预测准确率进行评估时报错:
ValueError: Classification metrics can't handle a mix of continuous-multioutput and multiclass targets
如图:

代码部分如下:

from sklearn.metrics import accuracy_score, recall_score
...
pred_test = log_model.predict(X_test)
# 下面是报错行
acu_test = accuracy_score(y_test, pred_test)  # 准确率
...

2.思考过程:

报错大致是说分类度量不能处理混合了连续多输出和多分类的目标。
我用的的确是三分类,但是其他模型也调用的这个评估方法,并没有报错,想来应该是和模型有关,查了一下果然是模型的问题。参考stackoverflow
stackoverflow一个回答解释了这个问题:

也就是说Accuracy是一个分类问题的度量方法,不能用于回归模型。
查看scikit-learn关于不同模型的评估应该调用的方法scikit-learn对不同metrics的评估方法描述可以看出对于Regression没有accuracy方法。

3.瞎胡分析

盲猜之所以Regression不能用Classification的评估方法的原因是,两种模型得到的预测结果数据类型不一样。对于分类模型来说,预测结果是标签中给定的离散值,一般来说是整数;而回归模型的预测结果一般是连续值,两者数据类型不同。

4.解决方法

scikit-learn给出的用于回归的这些方法都不符合我的要求,所以干脆采用metrics包里另外一个更便捷的:

from sklearn.metrics import classification_report
...
pred_test = log_model.predict(X_test)
print(classification_report(y_test,pred_test))
...

运行结果:report非常详细(我知道我的模型准确率很低啦啊啊啊啊),而且不管是分类还是回归都可以调用这个方法。

ValueError(“找到数量不一致的输入变量” ValueError:找到样本数量不一致的输入变量:[10725, 3575]

【中文标题】ValueError(“找到数量不一致的输入变量” ValueError:找到样本数量不一致的输入变量:[10725, 3575]【英文标题】:ValueError("Found input variables with inconsistent numbers of" ValueError: Found input variables with inconsistent numbers of samples: [10725, 3575] 【发布时间】:2021-02-17 02:23:03 【问题描述】:

我已经被这个错误困扰了很长一段时间。每当我运行此代码时,都会出现以下错误:

raise ValueError("Found input variables with inconsistent numbers of "ValueError: Found input variables with inconsistent numbers of samples: [10725, 3575]

这是我的代码 sn-p:

n_classes = len(classes)

X_train, X_test, y_train, y_test = train_test_split(X, Y, random_state=0, test_size = 0.75)

X_train_scale = X_train/255.0
X_test_scale = X_test/255.0

【问题讨论】:

【参考方案1】:

您收到此错误是因为 train_test_split 要求 X 和 Y 必须具有相同的长度,而这里的情况并非如此。事实上:X.shape[0] == 10725Y.shape[0] == 3575

要解决这个问题,你必须重塑你的 X。这是我的建议:X.reshape(Y.shape[0], -1)

【讨论】:

以上是关于ValueError: Classification metrics can‘t handle a mix of continuous-multioutput and multiclass targe的主要内容,如果未能解决你的问题,请参考以下文章

ValueError: '对象对于所需数组来说太深'

ValueError:不支持多类格式

如何解决 raise ValueError("columns must have matching element counts") ValueError: columns mus

“ValueError:标签 ['timestamp'] 不包含在轴中”错误

ValueError:不支持连续[重复]

django:ValueError - 无法序列化