浅谈ROC曲线的最佳阈值如何选取

1. ROC曲线简介

首先,我们先来了解一下ROC曲线是什么。ROC(Receiver Operating Characteristic)曲线的作用是评价在二分类问题中,模型的重分类分类阈值对性能的影响。ROC曲线是横轴为伪阳性率,纵轴为真阳性率的折线图,其中每个点对应于一个分类阈值。ROC曲线上的一个点代表着该阈值下的真正例率(TPR,又称为敏感度)和假正例率(FPR)的对应。这里需要注意的是,TPR的定义为:TPR = TP / (TP + FN),FPR的定义为:FPR = FP / (FP + TN),其中,TP表示真正例,FP表示假正例,TN表示真反例,FN表示假反例。

2. 最佳阈值如何确定

2.1 直接利用ROC曲线

最简单直接的方法就是,从ROC曲线上选择最靠近左上(即真正例率越高,假正例率越低)的点作为最佳阈值。可以使用Python中的numpy和matplotlib库来绘制ROC曲线,并找到最佳阈值。代码如下:

import numpy as np

import matplotlib.pyplot as plt

def plot_roc_curve(fpr, tpr):

plt.plot(fpr, tpr, color='orange', label='ROC')

plt.plot([0, 1], [0, 1], color='darkblue', linestyle='--', label='Guessing')

plt.xlabel('False Positive Rate')

plt.ylabel('True Positive Rate')

plt.title('Receiver Operating Characteristic (ROC) Curve')

plt.legend()

plt.show()

def find_best_threshold(thresholds, fpr, tpr):

gmeans = np.sqrt(tpr * (1-fpr))

ix = np.argmax(gmeans)

print("Best Threshold = {:.3f}, G-Mean = {:.3f}".format(thresholds[ix], gmeans[ix]))

fpr, tpr, thresholds = roc_curve(y_test, probs)

plot_roc_curve(fpr, tpr)

find_best_threshold(thresholds, fpr, tpr)

2.2 利用代价函数

除了使用ROC曲线确定最佳阈值之外,代价函数也是一个常用的选择最佳阈值的方法。代价函数的作用是建立混淆矩阵,对模型的不同预测情境进行惩罚,进而得到最优的分类阈值。代价函数的选择需要结合具体应用需求,例如,在银行金融领域,将误判成非恶意(即审核通过)和误判为恶意(审核拒绝)都会带来一定的代价,因此需要设计一个综合考虑这两种代价的代价函数。注意,代价函数的选择需要考虑到模型的质量,否则,代价函数的优化将带来意义不大的结果。

2.3 针对不同正负样本比例的最佳阈值选择

在一些实际应用中,正负样本不均衡的问题比较突出。这种情况下,优化分类阈值选择就显得更为重要。在一些学术研究中,利用PR曲线而非ROC曲线来表现分类器真实性能的方法较为常见。PR曲线横轴为召回率,纵轴为精确率,其中召回率的定义为:TPR = TP / (TP + FN),精确率的定义为:Precision = TP / (TP + FP),其中,TP表示真正例,FP表示假正例,FN表示假反例。

由于PR曲线更注重在召回率高的情况下,精确率的表现。因此,PR曲线比ROC曲线更适用于正负样本比例不均衡的情况。确定最佳阈值的方法和ROC曲线类似,可以选择最靠近右上方(即精确率和召回率都较高)的点作为最佳阈值。

3. 常见的错误理解

在使用ROC曲线选择最佳阈值时,之所以常常出现错误理解,一方面是因为ROC曲线常常被错误解读,另一方面则是因为其应用范围的限制。这里,我们列举几个比较常见的错误理解:

3.1 只关注ROC曲线下面积的大小

尽管ROC曲线上的面积可以直观反映分类器的性能,但我们并不能根据面积的大小就认为一个分类器优于另一个分类器。原因在于,ROC曲线的面积大小受样本分布的影响较大。另外,当正负样本数量不平衡时,ROC曲线的面积大小也可能受到影响。因此,我们在确定最佳阈值时不应只关注ROC曲线的AUC值,而应看其具体的曲线走向。

3.2 ROC曲线上任意一个点都可以用来确定最佳阈值

实际上,ROC曲线上每个点都对应着一个分类阈值,但这并不意味着每个点都适用于最佳阈值的选择。因为对随意选择的阈值而言,除了TPR和FPR的值,我们很难从中推导出更多的信息。因此,我们在选择最佳阈值时,仍要对ROC曲线的数据进行深入的分析。

3.3 ROC曲线适用于所有的二分类模型

由于ROC曲线的设计初衷是考虑在不同阈值下的分类器性能差异,因此,其比较适合用于二元分类器。对于多元分类问题而言,我们可以使用one-vs-all或one-vs-one方法将其转化为二分类问题,进而使用ROC曲线评价分类器性能。但这样的方法还存在一定的局限性,因为不同类别之间的兼容性(如对于某一个样本,多个类别均可以作为其标注)可能会影响模型的性能评价。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签