(精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标

1、概念

金标准(标准集)

预测算法(预测集)

验证存在(T)

验证不存在(F)

合计

预测存在(P)

预测为正,真实为正(TP)

预测为正,真实为负(FP)

P(预测为正样本)

预测不存在(N)

预测为负,真实为正(FN)

预测为负,真实为负(TN)

N(预测为负样本)

合计

T(验证为正样本)

F(验证为负样本)

所有样本数(P+N或者T+F)

简化后:

标准集

测试集

正样本

负样本

合计

预测正样本

TP

FP

P

预测负样本

FN

TN

N

合计

T

F

P+N或者T+F

准确率(Accuracy):Acc = ( TP + TN ) / ( P +N )

精确率( precision )/(查准率):TP / ( TP+FP ) = TP / P  

敏感性(Sensitivity)/召回率(recall)/(查全率):TP / (TP + FN ) = TP / T

真阳性率(True positive rate):TPR = TP / ( TP+FN ) = TP / T  (敏感性 sensitivity)

真阴性率(TNR:true negative rate):TNR= TN / (TN+FP) = TN/F(特异性:specificity),描述识别出的负例占所有负例的比例 

假阳性率(False positive rate):FPR = FP / ( FP + TN ) = FP / F  

假阴性率 (False Negative Rate):FNR = FN /(TP + FN)= FN / T

F-measure:2*recall*precision / ( recall + precision )

ROC曲线:FPR为横坐标,TPR为纵坐标

PR曲线:recall为横坐标,precision 为纵坐标

=====概念解释=============

敏感性 Sensitivity
敏感性又称真阳性率,就是发病之后,你的诊断方法对疾病的敏感程度(识别能力)。

敏感性越高,漏诊概率越低。

特异性 Specificity
特异性又称真阴性率,不发病(我们这里称之为健康)的特征是有别于发病的特征的,我们利用这些差异避免误诊,那么诊断标准对于这些差异利用的如何就用特异性来表示。

特异性越高,确诊概率越高。
========================

从这个表格中可以引出一些其它的评价指标: 
- ACC:classification accuracy,描述分类器的分类准确率 
计算公式为:ACC=(TP+TN)/(TP+FP+FN+TN) 
- BER:balanced error rate 
计算公式为:BER=1/2*(FPR+FN/(FN+TP)) 
- TPR:true positive rate,描述识别出的所有正例占所有正例的比例 
计算公式为:TPR=TP/ (TP+ FN) 
- FPR:false positive rate,描述将负例识别为正例的情况占所有负例的比例 
计算公式为:FPR= FP / (FP + TN) 
- TNR:true negative rate,描述识别出的负例占所有负例的比例 
计算公式为:TNR= TN / (FP + TN) 
- PPV:Positive predictive value 
计算公式为:PPV=TP / (TP + FP) 
- NPV:Negative predictive value 
计算公式:NPV=TN / (FN + TN) 
其中TPR即为敏感度(sensitivity),TNR即为特异度(specificity)。


2、测试例子 

十次十折后计算的预测标签

计算例子,比如第10次计算,通过excel筛选器,

筛选预测pda=1,label =1,共TP = 53个病例.

筛选预测pda=1,label =0共FP = 4个病例.

筛选预测pda=0,label =1,共FN = 11个病例.

筛选预测pda=0,label =0,共TN = 44个病例.

金标准(标准集)

预测算法(预测集)

验证存在(T)

验证不存在(F)

合计

预测存在(P)

预测为正,真实为正(TP=53)

预测为正,真实为负(FP=4)

P=57(预测为正样本)

预测不存在(N)

预测为负,真实为正(FN=11) 

预测为负,真实为负(TN=44)

N=55(预测为负样本)

合计

T=64(验证为正样本)

F=48(验证为负样本)

所有样本数(P+N或者T+F=112)


 

 敏感性 (sensitivity) TPR = TP / ( TP+FN ) = TP / T  =0.828125

特异性(specificity) TNR= TN / (FP + TN) = 44/48 = 0.9166666666666667

准确率(Accuracy):Acc = ( TP + TN ) / ( P +N ) = (53+44 )/112 = 0.8660714285714286

ROC 曲线TPR,FPR计算例子:

1、ROC曲线是如何计算得到的? - 知乎

2、目标检测Object Detection下的P-R曲线,AP,mAP,AUC,ROC曲线详解_喵喵扫描仪的博客-CSDN博客_目标检测roc曲线

3、P-R曲线及与ROC曲线区别 - 光彩照人 - 博客园

4、ROC曲线、P-R曲线以及mAP_Mr_health的博客-CSDN博客_roc曲线使用场景

5、P-R曲线深入理解_keep_forward的博客-CSDN博客_p-r曲线

6、计算P-R曲线的代码:

sklearn.metrics.precision_recall_curve(y_true, probas_pred, pos_label=None, sample_weight=None)

sklearn.metrics.average_precision_score则计算预测值的平均准确率(AP: average precision)

 python画PR曲线(precision-recall曲线)_Mr.Jcak的博客-CSDN博客_precision_recall_curve

7、用sklearn库自动计算tp,fp,tn,fn,计算acc,sen,spe,f1-score,precision指标。

参考文章:

1)sklearn中混淆矩阵(confusion_matrix函数)的理解与使用_秃头崽崽的博客-CSDN博客_sklearn 混淆矩阵

2)Python sklearn.metrics.confusion_matrix实例讲解 - 码农教程

3)机器学习笔记--classification_report&精确度/召回率/F1值_阿卡蒂奥的博客-CSDN博客_classification report

具体代码如下:

# aip指标
    fpr_aip, tpr_aip, thresholds = metrics.roc_curve(roc_aip_gt_labels, roc_aip_pre_scores, drop_intermediate=False)
    auc = metrics.auc(fpr_aip, tpr_aip)
    all_indicators_aip["auc"].append(auc)

    y_pred = np.where(np.array(roc_aip_pre_scores) > 0.5, 1, 0)
    tn, fp, fn, tp = metrics.confusion_matrix(roc_aip_gt_labels, y_pred, labels=[0, 1]).ravel()
    print(metrics.classification_report(roc_aip_gt_labels, y_pred, target_names=['BG', 'AIP'],
                                        digits=4))  # target_names和上面的labels对上
    sen = tp / (tp + fn)
    all_indicators_aip["sen"].append(sen)
    spe = tn / (tn + fp)
    all_indicators_aip["spe"].append(spe)
    precision = tp / (tp + fp)
    all_indicators_aip["precision"].append(precision)
    acc = (tp + tn) / (tp + fp + tn + fn)
    all_indicators_aip["acc"].append(acc)
    f1_score = 2 * precision * sen / (precision + sen)
    all_indicators_aip["f1_score"].append(f1_score)

  • 15
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在R语言中,我们可以使用各种包和函数来计算模型的准确度、特异性和绘制ROC曲线。下面我将解释如何使用一些常用的函数来实现这些功能。 首先,我们需要通过训练数据来建立一个模型。例如,我们可以使用glm函数来拟合一个逻辑回归模型。接下来,我们可以使用predict函数使用训练好的模型来进行预测。 要计算模型的准确度,我们可以使用最基本的方法——计算预测的准确率。将预测结果与实的标签进行比较,一致的次数除以总的样本数即可得到准确率。例如: ``` # 设我们有一个训练好的逻辑回归模型model和一些测试数据test_data和它们的实标签test_labels: # 进行预测 predictions <- predict(model, newdata=test_data, type="response") # 将预测结果舍入为0或1 predictions_rounded <- ifelse(predictions > 0.5, 1, 0) # 计算准确率 accuracy <- sum(predictions_rounded == test_labels) / length(test_labels) print(accuracy) ``` 特异性可以通过计算模型的阴性率来获得。阴性率表示模型正确识别负例的能力。我们可以使用以下方法计算: ``` # 设predictions_rounded为预测结果 # 将预测标签与实标签进行比较,并计算阴性数和实际负例数 true_negative <- sum(predictions_rounded == 0 & test_labels==0) actual_negatives <- sum(test_labels == 0) # 计算特异性 specificity <- true_negative / actual_negatives print(specificity) ``` 要绘制ROC曲线,我们可以使用pROC包中的roc函数。首先,我们需要为模型计算预测的概率。然后,我们可以使用roc函数来计算接收者操作特性曲线的各个参数,包括阳性率(sensitivity)和阳性率(1-specificity)。最后,我们可以使用plot函数绘制ROC曲线。例如: ``` # 设predictions为预测的概率 library(pROC) roc_obj <- roc(test_labels, predictions) plot(roc_obj) ``` 这些是在R语言中计算模型准确度、特异性和绘制ROC曲线的基本方法。根据具体需求,还可以使用其他包和函数来进行更详细和复杂的分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值