AUC的重要性
PS:终于登陆kaggle,发现原始数据的测试集table是直接将女性标1,所以模型精度看似很高,实际提交只有0.77……
今天使用Dense预测Titanic生存数据,深刻体会到了AUC的重要性。
使用2层Dense准确率从0.6直接升到最高0.96,兴冲冲去做O2O优惠券使用预测,做完发现精确度提高很大,结果一算AUC悲剧了……
AUC(Area Under Curve)被定义为ROC曲线下与坐标轴围成的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。AUC越接近1.0,检测方法真实性越高;等于0.5时,则真实性最低,无应用价值。
关键问题是如果二分类样本值大部分均为0,则很容易得到1个高精确度的模型,这时候的衡量标准应该为AUC,避免模型将所有期望均预测为0同样可以得到1个精确度很高的结果。
另记录下今天的收获:
DataFrame行索引重排:
valid = valid.reset_index(drop=True)
lambda:返回的是函数式,应再次输入参数才行
增加归一化后loss曲线变得平滑?这一点需要再次验证,并寻找理论基础
西瓜书p.33:
根据概率预测结果,将样本进行排序,概率直接决定泛化能力。
P-R曲线
查准率(准确率)P=TP/(TP+FP):排序靠前位置截断
查全率(召回率)R=TP/(TP+FN):靠后位置截断
P-R曲线以
查全率为横轴,
查准率为纵轴
查全率越高的同时查准率越大,曲线越靠外围性能越好。
ROC曲线
ROC曲线研究泛化能力,全称‘受试者工作特征’(Receiver Operation Characteristic)
按照预测结果对样例排序,逐个把样本作为正例进行预测,作图,
横轴为‘真正例率’TPR=TP/(TP+FN)
纵轴为‘假正例率’FPR=FP/(TN+FP)
即横轴衡量判断错误的,纵轴衡量判断对的,错误的越大,对的也应该更大才可以
当ROC曲线有交叉时,通过AUC衡量两个模型的优劣
PS:AUC=0.5即在随机猜测……
每日一学
代价敏感错误率
代价敏感错误率:二分类任务两个值很多时候价值不等,需引入二分类代价矩阵costij来衡量分类代价
代价曲线:
横轴:取值为【0,1】的正例代价
纵轴:取值为【0,1】的归一化代价
ROC曲线上的每个点转化为平面上的一条线段,然后取多有线段的下界,围成的面积即为期望总体代价
线段端点:(0,FPR),(1,FNR)
比较检验方法
1.假设检验(单model)
将测试错误率假设为泛化错误率
根据测试错误率估算泛化错误率的分布
通过多次留出法或交叉验证,错误率均值、方差估算
定义变量 τ = 根号k(u-e)/ρ
τ服从t分布
衡量模型泛化能力,双边t检验常用临界值西瓜书P.40
2.交叉验证t检验
两个不同模型k折交叉验证准确率求差并平方,服从t分布
5*2交叉验证,5次2折,每次2折验证前随机打乱数据,使5次数据划分不重复
3.McNemar检验
两个model正确、错误列联表相等
4.Friedman检验与Nemenyi后续检验
多个数据集上比较model性能
偏差与方差
泛化误差可分解为偏差、方差、噪声之和
偏差:model本身的拟合能力
方差:数据变化带来的影响(扰动)
噪声:预测上界,不能预测噪声。