matlab roc曲线,matlab绘制ROC曲线
参考博客:
详细解释ROC/AUC计算流程。
【机器学习笔记】:一篇文章让你彻底了解准确率、精确率、召回率、真率、假阳性率、ROC/AUC
1.准确率、精确率和召回率。TP,TN,FP,FN概念P(正):代表1
n(负):0
t(对):预测是正确的。
F(False):表示有错误。
以上四种情况可以理解为:
先看 预测结果(P/N),再根据实际表现对比预测结果,给出判断结果(T/F)。
比如
TP:
的预测为1,预测正确,即1FP:
的实际预测为1,预测错误,即0FN:
的实际预测为0,预测正确,实际预测为0。2.准确率是
TN:
虽然准确率可以判断整体准确率,但在样本不平衡的情况下,不能作为衡量结果的好指标。举个简单的例子,比如在一个总样本中,阳性样本占90%,阴性样本占10%。样本严重不平衡。在这种情况下,我们只需要把所有的样本都预测为阳性样本就可以得到90%的高准确率,但实际上我们并没有仔细分类,只是没有动脑子而已。这显示:
准确率=(TP+TN)/(TP+TN+FP+FN)
3.精确率(Precision)也叫
由于样本不平衡的问题,导致了得到的高准确率结果含有很大的水分。即如果样本不平衡,准确率就会失效。
。是查准率
,其含义是针对预测结果
,表示在预测为正样本的结果中,预测能够正确的把握有多大。其公式如下:
在所有被预测为正的样本中实际为正的样本的概率
准确和准确看似相似,却是完全不同的概念。准确度代表正样本结果的预测准确度,准确度代表整体预测准确度,包括正样本和负样本。
4.召回率(Recall)也叫
精准率=TP/(TP+FP)
。表示查全率
,其公式如下:
针对原样本
在实际为正的样本中被预测为正样本的概率
以网贷违约率为例。相比好用户,我们更关注坏用户,不能错过任何一个坏用户。因为如果我们过多的把不良用户当成好用户,那么未来可能发生的违约金额将远远超过好用户偿还的贷款利息金额,造成严重的损失。召回率=TP/(TP+FN)
二。ROC/AUC 1的概念。敏感性、特异性、真率和假阳性率。在正式引入ROC/AUC之前,我们还要引入两个指标,
召回率的应用场景:
。这两个指标是:召回率越高,代表实际坏用户被预测出来的概率越高,它的含义类似:宁可错杀一千,绝不放过一个。
。
这两个指标的选择也正是ROC和AUC可以无视样本不平衡的原因
灵敏度和(1-特异度),也叫做真正率(TPR)和假正率(FPR)
其实我们可以发现,敏感度和召回率是完全一样的,只是名字变了。由于我们更关心的是阳性样本,我们需要检查有多少阴性样本被错误地预测为阳性样本,所以我们用(1-特异性)来代替特异性。
灵敏度(Sensitivity) = TP/(TP+FN) = 召回率
特异度(Specificity) = TN/(FP+TN)
下面是真率和假阳性率的示意图。可以发现
真正率(TPR) = 灵敏度 = TP/(TP+FN)
就是因为这个,所以不管样本是否平衡都不会受到影响。以前面的例子为例。在所有样本中,90%为阳性,10%为阴性。我们知道使用准确度有问题,但使用TPR不同于FPR。这里TPR只关注90%的阳性样本实际覆盖了多少,与那10%无关。同样,FPR只关注10%的负样本有多少被错误覆盖,与那90%无关,所以可以看出:假正率(FPR) = 1- 特异度 = FP/(FP+TN)
或者可以从另一个角度考虑:
TPR和FPR分别是基于实际表现1和0出发的,也就是说它们分别在实际的正样本和负样本中来观察相关概率问题。
。我们假设如果从实际表现的各个结果角度出发,就可以避免样本不平衡的问题了,这也是为什么选用TPR和FPR作为ROC/AUC的指标的原因。
是预测值,条件概率
是真实值。那么这些指标可以用条件概率来表示:X
。
Y
精准率 = P(Y=1 X=1)
从上面三个公式看:
召回率 = 灵敏度 = P(X=1 Y=1)
2.ROC(受试者工作特性曲线)ROC(受试者工作特性曲线)曲线,又称受试者工作特性曲线。该曲线首次应用于雷达信号检测领域,用于区分信号和噪声。后来人们用它来评价模型的预测能力,基于混淆矩阵得出ROC曲线。
ROC曲线中的两个主要指标是
特异度 = P(X=0 Y=0)
和如果先以实际结果为条件(召回率,特异度),那么就只需考虑一种样本,而先以预测值为条件(精准率),那么我们需要同时考虑正样本和负样本。所以先以实际结果为条件的指标都不受样本不平衡的影响,相反以预测结果为条件的就会受到影响。
,这也说明了这种选择的优势。横坐标是假阳性率(FPR),纵坐标是真阳性率(TPR)。这是一条标准的ROC曲线。真正率
3.AUC(曲线下面积)AUC计算方法
为了计算ROC曲线上的点,可以用不同的分类阈值对logistic回归模型进行多次评估,但这是非常低效的。好在有一种基于排序的高效算法,叫做
假正率
。有趣的是,如果对角线相连,它的面积正好是0.5。斜线的实际意义是:
TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能就越好
ROC曲线越陡越好,所以理想值是1,一个平方,最差随机判断是0.5,所以AUC值一般在0.5-1之间。
曲线下面积(Area Under Curve)
随机判断响应与不响应,正负样本覆盖率应该都是50%,表示随机效果。
效果不高,但是对于预测股票已经很不错了。
AUC的一般判断标准
效果一般。
0.5 - 0.7:
效果不错。
0.7 - 0.85:
很好用,但一般不太可能。三。Python实现使用Python的sklearn.metrics.ROC_curve,可以计算数值,绘制ROC曲线。
1.1.roc_curve简介(1)重要参数y_true:实结果数据,数据类型为数组。
Y_score:预测结果数据,可以是标签数据,也可以是概率值。数据类型是与y_true形状相同的数组。
Pos_label:默认值为None,只有当{0,1}和{-1,1}等标签数据分为两类时才能默认;否则,需要设置正样本值。
(2)返回结果。返回三组结果:FPR(误报率)、TPR(召回率)和threshold(阈值)
2.第一种情况:y_score是标签数据的例子(1) //python代码Y _ true=np.array ([0,0,0,1,1,0,0,0,1,0]) Y _ score=np.array ([0,0,0,0,
Threshold: array ([2,1,0]) TPR: array ([0。 0.6666667, 1.]) FPR:数组([0。 0. 1.]) (2)说明threshold返回的结果是y_score中的元素重复加一个例如:threshold=np.array([4,3,2,1,0])对应y_score=np.array([0,1,2,0,3,1])当index=0时,threshold等于threshold[0]=2。此时假设y_score中所有大于等于2的元素对应y_true中index=1的样本为正样本,其他为负样本,然后与y_true中对应的元素进行比较,形成混淆矩阵。由于没有大于等于2的值,TP和FP都是0,即tpr[0]=0/3=0.0,fpr[0]=0/7=0.0。此时假设y_score中所有大于等于1的元素对应y_true中index=2的样本为正样本,其他为负样本,然后与y_true中对应的元素进行比较,形成混淆矩阵。因为有两个元素大于等于1,TP=2,FP=0,即TPR [1]=2/3=0.6666667,FPR [1]。此时假设y_score中所有大于等于0的元素对应y_true中index为正的样本,其他为负的样本,然后与y_true对应的元素进行比较,形成混淆矩阵。由于有10个元素大于等于0,TP=3,FP=7,即TPR [2]=3/3=1.0,FPR [2]=7/。最终结果:TPR=array ([0。 0.6666667, 1.]),fpr=array([0。 0. 1.]) 3.第二种情况:y_score是概率值(1)例//python代码Y _ true=NP。Array ( 0.35,0.8]) #概率值是正态类的概率FPR,TPR,threshold=roc _ curve (y _ true,y _ score)。返回结果:
Threshold: array ([1.8,0.8,0.4,0.35,0.1]) TPR: array ([0 . 0.5, 0.5, 1. 1.]) FPR:数组([0。 0.5, 0.5, 1 .此时假设y_score中所有index=1大于等于1.8的元素为正样本,其他为负样本,然后与y_true中对应的元素进行比较,形成混淆矩阵。由于没有大于等于1.8的值,所以TP和FP都是0,即TPR [0]=0/2=0.0,FPR [0]=0/2=0.0。此时,假设y_score中所有等于或大于1的元素对应y_true中index=2的样本为正样本,其他为负样本,然后与y_true中对应的元素进行比较,形成混淆矩阵。因为有一个元素等于或大于0.8,所以y_true中这个position元素的值是1,所以TP=1,FP=0,即TPR [1]=1/2=0.5。此时假设y_score中所有大于等于0.4的元素对应y_true中index=3的样本为正样本,其他为负样本,然后与y_true中对应的元素进行比较,形成混淆矩阵。因为有两个元素大于等于0.4,TP=1,FP=1,即TPR [2]=1/2=0.5,FPR [2]=0.5。此时假设y_score中所有大于等于0.35的元素对应y_true中index=4的样本为正样本,其他为负样本,然后与y_true中对应的元素进行比较,形成混淆矩阵。因为有三个元素大于等于0.35,TP=2,FP=1,即TPR [3]=2/2=1.0,FPR [3]。此时假设y_score中所有大于等于0.1的元素对应y_true中索引为正的样本,其他为负的样本,然后与y_true中对应的元素进行比较,形成混淆矩阵。因为有四个元素大于等于0.1,所以TP=2,FP=2,即TPR [4]=2/2=1.0,FPR [4]=1.0。最终结果:tpr=array([0。 0.5, 0.5, 1. 1.]),fpr=array([0。 0. 0.5, 0.5, 1.]) 4.绘制ROC曲线FPR,TPR,threshold=ROC _ curve(。Y_pred_)roc_auc=auc(fpr,tpr) # Accuracy表示所有数据打印的所有正确比率( roc_auc:,ROC _ AUC) LW=2plt。副情节(5,3,S1)情节。Plot (FPR,TPR Label= ROC曲线(面积=% 0.2f)% ROC _ AUC) #假阳性率为横坐标,真实率为纵坐标。制作曲线PLT.plot ([0,1],[0,1],color= navy ,lw=lw,line style=-)1.0])PLT . ylim([0.0,1.0])plt.xlabel(1 -特异性)plt.ylabel(灵敏度)plt.title(ROC ,y=0.5)plt.legend(loc=右下)plt.show()