Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 测试集上的接收器工作特性(ROC)_Machine Learning_Statistics - Fatal编程技术网

Machine learning 测试集上的接收器工作特性(ROC)

Machine learning 测试集上的接收器工作特性(ROC),machine-learning,statistics,Machine Learning,Statistics,下面的图片对我来说绝对有意义 假设你有几个经过训练的二元分类器a,B(B不比随机猜测好多少等等),还有一个由n个测试样本组成的测试集,用于所有这些分类器。由于对所有n个样本都计算了精度和召回率,因此与分类器相对应的点是有意义的 现在,有时人们会谈论ROC曲线,我知道精确性表示为回忆的函数或简单绘制的精确性(回忆) 我不明白这种可变性从何而来,因为你们有固定数量的测试样本。您是否只需选取测试集的一些子集,并找到精度和召回率,以便绘制它们,从而绘制出许多离散值(或插值线)?ROC曲线仅显示“如果将F

下面的图片对我来说绝对有意义

假设你有几个经过训练的二元分类器a,B(B不比随机猜测好多少等等),还有一个由n个测试样本组成的测试集,用于所有这些分类器。由于对所有n个样本都计算了精度和召回率,因此与分类器相对应的点是有意义的

现在,有时人们会谈论ROC曲线,我知道精确性表示为回忆的函数或简单绘制的精确性(回忆)

我不明白这种可变性从何而来,因为你们有固定数量的测试样本。您是否只需选取测试集的一些子集,并找到精度和召回率,以便绘制它们,从而绘制出许多离散值(或插值线)?

ROC曲线仅显示“如果将FPR增加一定量,您将获得多大的灵敏度”。TPR和FPR之间的权衡。可变性来自于改变分类器的某些参数(对于下面的逻辑回归情况,它是阈值)

例如,逻辑回归为您提供了对象属于正类的概率(值在[0..1]中),但它只是概率。这不是一门课。所以在一般情况下,你们必须指定概率的阈值,超过这个阈值你们将把物体分类为正。您可以学习逻辑回归,从中获得集合中每个对象的正类概率,然后通过从0到1的某个步骤改变此阈值参数,通过阈值化概率(在上一步计算),您将获得每个对象的类标签,并根据这些标签计算TPR和FPR。因此,您将获得每个阈值的TPR和FPR。您可以在绘图上标记它们,并最终在计算所有阈值的(TPR,FPR)对后,通过它们画一条线


同样对于线性二元分类器,您可以将这个变化的过程看作是选择决策线和正(或负,如果您愿意)类簇之间距离的过程。如果您将决策线移到远离正类的地方,您将把更多的对象分类为正类(因为您增加了正类空间),同时您将FPR增加了一些值(因为负类空间减少)

ROC曲线对于将其输出表示为“分数”的二元分类器来说是定义良好的。分数可以是,例如,处于正类的概率,也可以是两种可能结果的概率分布之间的概率差(甚至对数优势比)


该曲线是通过在不同级别设置该分数的判定阈值并测量给定阈值的真阳性率和假阳性率来获得的

这一过程的一个很好的例子是:

例如,假设患者和健康人的血液蛋白质水平分别以2 g/dL和1 g/dL的平均值正态分布。医学测试可以测量血液样本中某一蛋白质的水平,并将高于某一阈值的任何数字归类为疾病。实验者可以调整阈值(图中的黑色垂直线),这将反过来改变假阳性率。增加阈值将导致更少的误报(和更多的误报),对应于曲线上的向左移动。曲线的实际形状取决于两个分布的重叠程度

如果代码更清楚地告诉您,下面是scikit中的代码,了解给定数据集中每个项目的一组预测。基本操作似乎是():

(我省略了一系列代码,这些代码处理具有加权样本的(常见)情况以及分类器对多个样本给出几乎相同的分数。)基本上,真正的标签按照分类器分配给它们的分数降序排序,然后计算它们的累积和,根据分类器分配的分数给出真实阳性率


这里有一个例子说明了如何使用这个方法:

这可能是一个很好的问题,因为他们更关注统计等。“该曲线是通过在不同级别设置该分数的决策阈值,并在给定阈值的情况下测量真阳性率和假阳性率得出的。”这意味着一个完全参数化的分类器没有ROC曲线,而是ROC上由坐标构成的一个点(精度,1-召回)。这意味着只有将特征映射到类成员身份度的算法才有ROC曲线,对吗?是的,这是我的理解。就像一个心理练习,假设分类器是固定的,阈值是适当的(例如svm),如果你开始用这样的假设在小的不同块中探索测试集,并绘制图(精确性,1-召回)每次点…我想知道…它是否应该类似于一个离散的ROC曲线:染料,我认为你所说的可以做到,从测试集子样本估计P/R值;我只是不认为它实际上经常这样做。但在我看来,这有点像信心估计的自举。你可能会通过国王继续谈论这件事。
desc_score_indices = np.argsort(y_score, kind="mergesort")[::-1]
y_score = y_score[desc_score_indices]
y_true = y_true[desc_score_indices]

# accumulate the true positives with decreasing threshold
tps = y_true.cumsum()
fps = 1 + list(range(len(y_true))) - tps
return fps, tps, y_score