虽然有许多指标可以用来评估机器学习模型的表现,比如准确率和召回率,但ROC曲线和CAP曲线对于评估分类模型的效果尤其有用。本文将探讨ROC和CAP曲线的概念,并展示如何使用Python和虚拟数据集来构建这些曲线。
尽管我在研究CAP曲线的文章中没有找到详细的教程,因此决定撰写本文来填补这一空白。
数据集
我创建了一个包含两个特征的数据集:年龄和经验。基于这两个特征,标签被定义为0.0(表示薪水低于20万美元)和1.0(表示薪水不低于20万美元)。
分类
首先,我将数据集分为训练集和测试集,比例为70%和30%。我使用支持向量机分类器和线性核函数进行训练,测试结果显示模型准确率达到95%。
性能评估
受试者工作特征曲线 (ROC)
ROC曲线,又称灵敏度曲线,是一种评估分类模型性能的有效方法。它通过真阳性率(TPR)与假阳性率(FPR)之间的关系来衡量模型效果。ROC曲线下的面积越大,说明模型区分不同类别的能力越强。
导入文件并创建基线
首先,我从sklearn.metrics
导入roc_curve
和auc
,以便能够创建ROC曲线并计算其下的面积。我还将图像尺寸设定为20x12,并创建了一个从(0,0)到(1,1)的基线。
计算概率并确定TPR和FPR
接下来,使用predict_proba
方法计算预测概率,并将结果存储在变量probs
中。我选择了第二类的概率(即薪水不低于20万美元的概率)。roc_curve
函数生成了ROC曲线,并返回了FPR、TPR和阈值。最后,我利用这些值计算ROC曲线下的面积,命名为roc_auc
。
绘制ROC曲线
我使用FPR作为X轴,TPR作为Y轴绘制曲线,颜色设为绿色,线条宽度为4。这条曲线的标签包含了ROC曲线下面积,X轴标签为假阳性率,Y轴标签为真阳性率。标题为“受试者工作特征曲线”,图例位于右下角,字体大小为16。
ROC曲线下面积为0.98,表明模型表现优异。
累积精度曲线 (CAP)
CAP曲线用于分析模型如何以最少的尝试次数有效地识别所有目标类别。在此数据集中,我试图评估支持向量机分类器识别薪水不低于20万美元个体的速度。
计算每种类别的数量
首先,我统计了测试数据中的总样本数,并将结果保存在变量total
中。接着,我分别计算了两类样本的数量,并将其保存在class_1_count
和class_0_count
中。我还将图像尺寸设定为20x12。
随机模型
首先,我绘制了一个随机模型,该模型假设理想情况下,1.0类的正样本检测将呈线性增长。该线为红色虚线,标签为“随机模型”。
完美模型
接着,我绘制了理想的模型,它能够一次性检测出所有1.0类的样本。这条线为灰色,标签为“完美模型”。
训练模型(支持向量分类器)
最后,我绘制了支持向量分类器的结果。同样地,我从probs
中提取了第二类的概率,并将probs
与y_test
合并。然后,我按概率降序排列这两组数据,以便概率最大的样本首先出现。我使用np.cumsum()
函数计算累积和,并绘制了蓝色曲线,标签为“支持向量分类器”。我还绘制了其他两个模型的曲线。
运用曲线下面积进行CAP分析
一种分析CAP曲线的方法是通过计算曲线下面积。我们将随机模型下的面积视为A。然后,我们按照以下步骤计算精度:
精度越接近1,说明模型越好。根据计算,该模型的精度约为0.97,非常接近1,表明模型确实有效。
通过绘图进行CAP分析
另一种分析方法是通过观察已绘制的曲线。具体步骤如下:
如果该比例超过90%,则需要警惕过拟合问题。
我通过计算总测试数据的50%来确定垂直线的位置,并绘制了从这一点到训练模型的垂直虚线。接着,我绘制了从交点到Y轴的直线,并计算了1.0类标签相对于总1.0类标签的比例,结果为93.55%。
虽然比例高于90%,但这是可以预期的结果。在数据集和分类的初步分析中,模型在划分数据方面表现良好。尽管我在这里使用的是测试数据,但同样的方法也可应用于训练数据,以评估模型在训练数据上的表现。
结论
本文介绍了如何使用Python计算ROC曲线和CAP曲线,并展示了如何分析这些曲线。