ROC、AUC
ROC 、AUC
ROC曲线是评价学习器泛化能力的指标,他纵轴是“真正例率”(TPR),横轴是“假正例率”(FPR),需要FPR越小,TPR越高,则模型越好
TPR = TP / (TP + FN) 可以理解为模型对正例的灵敏度
FPR = FP / (TN + FP) 可以理解为模型对负例的特异度
AUC,就是area under ROC curve,ROC曲线下包裹的面积。
一些AUC问题
有位同学提出AUC的相关问题,尝试理解一下:https://zhuanlan.zhihu.com/p/75131938
1、对数据随机均匀采样,对AUC有什么影响?
答:
没有影响。当正负样本分布发生变化时,ROC曲线形状能够基本保持不变。
2、改变训练集、测试集的比例,AUC有什么变化?
答:
几乎没有变化。
手头有一个xgboost模型,全部数据在800w左右,随机抽取10%当测试集,另外90%作为训练集和测试集,AUC为0.87200669;随机抽取50%当测试集,另外50%作为训练集和测试集,AUC为0.87107088。
3、AUC高,一定代表模型效果好吗?
答:
AUC是ROC曲线下面的面积,不同的ROC形状可以得到相同的AUC,就看ROC的“拐点”更靠近(0,0)还是(1,1)。拐点更靠近(1,1)则说明当分类的阈值往下减的时候,TP增长的比FP增长的更慢了,说明此时阈值再往小调已经就过了。但是一些场景可能需要更少的误报,允许少报,也要保证报出来的是正确的,这样来说拐点更靠近(0,0)就比(1,1)的要好。
4、相比RPC和F1,AUC的优势是什么
答:
不受正负样本比变化的影响
当正负样本分布发生变化时,ROC曲线形状能够基本保持不变,而P-R曲线则不能。ROC能尽量降低不同测试集带来的干扰。如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线能够更直观地反映其性能。
5、AUC适用于什么场景
答:
AUC值是一个概率值,当你随机挑选一个正样本以及负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值,AUC值越大,当前分类算法越有可能将正样本排在负样本前面,从而能够更好地分类。
所以AUC适合于排序场景。
6、负样本非常多的情况下,AUC会偏高还是偏低
答:???
qd_pred_frame = pd.DataFrame(preds, columns=['pred']) qd_origin_frame = pd.DataFrame(test_y, columns=['origin']) qd_result_frame = pd.merge(qd_pred_frame, qd_origin_frame, left_index=True, right_index=True) FPR_list, TPR_list = [], [] AUC = 0 for i in range(0,100,2): th = i/100 tp = len(qd_result_frame[(qd_result_frame['pred']>=th)&(qd_result_frame['origin']==1)]) fp = len(qd_result_frame[(qd_result_frame['pred']>=th)&(qd_result_frame['origin']==0)]) fn = len(qd_result_frame[(qd_result_frame['pred']<th)&(qd_result_frame['origin']==1)]) tn = len(qd_result_frame[(qd_result_frame['pred']<th)&(qd_result_frame['origin']==0)]) prc = tp/(tp+fp) rec = tp/(tp+fn) FPR = fp/(fp+tn) TPR = tp/(tp+fn) FPR_list.append(FPR) TPR_list.append(TPR) AUC = AUC + FPR*TPR x = np.array(FPR_list) y = np.array(TPR_list) plt.figure() plt.figure(figsize=(10,10)) plt.xlim(0,1) plt.ylim(0,1) plt.xlabel("FPR") plt.ylabel("TPR") plt.grid() plt.plot(x,y) plt.show()
AUC = 0
for i in range(49):
AUC += 0.5 * (FPR_list[i]-FPR_list[i+1]) * (TPR_list[i+1]+TPR_list[i])
print(f'AUC: {AUC}')
另有一种计算方法,贴上来
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具