【问题标题】:Saving confusion matrix保存混淆矩阵
【发布时间】:2017-07-16 18:02:36
【问题描述】:

有没有可能保存sklearn.metrics生成的混淆矩阵?

我想将不同分类算法的多个结果保存在一个数组或一个 pandas 数据框中,以便我可以展示哪种算法效果最好。

print('Neural net: \n',confusion_matrix(Y_test, Y_pred), sep=' ')

如何将生成的混淆矩阵保存在循环中? (我正在训练一组 200 个不同的目标变量)

array[i] = confusion_matrix(Y_test,Y_pred) 

我在这里遇到了一些定义问题[数组未定义,而在非 [i] - 版本中它运行顺利]

此外,我正在规范化混淆矩阵。如何在整个循环之后打印出混淆矩阵的平均结果? (200 个不同混淆矩阵的平均值)

我对 python 还不是很流利。

【问题讨论】:

  • 你定义了array吗?在python中,您需要先定义一个列表,然后才能为其元素赋值。

标签: python pandas dataframe confusion-matrix


【解决方案1】:

首先遇到未定义数组的问题。 在python列表中声明为:

array=[]

由于声明时没有给出列表的大小,所以没有分配空间。因此我们不能为没有分配的地方赋值。

array[i]=some value, but no space is allocated for array

因此,如果您知道所需的数组大小,请在声明期间填充零并以这种方式使用数组或在循环中使用 array.append() 方法。

现在保存混淆矩阵: 由于混淆矩阵返回二维数组,需要保存多个这样的数组,所以使用3维数组来保存值。

import numpy as np
matrix_result=np.zeroes((200,len(y_pred),len(y_pred)))
for i in range(200):
    matrix_result[i]=confusion_matrix(X_pred,y_pred)

求平均

   matrix_result_average=matrix_result.mean(axis=0)

【讨论】:

  • 非常感谢您的回答。我已经尝试过了,因为我有一个二进制分类,所以我将 len(y_pred),len(y_pred) 设置为 2。我的混淆矩阵的维度是 2x2。我试图使问题非常小 3 次迭代并将第一个维度设置为 3。然而数组太小以至于无法保存第一次迭代的结果?打印时混淆矩阵的输出也以某种方式采用 [[fields]] 格式。任何想法我做错了什么?
  • 似乎与我的循环有关,即 for i in range(13,stop)。所以它会抛出一个 IndexError 异常,因为我的索引是 13,但矩阵的尺寸是 (3,2,2)。我以 15 为停止点,并认为这与尺寸相符。 ://
  • 在 range(3) 中使用 i,因为您将 3 作为第一维。混淆矩阵打印为 [[result]] 因为它是一维数组中的二维矩阵。
【解决方案2】:

我不确定您对一组目标变量进行训练是什么意思(请详细说明),但这里是使用 numpy 对混淆矩阵进行平均的开始。

首先创建一个空的结果矩阵,它是 3 维的,大小为 200 个堆叠混淆矩阵。然后在 for 循环中将它们一一填充。最后将得到的矩阵沿目标的维度进行平均,得到平均混淆矩阵。

import numpy as np

N = len(Y_pred)
result = np.zeros((len(targets), N, N))
for i, target in enumerate(targets):
    result[i] = confusion_matrix(Y_test, Y_pred) # do someting with target?
print(result.mean(axis=0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 2015-12-17
    • 2020-10-01
    • 2012-01-20
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多