【问题标题】:How to show precision in a confusion matrix如何在混淆矩阵中显示精度
【发布时间】:2019-09-28 19:01:46
【问题描述】:

我正在使用 scikit learn,我想以混淆矩阵的形式显示精度。所以我有这个混淆矩阵:

array([[1266,   45,    6],
       [  25, 1507,   19],
       [  36,   82,  858]], dtype=int64)

我应用了这段代码,来自另一篇文章:

cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]

输出是:

array([[0.96127563, 0.03416856, 0.00455581],
       [0.01611863, 0.97163121, 0.01225016],
       [0.03688525, 0.08401639, 0.87909836]])

但是,这是召回率,而不是精度。如何让它显示精度?

【问题讨论】:

    标签: machine-learning scikit-learn confusion-matrix precision-recall


    【解决方案1】:

    精确度的答案是

    import numpy as np
    precision = np.diag(cm) / np.sum(cm, axis = 0)
    

    精度为TP/(TP+FP),因此对角线值是真正的正数和列的总和。

    更新 1: 根据您的评论

    precision = []
    for x in np.nditer(cm):
        precision.append(x / np.sum(cm, axis = 0))
    

    【讨论】:

    • 不,我想采用归一化数据的矩阵形式,就像上面的召回矩阵一样
    • 它不起作用,它给了我一个很长的列表:[array([0.954, 0.775, 1.434]), array([0.034, 0.028, 0.051]), array([0.005, 0.004, 0.007 ]), 数组([0.019, 0.015, 0.028]), 数组([1.136, 0.922, 1.707]), 数组([0.014, 0.012, 0.022]), 数组([0.027, 0.022, 0.041]), 数组([ 0.062, 0.050, 0.093]), 数组([0.647, 0.525, 0.972])]
    • 我在您提供的示例矩阵上测试了代码,我得到了正确的输出。我不确定你那边出了什么问题。使用您输入我的代码的矩阵更新您的问题,以便我可以复制它。
    【解决方案2】:

    找到了,把axis=0改成axis=1就行了

    cm = cm.astype('float') / cm.sum(axis=0)[:, np.newaxis]
    

    好的,但是这段代码有问题,我有这个输出:

    array([[0.954, 0.034, 0.005],
           [0.015, 0.922, 0.012],
           [0.041, 0.093, 0.972]])
    

    当你对任何行求和时,它应该等于 1,但事实并非如此。

    已解决

    使用这个:

    C / C.astype(np.float).sum(axis=0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-20
      • 2017-04-05
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2012-11-12
      • 2014-02-08
      相关资源
      最近更新 更多