美文网首页
scikit-learn 多分类混淆矩阵

scikit-learn 多分类混淆矩阵

作者: 何物昂 | 来源:发表于2019-06-01 12:37 被阅读0次

前面

sklearn.metrics.multilabel_confusion_matrixscikit-learn 0.21 新增的一个函数。看名字可知道是用来计算多标签的混淆矩阵的。不过也可以用它来计算多分类的混淆矩阵。MCM将多分类数据转化为2分类问题,采用one-vs-rest策略,即某一类为正样本,其余类别为负样本。每一类都作为正样本,计算混淆矩阵。按标签的顺序返回所有。
MCM 返回的每一个二分类混淆矩阵中,TN 在 [0, 0] ,FN 在 [1, 0] 是 , TP 在[1,1], FP 在 [0, 1] , 即

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))

这里有几个常用的评估指标:

  1. 敏感性(sensitivity)也叫召回率(recall),也叫查全率。这个指标是看一下正样本中预测对的占总正样本的比例。也可以说成预测器对正样本的敏感性,越大,说明预测器对正样本越敏感。
    sn=\frac{tp}{tp+fn}
  2. 特异性(specificity)这个和敏感性相反,敏感性算正样本的,而特异性算的是负样本的。换句话说,它是指负样本的敏感性。毕竟你的预测器,不能仅仅是对正样本敏感,负样本,就随意了。所以需要评估一下预测器对负样本的敏感性。
    sp=\frac{tn}{tn+fp}
  3. 查准率(precision), 这是看你预测为正样本中预测正确的占总的预测为正样本的比例。
    precision=\frac{tp}{tp+fp}
  4. f1值,一般而言,查全率和查准率是不能同时都很大的。举个例子:你现在有100个A和100个B,你用现在训练好的模型去预测A,预测到有80个A。但是这其中75个是正确的A。也就是说查准率是75/80=0.9375%,查全率是75/100=0.75。你觉得查全率太低,你继续改进模型。又进行了一次预测,这次预测到了95个A。其中预测正确的有85个,即查全率:85/100=0.85,增加了0.1,但是查准率:85/95=0.895下降了。你想查得越多,就更容易产生误差。为了照顾两头,使得两个指标都有不错得值,就有了f1值:
    F1 = \frac{2 * (precision * recall)}{ (precision + recall)}

很容易通过代码获得多分类中每一类的评价指标值:

>>> sn = tp / (tp + fn) ## 其它同理
>>> sn
 array([1.        , 0.        , 0.66666667])x xz

利用one-vs-rest将多分类转化为二分类问题时,往往会丢失一些信息。在负样本中有多个类别,但不管在负样本中否预测到其本身的标签,只要不是预测为正样本标签就是正确的。所以不能很好的评价rest里的预测效果。想要更好的评价多分类,应考虑下宏平均或者微平均。

参考

sklearn.metrics.multilabel_confusion_matrix

公众号文章:scikit-learn 多分类混淆矩阵

相关文章

  • scikit-learn 多分类混淆矩阵

    前面 sklearn.metrics.multilabel_confusion_matrix 是 scikit-l...

  • 2018-04-21FCN结果分析

    一、混淆矩阵confusion matrix 1,混淆矩阵 2,分类器评估方法:准确率和混淆矩阵*** 使用混淆矩...

  • 在图像分类中如何使用一行代码提升逼格

    其实混淆矩阵图在python的数据分析、机器学习中常用的scikit-learn库中就已经封装了制作混淆矩阵图的功...

  • 评价-分类算法的评价指标

    二元分类评价 混淆矩阵 对于二元分类,通常可以输出混淆矩阵,看预测的情况,并从中总结出一些指标,给予评价。混淆矩阵...

  • 混淆矩阵与精确率

    机器学习中,常使用混淆矩阵来对分类模型的效果进行衡量,本文主要讲述一下标准的二分类混淆矩阵与多分类混淆矩阵、准确率...

  • 混淆矩阵

    摘要:不用千字,带您透析混淆矩阵。 混淆矩阵(confusion matrix)衡量的是一个分类器分类的准确程度。...

  • 混淆矩阵confusion_matrix函数

    1.混淆矩阵 混淆矩阵是机器学习中总结分类模型预测结果的情形分析表,以矩阵形式将数据集中的记录按照真实的类别与分类...

  • 分类评价指标

    1. 混淆矩阵(Confusion matrix) 定义: 混淆矩阵是数据科学、数据分析和机器学习中分类模型预测结...

  • 数据可视化-混淆矩阵(confusion matrix)

    1. 混淆矩阵(confusion matrix)介绍 在基于深度学习的分类识别领域中,经常采用统计学中的混淆矩阵...

  • 不平衡类问题-分类的评估指标

    分类指标 1.混淆矩阵 混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。 具体评价...

网友评论

      本文标题:scikit-learn 多分类混淆矩阵

      本文链接:https://www.haomeiwen.com/subject/vonvtctx.html