python 制表混淆矩阵
python tabulating confusion matrix
在我的 sklearn 逻辑回归模型中,我使用 metrics.confusion_matrix
命令获得了一个混淆矩阵。数组看起来像这样
array([[51, 0],
[26, 0]])
忽略模型表现非常糟糕的事实,我试图了解以漂亮的方式将此矩阵制成表格的最佳方法是什么
我正在尝试使用 tabulate package,这段代码对我部分有效
print tabulate(cm,headers=['Pred True', 'Pred False'])
因为它给出输出
Pred True Pred False
----------- ------------
51 0
26 0
编辑
为了插入行名称,我意识到插入元素而不是 zip 会有所帮助
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'])
因为它给
Real/Pred Pred True Pred False
----------- ----------- ------------
Real True 51 0
Real False 26 0
但是,还是想知道有没有更快的或者替代的美化混淆矩阵的方法。 (我在网上找到了一些绘图示例,但我不需要)
谢谢,
您是否考虑过创建一个图形而不是 table?从 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'])
nltk
库包含一个混淆矩阵,它易于使用并产生比 scikit-learn 更好的输出:
from nltk import ConfusionMatrix
print(ConfusionMatrix(list(y_true_values), list(y_predicted_values)))
您可以查看输出示例 here。请注意,我将 y_true_values
和 y_predicted_values
包装在 list()
函数中,因为 ConfusionMatrix
需要 Python 列表而不是 scikit-learn 输出的 NumPy 数组。
或者,mlxtend
库包含绘制混淆矩阵的函数,记录在案 here。
在我的 sklearn 逻辑回归模型中,我使用 metrics.confusion_matrix
命令获得了一个混淆矩阵。数组看起来像这样
array([[51, 0],
[26, 0]])
忽略模型表现非常糟糕的事实,我试图了解以漂亮的方式将此矩阵制成表格的最佳方法是什么
我正在尝试使用 tabulate package,这段代码对我部分有效
print tabulate(cm,headers=['Pred True', 'Pred False'])
因为它给出输出
Pred True Pred False
----------- ------------
51 0
26 0
编辑
为了插入行名称,我意识到插入元素而不是 zip 会有所帮助
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'])
因为它给
Real/Pred Pred True Pred False
----------- ----------- ------------
Real True 51 0
Real False 26 0
但是,还是想知道有没有更快的或者替代的美化混淆矩阵的方法。 (我在网上找到了一些绘图示例,但我不需要)
谢谢,
您是否考虑过创建一个图形而不是 table?从 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'])
nltk
库包含一个混淆矩阵,它易于使用并产生比 scikit-learn 更好的输出:
from nltk import ConfusionMatrix
print(ConfusionMatrix(list(y_true_values), list(y_predicted_values)))
您可以查看输出示例 here。请注意,我将 y_true_values
和 y_predicted_values
包装在 list()
函数中,因为 ConfusionMatrix
需要 Python 列表而不是 scikit-learn 输出的 NumPy 数组。
或者,mlxtend
库包含绘制混淆矩阵的函数,记录在案 here。