精华内容
下载资源
问答
  • 分类混淆矩阵TPTNFN

    2021-04-08 15:42:41
    本来是想找一下多分类混淆矩阵说明 但是发现网上的都是二分类,下面这种 二分类的图转自博主,下面放上链接 https://blog.csdn.net/wf592523813/article/details/95202448 用自己的理解画了个多分类混淆矩阵的...

    本来是想找一下多分类的混淆矩阵说明
    但是发现网上的都是二分类,下面这种
    图转自博主
    二分类的图转自博主,下面放上链接
    https://blog.csdn.net/wf592523813/article/details/95202448
    用自己的理解画了个多分类的混淆矩阵的表不知道对不对
    和大家分享一下
    在这里插入图片描述
    后来问了一下明白人,发现我这个不对TN不是这样归类的
    因为如果按我这个来的话每一类分别算的准确率Acc都是一样的
    应该是这样,为了简单举例
    下面这个图是相对于B类而言的在这里插入图片描述

    展开全文
  • 混淆矩阵(confusion matrix)是一种常用的分类模型评估指标,经可视化的混淆矩阵可以帮助我们直观地了解到模型对各类样本地分类情况。 对于一个分类模型来说,每一个样本均有两种属性,真实标签...


    如果不想看前面的介绍可以直接点击目录转到“代码实现”与“参数讲解”部分

    混淆矩阵简介

    混淆矩阵(confusion matrix)是一种常用的分类模型评估指标,经可视化的混淆矩阵可以帮助我们直观地了解到模型对各类样本地分类情况。

    对于一个分类模型来说,每一个样本均有两种属性,真实标签与预测标签,记为 y r e a l , y p r e d i c t y_{real}, y_{predict} yreal,ypredict。由此出发我们可以定义混淆矩阵:
    对于 n n n分类模型,混淆矩阵为一 n × n n\times n n×n阶方阵:
    M c = [ m i , j ] n × n M_c=[m_{i,j}]_{n\times n} Mc=[mi,j]n×n
    其第 i i i行第 j j j列元素定义为:
    m i , j = n y r e a l = i , y p r e d i c t = j n y r e a l = i m_{i, j}=\frac{n_{y_{real=i}, y_{predict=j}}} {n_{y_{real=i}}} mi,j=nyreal=inyreal=i,ypredict=j
    即混淆矩阵的第 i i i行第 j j j列为真实标签为 i i i的样本被预测为 j j j类的比例。

    基于python matplotlib/sklearn库的混淆矩阵代码实现

    由于并没有找到现成的绘制混淆矩阵的函数,因此基于matplotlibsklearn库的相关函数自己编写实现混淆矩阵的绘制

    效果示例

    利用39节点电网仿真数据进行,数据共包含5000个样本,每个样本分为不稳定、稳定、潮流不收敛三类,在数据集中分别用0, 1, 2表示。选取支持向量机作为分类模型。
    利用4000个样本组成训练集训练模型,再利用1000个样本组成的测试机对模型性能进行测试,并利用plot_matrix(y_true, y_pred, labels_name)函数将结果绘制为混淆矩阵。
    示例代码如下:

    # 读取数据并划分训练集与测试集
    test_features, test_labels = read_data(ADDRESS)
    feature_train, feature_test, label_train, label_test = train_test_split(test_features, test_labels,
                                                                            test_size=0.2, random_state=0)
    # 利用训练集训练支持向量机模型
    svc = SVC(kernel='rbf')
    svc.fit(feature_train, label_train)
    # 利用训练好的模型对测试集进行分类
    label_test_svc = svc.predict(feature_test)
    
    # 根据真实标签与预测标签绘制混淆矩阵
    plot_matrix(label_test, label_test_svc, [0, 1, 2], title='confusion_matrix_svc',
                axis_labels=['unstable', 'stable', 'non-convergence'])
    

    最终结果如下所示:
    混淆矩阵

    代码实现

    plot_matrix(y_true, y_pred, labels_name)函数如下所示:

    import matplotlib.pyplot as pl
    from sklearn import metrics
    # 相关库
    
    def plot_matrix(y_true, y_pred, labels_name, title=None, thresh=0.8, axis_labels=None):
    # 利用sklearn中的函数生成混淆矩阵并归一化
        cm = metrics.confusion_matrix(y_true, y_pred, labels=labels_name, sample_weight=None)  # 生成混淆矩阵 
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]  # 归一化
    
    # 画图,如果希望改变颜色风格,可以改变此部分的cmap=pl.get_cmap('Blues')处
        pl.imshow(cm, interpolation='nearest', cmap=pl.get_cmap('Blues'))
        pl.colorbar()  # 绘制图例
    
    # 图像标题
        if title is not None:
            pl.title(title)
    # 绘制坐标
        num_local = np.array(range(len(labels_name)))
        if axis_labels is None:
            axis_labels = labels_name
        pl.xticks(num_local, axis_labels, rotation=45)  # 将标签印在x轴坐标上, 并倾斜45度
        pl.yticks(num_local, axis_labels)  # 将标签印在y轴坐标上
        pl.ylabel('True label')
        pl.xlabel('Predicted label')
    
    # 将百分比打印在相应的格子内,大于thresh的用白字,小于的用黑字
        for i in range(np.shape(cm)[0]):
            for j in range(np.shape(cm)[1]):
                if int(cm[i][j] * 100 + 0.5) > 0:
                    pl.text(j, i, format(int(cm[i][j] * 100 + 0.5), 'd') + '%',
                            ha="center", va="center",
                            color="white" if cm[i][j] > thresh else "black")  # 如果要更改颜色风格,需要同时更改此行
    # 显示
        pl.show()
    

    参数讲解

    plot_matrix函数参数包括:
    y_true样本的真实标签,为一向量
    y_pred样本的预测标签,为一向量,与真实标签长度相等
    labels_name样本在数据集中的标签名,如在示例中,样本的标签用0, 1, 2表示,则此处应为[0, 1, 2]

    title=None图片的标题
    thresh=0.8临界值,大于此值则图片上相应位置百分比为白色
    axis_labels=None最终图片中显示的标签名,如在示例中,样本标签用0, 1, 2表示分别表示失稳、稳定与潮流不收敛,我们最终图片中显示后者而非前者,则可令此参数为[‘unstable’, ‘stable’, ‘non-convergence’]

    展开全文
  • 借用其它博客的一张例子示意图,该图为一个三分类问题的混淆矩阵,对角线的值表示分类器对该类别预测正确的个数,每一列纵轴表示这个类别真实的样本数,例如从第一列可以得知猫一共有10+3+5=18只,因此总样本数为三...

    借用其它博客的一张例子示意图,该图为一个三分类问题的混淆矩阵,对角线的值表示分类器对该类别预测正确的个数,每一列纵轴表示这个类别真实的样本数,例如从第一列可以得知猫一共有10+3+5=18只,因此总样本数为三列之和,即66。

    在这里插入图片描述
    下面以猫为例,介绍从混淆矩阵中计算TP、TN、FP、FN。

    TP(True Positive)FN(False Negative):从第一列可知,猫一共有18只,其中只有10个被分类器正确预测,而有3只被预测成狗,5只被预测成猪,因此对猫这个类别来说,TP=10(正确预测成猫的样本数)FN=8(被预测成其它类别的样本数)

    FP(False Positive):从第一行可以得知分类器一共将10+1+2=13个样本预测成猫,其中正确的只有10个,错误的有3个,因此FP=3(被错误预测成猫的样本数)

    TN(True Negative)TN表示分类器正确将不是猫的样本预测为其它类别的样本数,从第一行可知分类器将13个样本预测为猫,因此它将66-13=53个样本预测成了其它类别,而从第一列可知有8个样本本来是猫却被错误预测为其它类别(即FN),因此正确将不是猫的样本分成其它类别的有53-8=45个,整个计算公式就是 TN=66-13-8=66-(TP+FP+FN),所以TN一般会放在最后计算。

    展开全文
  • 深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)1、什么是混淆矩阵2、分类模型评价指标3、两种多分类混淆矩阵3.1直接打印出每一个类别的分类准确率。3.2打印具体的分类结果的数值4、总结 1、...
  • 分类任务中,预测结果与正确标记之间存在四种不同的组合,构成混淆矩阵,以下是二分类混淆矩阵: 假设有一组数据集,一共有66个样本,个目标值,猫、狗、猪。 混淆矩阵为: 关于这个混淆矩阵,从真实值为...

    目录

    1.混淆矩阵

    2.精确率(Precision)与召回率(Recall)

    3. F1-score

    4.sklearn API接口

    参考文档


    1.混淆矩阵

    混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。

    在分类任务中,预测结果与正确标记之间存在四种不同的组合,构成混淆矩阵,以下是二分类的混淆矩阵:

    假设有一组数据集,一共有66个样本,三个目标值,猫、狗、猪。

    混淆矩阵为:

    关于这个混淆矩阵,从真实值为猫这一列开始看,代表有18个目标值为猫的样本,预测出10只为猫,3只为狗,5只为猪。所以正确率为10/18=55.5%。

    狗这一列有22个样本数,预测结果为1只为猫,15只为狗,6只为猪,正确率68.1%。

    猪这一列有26个样本,预测结果为2只猫,4只狗,20只猪,正确率为76.9%。

     

    那么对于以上混淆矩阵,可转化为2分类的混淆矩阵,如下:

    对于是猫的18个样本(猫),预测不正确的数量为8,正确的数量为10。

    对于不是猫的48个样本(非猫),预测不正确的数量为3,正确的数量为45。

    对于预测结果,又把是猫称为正例,不是猫称为假例。

    对于预测值的正例,正确的称为真正例TP,不正确的称为伪正例FP。

    预测值为假例,不正确的称为伪反例FN,正确的称为真反例TN。

     

     

     

     

    2.精确率(Precision)与召回率(Recall)

    精确率预测结果为正例样本中真实为正例的比例,用于评估预测的准确性。 

    如图,正正例TP为10。准确性=10/18=55.5%

    召回率:真实为正例的样本中预测结果为正例的比例。在真正样本数量下,抽取作为预测样本的数量,评估是否查的全。

    以猫为例,在总共18只真猫中,我们的模型认为里面只有10只是猫,剩下的3只是狗,5只都是猪。这5只八成是橘猫,能理解。所以,Recall(猫)= 10/18 = 55.6%

    精确率与召回率的区别

    召回率是先与精确率的,假设真实样本数为100,我们预测了95个,遗漏了5了,那么召回率是95%。

    那么在预测了的95个里,预测正确的90个,预测错误的5个,那么精确率为94.7%。

    为什么真实样本数为100而实际被预测的只有95个?

    假设对于一种分类,如猫,常规来说,猫的特征大致相同,但如果出现某些变异体,其特征与普通的猫差的非常远(如无毛猫),这时候就不太容易作为被预测对象。

    什么时候强调召回率

    对于预测癌症患者,真实样本数(被检测的人)有100人,而预测样本数为95,那么就有5人未被预测,此时的召回率是95%.

    但是对于癌症患者来说,宁可误判不能漏判,所以此时就非常强调召回率。

     

     

    3. F1-score

    F1-score:反应模型的稳健性,F1-Score指标综合了Precision与Recall的产出的结果。F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。

    公式为:

    对于猫的案例,F1-Score为:

    F1-Score=(2 * 0.769 *  0.556)/( 0.769 +  0.556) = 64.54%

     

    4.sklearn API接口

    接口:

    sklearn.metrics.classification_report(y_true,y_pred,target_names=None)
    • y_true:真实目标值
    • y_pred:估计器预测的目标值
    • target_names:目标类别名称
    • return:每个类别精确率与召回率

    一下是sklearn库提供的20newsgroups数据集,有若干篇新闻文章,我们利用朴素贝叶斯算法进行预测。

    from sklearn.naive_bayes import MultinomialNB
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.datasets import fetch_20newsgroups
    from sklearn.metrics import classification_report
    
    def bayes():
        news = fetch_20newsgroups(subset="all")
    
        #训练集划分
        x_train,x_test,y_train,y_test=train_test_split(news.data,news.target,test_size=0.25)
    
        #文本特征抽取
        tf = TfidfVectorizer()
        #估计器:从训练集中抽取文本特征
        tf.fit(x_train)
        #转换器:文本特征值化
        x_train = tf.transform(x_train)
        x_test = tf.transform(x_test)
    
        #调用朴素贝叶斯算法进行预估,P(C|F1,F2..FN)=P(F1,F2..FN|C)*P(C)
        #计算单个样本的特征值在每个分类下的概率
        #平滑系数为1(排除特征值为0的干扰)
        mlt=MultinomialNB(alpha=1.0)
        mlt.fit(x_train,y_train)
    
        predict=mlt.predict(x_test)
        #估算出的目标值与实际目标值对比,满足即预测正确,统计总的正确率
        score=mlt.score(x_test,y_test)
    
        print("预测的文章类别",predict)
        print("精确性:",score)
        print("每个类别的精确率与召回率",classification_report(y_test,predict,target_names=news.target_names))
    
    if __name__ =="__main__":
        bayes()

    使用 classification_report(y_test,predict,target_names=news.target_names)返回精确率与召回率,f1-score

    参考文档

    混淆矩阵 https://blog.csdn.net/Orange_Spotty_Cat/article/details/80520839

    展开全文
  • 混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。 数据分析与挖掘体系位置 混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆...
  • 混淆矩阵1.1 二分类混淆矩阵1.2 混淆矩阵计算实例2. 混淆矩阵代码3. 混淆矩阵用途 深度学习之图像分类(一)分类模型的混淆矩阵 今天开始学习深度学习图像分类模型Backbone理论知识,首先学习分类模型的混淆矩阵,...
  • 混淆矩阵

    2020-06-04 20:42:10
    混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。 数据分析与挖掘体系位置 混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆矩阵多...
  • 混淆矩阵是评判模结果的指标,属于模型评估的一部分。只适用于分类模型,判断分类器的性能。比如分类树,逻辑回归。 以二分类为例,判断样本结果是positive以及negative。 一级指标: TN TP FN FP 混淆矩阵如下: ...
  • 一:混淆矩阵监督学习—混淆矩阵非监督学习—匹配矩阵矩阵每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆(也就是一个class被预测成另一个class)。假设有一个...
  • 机器学习()-多分类任务混淆矩阵

    千次阅读 2019-12-28 21:02:37
    分类问题是二分问题是,混淆矩阵可以用上面的方法计算。当分类的结果多于两种的时候,混淆矩阵同时适用。 一下面的混淆矩阵为例,我们的模型目的是为了预测样本是什么动物,这是我们的结果: 通过混淆矩阵,...
  • 分类模型评价一般有以下几种方法:混淆矩阵(Confusion Matrix)、收益图(Gain Chart)、提升图(Lift Chart)、KS图(KS Chart)、接受者操作特性曲线(ROC Chart)。“分类模型评价与在R中的实现”系列中将逐个介绍。 本...
  • 拿一个三分类任务来说 "cat", "dog","bird",有8个预测结果 预测值:[dog, dog, cat ,cat, cat, dog, bird, cat] 真实值:[dog, cat, cat, cat, bird, bird,cat, cat] 要对每一个类别做混淆矩阵。拿cat类来说,...
  • 分类混淆矩阵分类模型中最简单的二分类为例,对于这种问题,我们的模型最终需要判断样本的结果是0还是1,或者说是positive还是negative。 我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是...
  • (一)混淆矩阵 混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。   Predicted as Positive(预测-正例) Predicted as Negative(预测-反例) Labeled as Positive ...
  • 这里写目录标题1. 混淆矩阵介绍二级目录级目录2. 代码实现 1. 混淆矩阵介绍 二级目录 级目录 2. 代码实现
  • 混淆矩阵学习记录

    2021-05-24 20:58:15
    混淆矩阵的定义2. 混淆矩阵的指标3. 二级指标3. 级指标4. 混淆矩阵的实例 1. 混淆矩阵的定义 混淆矩阵(Confusion Matrix), 它的本质远没有它的名字听上去那么拉风。矩阵,可以理解为就是一张表格,混淆矩阵...
  • 混淆矩阵个人理解

    2020-11-13 20:55:12
    混淆矩阵(Confusion Matrix):混淆矩阵也称为误差矩阵,是表示精度评价的一种标准格式,判断分类好坏的方法。 当预测为真,实际为真时结果为TP(True Positive); 当预测为真,实际为假时结果为FP(False ...
  • 10. 混淆矩阵、总体分类精度、Kappa系数 一、前言 表征分类精度的指标有很多,其中最常用的就是利用混淆矩阵、总体分类精度以及Kappa系数。 其中混淆矩阵能够很清楚的看到每个地物正确分类的个数以及被...
  • 混淆矩阵是通过将每个实测像元的位置和分类图像中的相应位置和分类比较计算的。 混淆矩阵的每一行代表预测类别,每一列的总数测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别...
  • 混淆矩阵,是用来表示误差,衡量模型分类效果的一种形式。该矩阵是一个方阵,矩阵的数值用来表示分类器预测的结果,包括真正例(True Positive),假正例(False Positive),真负例(True Negtive),假负例(False...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,673
精华内容 4,269
关键字:

三分类混淆矩阵