网站建设套餐价格营销网站做的好的公司
更多机器学习,深度学习资料领取:
领取链接https://s.pdb2.com/pages/20231107/cNttH3oeFf2ifi6.html
Receiver operating characteristic curve(ROC曲线)
ROC曲线是一种用于展示二分类模型性能的图形,通过不同的阈值来揭示模型的识别能力。ROC曲线也可以用于多类分类问题中。这条曲线是以不同阈值下的真正率(TPR,即召回率或灵敏度)为纵轴,假正率(FPR)为横轴绘制的。
ROC曲线可以被视为统计效能与第一类错误(Type I Error)之间的关系,当模型性能是基于人口样本进行计算时,ROC曲线可以被视为这些量的估计器。因此,它表示的是在不同假正率下的灵敏度或召回率。
如果已知真正类和假正类的概率分布,那么ROC曲线可以通过在纵轴上绘制检测概率的累积分布函数(CDF,即从负无穷到分辨阈值下概率分布的面积)和在横轴上绘制假正类概率的CDF来获得。
ROC分析提供了选择可能最优模型和摒弃次优模型的工具,且这是独立于成本计算或类别分布的。在ROC分析中,与诊断决策的成本/收益分析直接且自然地关联。
术语:
真正率(True-Positive Rate, TPR)也被称为灵敏度、召回率或检出概率。
- 真正率(TPR):也称召回率或灵敏度,计算为TP/(TP+FN),衡量的是分类器在所有实际为正例的样本中正确识别出的比例。
假正率(False Positive Rate, FPR)也被称为误报概率,等于(1 - 特异性)。
- 假正率(FPR):计算为FP/(FP+TN),衡量的是分类器在所有实际为负例的样本中错误地识别为正例的比例。
ROC曲线因用以比较两种操作特性(TPR和FPR),随着标准的变化而变化,因此也被称为相对操作特性曲线。
更多机器学习,深度学习资料领取:
领取链接https://s.pdb2.com/pages/20231107/cNttH3oeFf2ifi6.html
基本概念:
在统计学的假设检验中,第I类错误(Type I error)和第II类错误(Type II error)是进行决策时可能犯的两种错误:
- 第I类错误:
也被称为“假阳性”或“误报”,是指当实际情况为假(无效假设H0为真)时错误地拒绝了这个假设。举例来说,在临床试验中,如果一种药物实际上并无效果,但测试结果错误地显示有显著效果,这就犯了第I类错误。在混淆矩阵的语境中,假正例(FP)就是一个第I类错误的体现。
- 第II类错误:
也被称为“假阴性”,是指当实际情况为真(无效假设H0为假)时,却错误地未能拒绝这个假设。例如,在临床试验中,如果一种药物实际有效,但测试没有检测出这种效果,这就是一个第II类错误。在混淆矩阵中,假负例(FN)代表一种第II类错误。
关于灵敏度和特异性:
- 灵敏度(Sensitivity):
也称为真正率(True Positive Rate, TPR)或召回率(Recall),是指在所有实际为正的样本中,分类器正确识别为正的比例。计算公式为TP/(TP + FN)。灵敏度高意味着模型能够检测出大部分真实的正例,从而犯错较少(即低FN)。
- 特异性(Specificity):
与假正率(FPR)相反,是指在所有实际为负的样本中,分类器正确识别为负的比例,计算公式为TN/(FP + TN)。一般来说,特异性高表明模型在实际为负的样本上犯的错误较少(即低FP)。
在医学诊断、机器学习分类任务和各种检测系统中,灵敏度和特异性是两个非常重要的评价指标,它们可以帮助理解模型对于正例和负例的识别能力。理想的分类器应该具有高灵敏度(高召回率)和高特异性,这样既能正确地识别出真正的病例,同时避免将健康的个体误诊为患病。
更多机器学习,深度学习资料领取:
领取链接https://s.pdb2.com/pages/20231107/cNttH3oeFf2ifi6.html
ROC曲线在现实问题中的应用
以医学诊断作为例子,当一个诊断测试旨在确定个人是否患有某种疾病时,假阳性(即测试结果呈阳性而实际上未患病)可能会给个体带来不必要的精神压力和进一步的诊断测试。假阴性(即测试结果呈阴性而病患却未被诊断出来)可能会导致严重的后果,因为疾病没有得到及时检测和治疗。
分类模型的四种结果——真正例(TP)、假正例(FP)、真负例(TN)和假负例(FN)——可以用二维混淆矩阵来表达。在实际的测试中,会通过调整阈值来改变这四种结果的数量,以此来计算出不同的TPR和FPR,并绘制出一条ROC曲线。
对某个特定情况下,设有P个正实例和N个负实例来进行实验。这四种结果可以在一个2×2的列联表或混淆矩阵中表示,如下所示:
混淆矩阵为我们提供了一个结构化的方式来概述分类器预测的结果,它通常看起来如下所示:
- TP:表示为正例且实际上也是正例的例子数目。
- FP:表示为正例但实际上是负例的例子数目。
- FN:表示为负例但实际上是正例的例子数目。
- TN:表示为负例且实际上也是负例的例子数目。
基于这样一个混淆矩阵,我们能够计算出不同的性能指标,如准确率(Accuracy)、灵敏度(Sensitivity或召回率)、特异性(Specificity)、精确率(Precision)等,以此来评估分类模型的性能。
在评估分类器时,ROC曲线是一个有力的工具,因为它不依赖于类别的分布或者评估成本。当我们在ROC曲线下的面积(Area Under the ROC Curve, AUC)越接近于1时,表示分类模型的性能越好。相反,如果AUC接近于0.5,意味着分类器的性能不佳,没有比随机猜测更好。
ROC曲线与模型选择
ROC曲线分析为模型的选择和弃用提供了工具,它使得我们在确定成本/效益分析之前,独立于分类成本以及类的分布,选择最优模型。ROC曲线下的面积(AUC)是一个常用的度量,它提供了一个与分类器性能单纯依赖于阈值无关的性能度量。AUC面积越大,分类器的性能通常越好。
更多机器学习,深度学习资料领取:
领取链接https://s.pdb2.com/pages/20231107/cNttH3oeFf2ifi6.html
示例:
7种机器学习分类模型请参见文章:
7种机器学习方法http://t.csdnimg.cn/u53ra
lr_false_positive_rate,lr_true_positive_rate,lr_threshold = roc_curve(y_test,lr_predict)
nb_false_positive_rate,nb_true_positive_rate,nb_threshold = roc_curve(y_test,nbpred)
rf_false_positive_rate,rf_true_positive_rate,rf_threshold = roc_curve(y_test,rf_predicted)
xgb_false_positive_rate,xgb_true_positive_rate,xgb_threshold = roc_curve(y_test,xgb_predicted)
knn_false_positive_rate,knn_true_positive_rate,knn_threshold = roc_curve(y_test,knn_predicted)
dt_false_positive_rate,dt_true_positive_rate,dt_threshold = roc_curve(y_test,dt_predicted)
svc_false_positive_rate,svc_true_positive_rate,svc_threshold = roc_curve(y_test,svc_predicted)sns.set_style('whitegrid')
plt.figure(figsize=(10,5))
plt.title('Reciver Operating Characterstic Curve')
plt.plot(lr_false_positive_rate,lr_true_positive_rate,label='Logistic Regression')
plt.plot(nb_false_positive_rate,nb_true_positive_rate,label='Naive Bayes')
plt.plot(rf_false_positive_rate,rf_true_positive_rate,label='Random Forest')
plt.plot(xgb_false_positive_rate,xgb_true_positive_rate,label='Extreme Gradient Boost')
plt.plot(knn_false_positive_rate,knn_true_positive_rate,label='K-Nearest Neighbor')
plt.plot(dt_false_positive_rate,dt_true_positive_rate,label='Desion Tree')
plt.plot(svc_false_positive_rate,svc_true_positive_rate,label='Support Vector Classifier')
plt.plot([0,1],ls='--')
plt.plot([0,0],[1,0],c='.5')
plt.plot([1,1],c='.5')
plt.ylabel('True positive rate')
plt.xlabel('False positive rate')
plt.legend()
plt.show()
输出:
更多机器学习,深度学习资料领取:
领取链接https://s.pdb2.com/pages/20231107/cNttH3oeFf2ifi6.html