了解ROC曲线

时间:2018-09-04 13:38:14

标签: scikit-learn roc false-positive

var worlds = await getWorlds();
Worlds.AddRange(worlds.SelectMany(w=>w));

来自https://en.wikipedia.org/wiki/Sensitivity_and_specificity

import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve, auc , roc_auc_score
import numpy as np

correct_classification = np.array([0,1])
predicted_classification = np.array([1,1])

false_positive_rate, true_positive_rate, tresholds = roc_curve(correct_classification, predicted_classification)

print(false_positive_rate)
print(true_positive_rate)

我正在使用以下值0:生病,1:健康

来自https://en.wikipedia.org/wiki/False_positive_rate

flase阳性率=假阳性/(假阳性+真阴性)

假阳性数:0 真阴性数:1

因此误报率= 0/0 + 1 = 0

读取roc_curve(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve)的返回值:

  

fpr:数组,形状= [> 2]

     

增加误判率,使元素i为假   得分> =阈值[i]的预测的阳性率。

     

tpr:数组,形状= [> 2]

     

增加真实正利率,使元素i为真实   得分> =阈值[i]的预测的阳性率。

     

阈值:数组,形状= [n_thresholds]

     

用于计算fpr和   tpr。 thresholds [0]表示未预测任何实例,并且为   任意设置为max(y_score)+1。

这与我手动计算误报率有何不同?阈值如何设置?此处提供了一些有关阈值的模式信息:https://datascience.stackexchange.com/questions/806/advantages-of-auc-vs-standard-accuracy,但我对它如何适合此实现感到困惑?

2 个答案:

答案 0 :(得分:1)

enter image description here

在上面的演示中,阈值为橙色条。类00的分布为红色(分类器的输出),类1的分布为蓝色(相同,分类器的输出的proba分布)。它适用于处于一个类别或另一个类别中的概率:如果一个样本的输出为[0.34,0.66],则即使0.66的概率更高,类别1的阈值0.25也会将他置于类别1中。 / p>

您不必使用类来处理ROC曲线,而要使用类的基础。

我希望它能回答这个问题(对不起,如果需要的话,我会更加准确)

答案 1 :(得分:1)

首先,维基百科正在考虑生病= 1。

  

是肯定的:正确识别出有病的生病的人

第二,每个模型都有基于正分类概率的阈值(通常为0.5)。

因此,如果阈值为0.1,则所有概率大于0.1的样本都将被归为正。预测样本的概率是固定的,阈值将变化。

roc_curve中,scikit-learn从以下位置增加阈值:

 0 (or minimum value where all the predictions are positive) 

1 (Or the last point where all predictions become negative).

根据预测从正值到负值的变化确定中间点。

示例:

Sample 1      0.2
Sample 2      0.3
Sample 3      0.6
Sample 4      0.7
Sample 5      0.8

此处的最低概率为0.2,因此任何有意义的最小阈值为0.2。现在,随着我们不断提高阈值,由于本示例中的点数很少,因此阈值点将在每个概率处改变(并且等于该概率,因为那是正负数变化的点)

                     Negative    Positive
               <0.2     0          5
Threshold1     >=0.2    1          4
Threshold2     >=0.3    2          3
Threshold3     >=0.6    3          2
Threshold4     >=0.7    4          1
Threshold5     >=0.8    5          0