机器学习评测标准:AUC
AUC的解释:
- 正样本排在负样本之前的概率
- ROC曲线与FP_rate围成的面积【ROC曲线:横坐标是FP_rate(假正率),纵坐标是TP_rate(假负率)】
- 仅用于二分类
要求解AUC避免不了要画ROC,实质上只是求出ROC各点的坐标,那如何画ROC曲线呢?
将样本按照预测分数从大到小排列:
sample | label | predict |
---|---|---|
1 | 1 | 0.9 |
3 | 1 | 0.8 |
2 | 0 | 0.7 |
1:正样本,0:负样本,predict:属于正样本的概率
从高到低,依次将predict作为阈值threshold,当测试样本的predict>=threshold,则认为是正样本P_ image,反之则认为是负样本N_image。如threshold=0.8时,sample1和sample2是P_image,sample3是N_image;此时,有
对于每个threshold都可得到一个(FP_rate,TP_rate),将这些点连线即可。
伪代码:
def sort_by_predict():
return [label, predict]
def get_rate_points():
# 返回所有的 rate_points
return (FP_rate, TP_rate)
def get_auc():
sample_sorted = sort_by_predict()
rate_points = get_rate_points(sample_sorted)
(FP_rate, TP_rate) = (0, 0) # 初始化,(FP_rate, TP_rate)为前一个点的值
for (cur_FP_rate, cur_TP_rate) in rate_points:
area = (cur_FP_rate - FP_rate) * cur_TP_rate # 当前点和前一个点与横坐标为成的小矩形的面积
auc += area
FP_rate = cur_FP_rate
TP_rate = cur_TP_rate
return auc
欢迎转载,转载请标明出处。