1.混淆矩阵confusion_matrix
适用于二分类、多分类。
每一行之和表示该类别的真实样本数量,每一列之和表示被预测为该类别的样本数量。
1.分类模型之混淆矩阵:
每一行和每一列分别对应样本输出中的每一个类别,行表示实际类别,列表示预测类别。
A类别 B类别 C类别
A类别 5 0 0
B类别 0 6 0
C类别 0 0 7
查准率 = 主对角线上的值 / 该值所在列的和
召回率 = 主对角线上的值 / 该值所在行的和
获取模型分类结果的混淆矩阵的相关API:
import sklearn.metrics as sm
sm.confusion_matrix(实际输出, 预测输出)->混淆矩阵
例子如下,从下面矩阵中,我们能看出来,预测错误分到的类别,看看哪些类别更容易混淆,例子中的第四类,有122个预测为了第三类,说明跟第四类跟第三类容易混淆,仔细看了下文本内容,二者确实难舍难分。
import sklearn.metrics as sm
matrixes = sm.confusion_matrix(labels, predicts)
print(matrixes)
输出:
[[ 71 1 2 0]
[ 7 203 10 0]
[ 2 32 139 1]
[ 32 88 122 40]]
import matplotlib.pyplot as mp
mp.figure('Confusion Matrix')
mp.xticks([])
mp.yticks([])
mp.imshow(matrixes, cmap='gray')
mp.show()
画图如下,颜色越深,说明分错的越少。
2.multilabel_confusion_matrix
只用于多分类。
sklearn.metrics.multilabel_confusion_matrix
是 scikit-learn 0.21 新增的一个函数。看名字可知道是用来计算多标签的混淆矩阵的。不过也可以用它来计算多分类的混淆矩阵。MCM将多分类数据转化为2分类问题,采用one-vs-rest策略,即某一类为正样本,其余类别为负样本。每一类都作为正样本,计算混淆矩阵。按标签的顺序返回所有。MCM 返回的每一个二分类混淆矩阵中,TN 在 [0, 0] ,FN 在 [1, 0] 是 , TP 在[1,1], FP 在 [1, 0] , 即
TN | FP |
---|---|
FN | TP |
例子如下,这个例子严格按照上面表格中TN、FP、FN、TP来统计结果,看不出来某一类错分到了哪一类。数据解读:第一个类别的数据:TN=635 FP=41
FN=3 TP=71。
from sklearn import metrics
mcm = metrics.multilabel_confusion_matrix(labels, predicts)
print(mcm)
输出:
[[[635 41]
[ 3 71]]
[[409 121]
[ 17 203]]
[[442 134]
[ 35 139]]
[[467 1]
[242 40]]]
参考: