假设我们现在要画一个已经训练好的二分类模型A的ROC曲线。

如下是20个测试样本,第一列代表样本id,第二列代表他们的真实类别(p表示正样本,n表示负样本),最后一列代表训练好的模型A认为每个样本是正样本的概率。

机器学习手绘roc曲线 怎样绘制roc曲线_反例

下面就是此训练好的模型A的ROC曲线的画法:

第一步:按照属于‘正样本’的概率将所有样本排序(如上图所示)
第二步:把分类阈值设为最大,即把所有样例均预测为反例,所以此时得到P和R均为0,即(0,0)
第三步:让我们依次来看每个样本。
对于样本1,如果我们将他的score值做阈值,也就是说,只有score大于等于0.9时,我们才把样本归类到正样本,这么一来, 在ROC曲线图中,样本1对应的混淆矩阵(confusion matrix)为:

*

预测结果

*

真实情况

正例

反例

正例

1

9

反例

0

10

第一个样本score=0.9,所以预测为正样本,其本身也为正样本,其他样本score都<0.9,所以都预测为负样本,从混淆矩阵中,我们可以算出X轴坐标(false positive rate)= 0/(0+10)= 0 和Y轴坐标(true positive rate)= 1/(1+9)= 0.1,所以第一个点为(0,0.1)

对于样本2,如果我们将他的score值做阈值,也就是说,只有score大于等于0.8时,我们才把样本归类到正样本,这么一来, 在ROC曲线图中,样本2对应的混淆矩阵(confusion matrix)为:

*

预测结果

*

真实情况

正例

反例

正例

2

8

反例

0

10

第一个和第二个样本score>=0.8,所以预测为正样本,其本身也为正样本,其他样本score都<0.9,所以都预测为负样本,从混淆矩阵中,我们可以算出X轴坐标(false positive rate)= 0/(0+10)= 0 和Y轴坐标(true positive rate)= 2/(2+8)= 0.2,所以第二个点为(0,0.2)

对于样本3,如果我们将他的score值做阈值,也就是说,只有score大于等于0.7时,我们才把样本归类到正样本,这么一来, 在ROC曲线图中,样本3对应的混淆矩阵(confusion matrix)为:

*

预测结果

*

真实情况

正例

反例

正例

2

8

反例

1

9

第一、二、三个样本score>=0.7,所以预测为正样本,第一、二个样本其本身也为正样本,第三个样本其本身为负样本,其他样本score都<0.7,所以都预测为负样本,从混淆矩阵中,我们可以算出X轴坐标(false positive rate)= 1/(1+9)= 0.1 和Y轴坐标(true positive rate)= 2/(2+8)= 0.2,所以第二个点为(0.1,0.2)

后面都类似,依次将分类阈值设为每个样例的预测值,即依次将每个样例划分为正确。一共可以得到20个点,所画的ROC曲线如下图所示:

机器学习手绘roc曲线 怎样绘制roc曲线_ROC曲线_02


样本数量越多,ROC曲线就越平滑。