python制表混淆矩阵

时间:2016-02-23 18:11:17

标签: python scikit-learn tabular confusion-matrix

在我的sklearn逻辑回归模型中,我使用[az,el] = view; scatter3(x,y,z); view(az,el); drawnow 命令获得了混淆矩阵。该数组看起来像这样

metrics.confusion_matrix

忽略模型做得很差的事实,我试图理解以漂亮方式制表这个矩阵的最佳方法是什么

我正在尝试使用tabulate package,此代码部分适用于我

array([[51,  0],
   [26,  0]])

因为它提供了输出

print tabulate(cm,headers=['Pred True', 'Pred False']) 

修改

要插入行名,我意识到插入元素而不是zip会有帮助

  Pred True    Pred False
-----------  ------------
     51             0
     26             0

给出

cm_list=cm.tolist()
cm_list[0].insert(0,'Real True')
cm_list[1].insert(0,'Real False')
print tabulate(cm_list,headers=['Real/Pred','Pred True', 'Pred False'])

然而,仍然想知道是否有更快或更替的美化混淆矩阵的方法。 (我在网上找到了一些绘图示例,但我不需要)

谢谢,

2 个答案:

答案 0 :(得分:4)

您是否考虑过创建数字而不是表格?调整scikit-learn example中的一些代码,你可以得到一个体面的图形,显示你想要的东西。

import numpy as np
from matplotlib import pyplot as plt

def plot_confusion_matrix(cm, target_names, title='Confusion matrix', cmap=plt.cm.Blues):
    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(target_names))
    plt.xticks(tick_marks, target_names, rotation=45)
    plt.yticks(tick_marks, target_names)
    plt.tight_layout()

    width, height = cm.shape

    for x in xrange(width):
        for y in xrange(height):
            plt.annotate(str(cm[x][y]), xy=(y, x), 
                        horizontalalignment='center',
                        verticalalignment='center')
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

cm = np.array([[13,  0,  0],[ 0, 10,  6],[ 0,  0,  9]])
plot_confusion_matrix(cm, ['A', 'B', 'C'])

matplotlib confusion matrix plot

答案 1 :(得分:2)

nltk库包含一个易于使用的混淆矩阵,并产生比scikit-learn更好的输出:

from nltk import ConfusionMatrix
print(ConfusionMatrix(list(y_true_values), list(y_predicted_values)))

您可以看到输出here的示例。请注意,我在y_true_values函数中包含了y_predicted_valueslist(),因为ConfusionMatrix需要Python列表而不是scikit-learn输出的NumPy数组。

或者,mlxtend库包含绘制混淆矩阵的函数,记录为here