之前对AUC的认识只是局限在:auc是roc曲线下的面积,其值越接近1越好,对其内部计算方式早就忘了。
找了一些资料,查看了Spark MLLib中计算AUC的源代码。终于对AUC有了一个比较清晰的认识。
1.混淆矩阵与ROC曲线
- 二分类的混淆矩阵
预测\实际 | P | N |
---|---|---|
P' | TP | FP |
N' | FN | TN |
TP + FN = P(正例) | FP + TN = N(负例) |
真正率: TPR = TP / TP + FN (分子为分类正确的正样本数,分母为所有正样本数)
假正率: FPR = FP / FP + TN (分子为分类错误的正样本数,分母为所有负样本数)
- ROC曲线 :(x轴为FPR,y轴为TPR,随阈值threshold变化的曲线)
[upl-image-preview url=http://bbs.2345.net/assets/files/2019-03-27/1553686399-777675-roc.png]
1.(0,0)点 当threshold = 1 时,所有样本都预测为负例,没有正例所以FP = 0,TP = 0,导致FPR = 0,TPR = 0.
2.(1,1)点 当threshold = 0 时,所有样本都预测为正例,没有负例所以TN = 0,FN = 0,导致FPR = 1,TPR = 1.
3.(0,1)点 因为FPR = 0,所以FP = 0 没有假正例 ,因为TPR = 1,所以FN = 0 没有假负例,此时模型100%准确
4.(1,0)点 因为FPR = 1 ,所以TN = 0 没有真负例 ,因为TPR = 0,所以 TP = 0 没有真正例