官方网址:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
首先认识单词:metrics: ['mɛtrɪks] : 度量‘指标 curve : [kɝv] : 曲线
这个方法主要用来计算ROC曲线面积的;
sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)
Parameters :
y_true : 数组,shape = [样本数]
在范围{0,1}或{-1,1}中真正的二进制标签。如果标签不是二进制的,则应该显式地给出pos_label
y_score : 数组, shape = [样本数]
目标得分,可以是积极类的概率估计,信心值,或者是决定的非阈值度量(在某些分类器上由“decision_function”返回)。
pos_label:int or str, 标签被认为是积极的,其他的被认为是消极的。
sample_weight: 顾名思义,样本的权重,可选择的
drop_intermediate: boolean, optional (default=True)
是否放弃一些不出现在绘制的ROC曲线上的次优阈值。这有助于创建更轻的ROC曲线
Returns :
fpr : array, shape = [>2] 增加假阳性率,例如,i是预测的假阳性率,得分>=临界值[i]
tpr : array, shape = [>2] 增加真阳性率,例如,i是预测的真阳性率,得分>=临界值[i]。
thresholds : array, shape = [n_thresholds]
减少了用于计算fpr和tpr的决策函数的阈值。阈值[0]表示没有被预测的实例,并且被任意设置为max(y_score) + 1
要弄明白ROC的概念可以参考 :https://www.deeplearn.me/1522.html
介绍ROC曲线的两个重要指标:
真阳性率 = true positive rate = TPR = TP/ (TP + FN)
可以这样理解:真阳性率就是在标准的阳性(标准的阳性就等于真阳性加假阴性=TP + FN)中,同时被检测为阳性的概率,有点绕,自行理解。
假阳性率 = false positive rate = FPR = FP / (FP+TN)
可以这样理解:假阳性就是在标准的阴性(标准的阴性就等于假阳性加真阴性=FP + TN)中,被检测为阳性的概率。很好理解的,本来是阴性,检测成了阳性的概率就是假阳性率呗。
ROC曲线就由这两个值绘制而成。接下来进入sklearn.metrics.roc_curve实战,找遍了网络也没找到像我一样解释这么清楚的。
import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
y 就是标准值,scores 是每个预测值对应的阳性概率,比如0.1就是指第一个数预测为阳性的概率为0.1,很显然,y 和 socres应该有相同多的元素,都等于样本数。pos_label=2 是指在y中标签为2的是标准阳性标签,其余值是阴性。
所以在标准值y中,阳性有2个,后两个;阴性有2个,前两个。
接下来选取一个阈值计算TPR/FPR,阈值的选取规则是在scores值中从大到小的以此选取,于是第一个选取的阈值是0.8
scores中大于阈值的就是预测为阳性,小于的预测为阴性。所以预测的值设为y_=(0,0,0,1),0代表预测为阴性,1代表预测为阳性。可以看出,真阴性都被预测为阴性,真阳性有一个预测为假阴性了。
FPR = FP / (FP+TN) = 0 / 0 + 2 = 0
TPR = TP/ (TP + FN) = 1 / 1 + 1 = 0.5
thresholds = 0.8
我们验证一下结果
print(fpr[0],tpr[0],thresholds[0])
同代码结果一致,其余的就不演示了,剩下的阈值一次等于 0.4 0.35 0.1 自行验证。
最后结果等于
print(fpr,'
',tpr,'
',thresholds)
全部代码
import numpy as np
from sklearn import metrics
y = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
print(fpr,'
',tpr,'
',thresholds)
---------------------
作者:z智慧
来源:CSDN
原文:https://blog.csdn.net/u014264373/article/details/80487766
版权声明:本文为博主原创文章,转载请附上博文链接!