当前位置: 首页 > 知识库问答 >
问题:

混淆矩阵错误:实际值和预测值之间的数据类型不匹配

解修然
2023-03-14

原始数据集如上图所示。CO(ppm)是因变量。

model = Sequential()
#First Hidden Layer
model.add(Dense(64, activation='relu', kernel_initializer='random_normal', input_dim=19))
#Second  Hidden Layer
model.add(Dense(4, activation='relu', kernel_initializer='random_normal'))
#model.add(Dropout(0.3))
#Output Layer
model.add(Dense(1, activation='sigmoid', kernel_initializer='random_normal'))

对于上面显示的二进制分类问题,我试图获得混淆矩阵。我有由y_pred和y_test生成的数组,数据类型不匹配,因为y_pred输出的值范围为0到1(sigmoid激活函数),而y_test的数组仅由0和1组成。

如果有人能帮我找到一种绘制混淆矩阵的方法,我将不胜感激。

非常感谢。

共有1个答案

段干飞翔
2023-03-14

假设任何预测类大于或等于0.5,并且假设最终激活映射了0和1之间的任何非包容性值,则可以执行以下操作:

y_pred = np.where(y_pred >= 0.5, 1, 0)

任何大于等于0.5的值都将映射为1,否则为0。之后,您可以使用sklearn的混淆矩阵方法获得混淆矩阵:

sklearn.metrics.confusion_matrix(y_true, y_pred)

例子:

y_true = np.array([1, 0, 0, 1, 1, 1, 0, 0])

y_pred = np.array([0.8, 0.1, 0.4, 0.6, 0.9, 0.69, 0.46, 0.21])
y_pred = np.where(y_pred >= 0.5, 1, 0)

sklearn.metrics.confusion_matrix(y_true, y_pred)

输出:

array([[4, 0],
       [0, 4]])
 类似资料:
  • 我对数据挖掘并不陌生,所以我完全被WEKA结果难倒了。希望得到一些帮助。提前谢谢! 我有一个具有二分类(S, H)的数值向量数据集。我在省略交叉验证中训练了一个朴素贝叶斯模型(尽管方法真的无关紧要)。结果如下: 如您所见,输出和混淆矩阵都有三个错误。然后,我使用具有相同属性和相同两个类的独立数据集重新评估模型。结果如下: 这就是我的问题所在。输出清楚地显示有很多错误。事实上,有44个。另一方面,混

  • 所有规则中不正确分类(见树)的总和是2097(来自895 700 428 74)。但是混淆矩阵是2121(来自1999 122)。有人能解释一下差异吗?为什么数字不同?

  • 这是我运行程序时收到的错误: 注:[19533]是我使用的一个测试值。 这是在CustomerServiceBeanImpl.java中出现错误的方法: 在快速检查ERD时,“Customer”表中的“id”列的数据类型为bigint。然而,我不确定这是否重要。(顺便提一下PostgreSQL数据库。) 如何修复此错误?

  • 我正在y_test并y_pred混淆矩阵。我的数据用于多标签分类,因此行值是一种热编码。 我的数据有30个标签,但在输入混淆矩阵后,输出只有11行和列,这让我很困惑。我想我应该有一辆30X30的。 它们的格式是numpy数组。(y\u test和y\u pred是我使用dataframe.values将其转换为numpy数组的数据帧) y\U测试。形状 y_test y\u预测。形状 y\u预测

  • 我使用混淆矩阵模块将类预测结果与实际值进行比较。 我得到了这个错误: 回溯(最后一次调用):文件“vis.py”,第757行,在cnf_矩阵=混乱矩阵(y_test,y_pred)文件“C:\Anaconda\envs\nn35\lib\site packages\sklearn\metrics\classification.py”第240行,混乱矩阵y_type,y_true,y_pred=_c