资源经验分享从混淆矩阵中计算每一类的分类精度,Recall或Sensitivity,Positive predictive value (PPV),speciall----python实现

从混淆矩阵中计算每一类的分类精度,Recall或Sensitivity,Positive predictive value (PPV),speciall----python实现

2019-12-18 | |  71 |   0

原标题:从混淆矩阵中计算每一类的分类精度,Recall或Sensitivity,Positive predictive value (PPV),speciall----python实现

原文来自:CSDN      原文链接:https://blog.csdn.net/weixin_42985512/article/details/103581697


01.png
我们接下来使用sklearn.metrics 提供的混淆矩阵的计算

from sklearn.metrics import confusion_matrix #引用方式
y_true = [2, 0, 2, 2, 0, 1]
y_pred = [0, 0, 2, 2, 0, 2]
confusion_matrix(y_true, y_pred)#官方提供的示例代码1234

然后就得到了多类别的混淆矩阵,其实多类别和二类别的混淆矩阵只是在计算一些变量的时候复杂
03.png
实现代码如下,分别计算 Recall或Sensitivity,Positive predictive value (PPV),speciall,其实这个是改变自https://blog.csdn.net/u012193416/article/details/79454351,但是他错了,导致我前几次都算错了,所以我才写了这一篇更正一下,我也提醒了这位博主。

confusion = confusion_matrix(y_true, y_pred)
print(confusion)
list_diag = np.diag(confusion)
print('list_diag=', list_diag)
list_raw_sum = np.sum(confusion, axis=1)
print('list_raw_sum=', list_raw_sum)
each_sensitivity = (np.nan_to_num(list_diag.astype('Float32') / list_raw_sum.astype('Float32'))) * 100
 each_sensitivity = np.around(each_acc, decimals=2)
 print('each_sensitivity=', each_sensitivity)
 ave_acc = np.mean(each_sensitivity)
 print('each_sensitivity=', each_sensitivity)

    #cofus.append(each_acc)
    # cofus.append('n')
list_col_sum = np.sum(confusion, axis=0)
    # print('list_raw_sum=',list_raw_sum)
    each_ppv = (np.nan_to_num(list_diag.astype('Float32') / list_col_sum.astype('Float32'))) * 100
    each_ppv = np.around(each_se, decimals=2)
    print('each_ppv=', each_ppv)
    # ave_acc=np.mean(each_acc)
    # print('ave_acc=',ave_acc)

    #cofus.append(each_se)
    # cofus.append('n')

    list_fp = list_raw_sum - list_diag
    print("list_fp", list_fp)
    for i in range(len(list_fp)):
        print(i)
        new_a = np.delete(list_diag, i)
        print(np.sum(new_a))
        m = (np.nan_to_num(np.sum(new_a) / (np.sum(new_a) + list_fp[i]))) * 100
        m = np.around(m, decimals=2)
        print("special", m)

然后计算每一类的精度,这个要和二类分开,此处的精度等于Positive predictive value,而是要单独计算
04.png
我们从上面图得到信息有accracy的计算方式,而对于每一类的acc计算我们只需这样算。

  1. TP+TN是对角线的数相加,这个在每一类都不会变,就是计算每一类的分子都不会变

  2. 每一类的精度不同的是每一类的分母,我们可以把计算的那个类当做正类,其余都是负类,这样我们就回到了二分类的问题上

  3. 假如我们计算的是S类,那么它的TP是2526,TN=89944=6941+723+14(就是除了TP之外的对角线数相加),FP我们从第一张图得知它对应位置和含义是本来是负类却被预测为正类,所以就是S类除了对角线哪一行FP=250+4+1=255,FN同理=68+2+1+0=71。

  4. 这样根据accracy的计算方式得出S类的精度为100148/100474=0.9968


【1】 De Chazal, Philip, Maria O’Dwyer, and Richard B. Reilly. “Automatic classification of heartbeats using ECG morphology and heartbeat interval features.” IEEE transactions on biomedical engineering 51.7 (2004): 1196-1206.
【2】Sellami, Ali, and Heasoo Hwang. “A robust deep convolutional neural network with batch-weighted loss for heartbeat classification.” Expert Systems with Applications 122 (2019): 75-84

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:二叉树中和为某一个值的路径(C++版本)

下一篇:CCF计算机软件能力认证试题练习:201912-1 报数

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...