Python中的混淆矩阵
使用seaborn和matplotlib在Python中绘制漂亮的混淆矩阵(类似Matlab)
创建于2018年6月25日 14:17:37 作者:Wagner Cipriano - wagnerbhbr
此模块可以从NumPy矩阵或两个NumPy数组(y_test
和predictions
)生成漂亮的混淆矩阵打印结果。
安装
pip install pretty-confusion-matrix
快速开始
从DataFrame绘制:
import numpy as np
import pandas as pd
from pretty_confusion_matrix import pp_matrix
array = np.array([[13, 0, 1, 0, 2, 0],
[0, 50, 2, 0, 10, 0],
[0, 13, 16, 0, 0, 3],
[0, 0, 0, 13, 1, 0],
[0, 40, 0, 1, 15, 0],
[0, 0, 0, 0, 0, 20]])
# 获取pandas数据框
df_cm = pd.DataFrame(array, index=range(1, 7), columns=range(1, 7))
# 颜色映射:查看此处并选择你喜欢的
cmap = 'PuRd'
pp_matrix(df_cm, cmap=cmap)
从向量绘制
import numpy as np
from pretty_confusion_matrix import pp_matrix_from_data
y_test = np.array([1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2,
3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5])
predic = np.array([1, 2, 4, 3, 5, 1, 2, 4, 3, 5, 1, 2, 3, 4, 4, 1, 4, 3, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 3, 3, 5, 1, 2, 3, 3, 5, 1, 2,
3, 4, 4, 1, 2, 3, 4, 1, 1, 2, 3, 4, 1, 1, 2, 3, 4, 1, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5])
pp_matrix_from_data(y_test, predic)
在坐标轴中使用自定义标签
您可以自定义坐标轴中的标签,无论是通过数据框还是向量。
从数据框
要在坐标轴上使用文本标签而不是整数来绘制矩阵,请更改数据框的 index
和 columns
参数。
以上面的示例为例,只需将 df_cm = pd.DataFrame(array, index=range(1, 7), columns=range(1, 7))
这行改为:
col = ['狗', '猫', '老鼠', '狐狸', '鸟', '鸡']
df_cm = pd.DataFrame(array, index=col, columns=col)
这将把坐标轴上的整数标签(1...6)替换为 狗、猫、老鼠 等。
从向量
这种方法非常相似,在这种情况下,您只需要使用 columns
参数,如下例所示。
这个参数是一个位置数组,即顺序必须与数据表示相同。
在这个例子中,狗 将被分配给类别 0,猫 将被分配给类别 1,依此类推。
以上面的第二个示例为例,只需将 pp_matrix_from_data(y_test, predic)
这行改为:
columns = ['狗', '猫', '老鼠', '狐狸', '鸟']
pp_matrix_from_data(y_test, predic, columns)
这将把坐标轴上的"类别 A, ..., 类别 E"替换为 狗、猫、...、鸟。
有关"如何在 Python 中用字符串而不是整数绘制混淆矩阵"的更多信息,请参阅这个 Stack Overflow 回答。
选择颜色映射
您可以通过许多颜色选项(如 PuRd、Oranges 等)来选择矩阵的布局。 要自定义您的配色方案,请使用 pp_matrix 函数的 cmap 参数。 要查看所有可用的颜色映射,请执行以下操作:
from matplotlib import colormaps
list(colormaps)
有关 Matplotlib 中选择颜色映射的更多信息,请参阅此处。
参考文献:
1. MATLAB 混淆矩阵:
a) 绘制混淆矩阵
b) 使用分类标签绘制混淆矩阵
2. Python 示例和更多内容:
a) 如何在 Python 中用字符串而不是整数绘制混淆矩阵
d) Seaborn 热力图