标签:$$ 分类 imp 混淆 计算 module cal -- 语法
注:有些markdown语法没渲染出来,可以简书查看:scikit-learn 多分类混淆矩阵
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 |
## 如果导入报错,检查一下 sk-learn version >= 0.21
>>> from sklearn.metrics import multilabel_confusion_matrix
>>> y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
>>> y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
>>> mcm = multilabel_confusion_matrix(y_true, y_pred,
... labels=["ant", "bird", "cat"])
>>> mcm
array([[[3, 1],
[0, 2]],
[[5, 0],
[1, 0]],
[[2, 1],
[1, 2]]])
以第一个类别 ‘ant’ 为例,预测对的有2个,它的负样本,‘bird‘ 和 ‘cat‘ 预测对的有3个(‘bird’ 预测成 ‘cat’, 也算对的,因为它们是一类,都是负样本。)负样本预测成正样本的有一个。
每一类的TP, FP等可以提取通过:
>>> tp = mcm[:, 1, 1]
>>> tn = mcm[:, 0, 0]
>>> fn = mcm[:, 1, 0]
>>> tp, tn
(array([2, 0, 2], dtype=int64), array([3, 5, 2], dtype=int64))
这里有几个常用的评估指标:
很容易通过代码获得多分类中每一类的评价指标值:
>>> sn = tp / (tp + fn) ## 其它同理
>>> sn
array([1. , 0. , 0.66666667])x xz
利用one-vs-rest将多分类转化为二分类问题时,往往会丢失一些信息。在负样本中有多个类别,但不管在负样本中否预测到其本身的标签,只要不是预测为正样本标签就是正确的。所以不能很好的评价rest里的预测效果。想要更好的评价多分类,应考虑下宏平均或者微平均。
参考
标签:$$ 分类 imp 混淆 计算 module cal -- 语法
原文地址:https://www.cnblogs.com/huanping/p/10959271.html