Part3 模型评估
1. 评估方法:
留出法
交叉验证法:介绍一下交叉验证法,解决什么问题存在的
K折交叉验证:将可用数据划分为K个分区(K通常取4或5),实例化K个相同的模型,将每个模型在K-1个分区上训练,并在剩下的一个分区上进行评估。模型的验证分数等于K个验证分数的平均值。解决小数据集而存在的
自助法(bootstrap):
每次随机从样本空间D中有放回采样一个样本,重复m次,得到有m个样本的样本空间D’
lim
n
→
+
∞
(
1
−
1
m
)
m
=
1
e
≈
0.368
\lim_{n\to+\infty}(1-\frac{1}{m})^m=\frac1e\approx0.368
n→+∞lim(1−m1)m=e1≈0.368
即通过自主采样,初始数据集中约有36.8%的样本未出现在采样数据集D’中,可用这部分数据作为测试集,这就是包外估计 ;自助法会引入估计偏差,常采用留出法和交叉验证法
**2. **损失函数
回归问题:
-
平方损失:
缺点:对异常值较为敏感,不够鲁棒
M S E = 1 m ∑ ( f ( x i ) − y i ) 2 MSE=\frac1m\sum({f(x_{i})-y_{i}})^2 MSE=m1∑(f(xi)−yi)2
-
绝对值损失
特点:对异常值表现较好,缺点是不是处处可导,不容易优化
∣ y − f ( x ) ∣ |y-f(x)| ∣y−f(x)∣ -
Huber损失
对于分类问题来讲,损失函数中的 f ( x ) f(x) f(x)并不是预测出来的0或1的值,对于LR f ( x ) = w x + b f(x)=wx+b f(x)=wx+b,对于adaboost来讲, f ( x ) = ∑ j = 1 t g j ( x ) f(x)=\sum_{j=1}^t g_j(x) f(x)=∑j=1tgj(x),最终的分类结果是 s i g n ( f ( x ) ) sign(f(x)) sign(f(x)),对于SVM, f ( x ) = y i ( w x i + b ) f(x)=y_i(wx_i+b) f(x)=yi(wxi+b)可以认为是到各个点到分类间隔的距离
分类问题:
-
0-1损失
特点:不连续,非凸,优化困难
L ( x ) = { 0 i f f ( x ) = y 1 i f f ( x ) ! = y L(x)=\left\{ \begin{array}{rcl} 0 &{if f(x)=y}\\ 1 &{if f(x)!=y}\\ \end{array} \right. L(x)={01iff(x)=yiff(x)!=y -
交叉熵损失(LR)——类别为{-1,1}
L ( y , f ( x ) ) = ∑ log ( 1 + e − y f ( x ) ) L(y,f(x))=\sum\log(1+e^{-yf(x)}) L(y,f(x))=∑log(1+e−yf(x))
推导:
g ( f ( x ) ) = P ( y = 1 ∣ x ) = 1 1 + e − f ( x ) g(f(x))=P(y=1|x)=\frac1{1+e^{-f(x)}} g(f(x))=P(y=1∣x)=1+e−f(x)1
则:
P ( y = − 1 ∣ x ) = 1 − P ( y = 1 ∣ x ) = 1 1 + e f ( x ) P(y=-1|x)=1-P(y=1|x)=\frac1{1+e^{f(x)}} P(y=−1∣x)=1−P(y=1∣x)=1+ef(x)1
利用极大似然思想,使得
F ( x ) = ∏ ( 1 1 + e − y i f ( x i ) ) F(x)=\prod(\frac1{1+e^{-y_if(x_i)}}) F(x)=∏(1+e−yif(xi)1)
F ( x ) F(x) F(x)最大,则两边同取对数,得到
L ( y , f ( x ) ) = log ( 1 + e − y f ( x ) ) L(y,f(x))=\log(1+e^{-yf(x)}) L(y,f(x))=log(1+e−yf(x))
求 m i n ( L ) min(L) min(L)即可 -
交叉熵损失——类别为{0,1}
L ( y , f ( x ) ) = ∑ y log f ( x ) + ( 1 − y ) log ( 1 − f ( x ) ) L(y,f(x))=\sum y\log f(x)+(1-y)\log(1-f(x)) L(y,f(x))=∑ylogf(x)+(1−y)log(1−f(x))
求 a r g m a x ( L ) argmax(L) argmax(L) -
对数似然代价函数(当为二分类时,与交叉熵相等):
L ( y , f ( x ) ) = ∑ i = 1 m ∑ j = 1 ∣ D ∣ p ( y i , y i ′ ) l o g ( f ( x i j ) ) L(y,f(x))=\sum_{i=1}^{m}\sum_{j=1}^{|D|} p(y_i,y_i')log(f(x_{ij})) L(y,f(x))=i=1∑mj=1∑∣D∣p(yi,yi′)log(f(xij))
其中y n y_{n} yn':第n个样本的预测label
y n y_{n} yn:第n个样本的真实label
f ( x n ) f(x_n) f(xn):学习器将第n个样本预测为y_i’的概率p ( y , y ′ ) = { 0 i f y ′ ! = y 1 i f y ′ = y p(y,y')=\left\{ \begin{array}{rcl} 0 &{if y'!=y}\\ 1 &{if y'=y}\\ \end{array} \right. p(y,y′)={01ify′!=yify′=y
-
Hinge Loss
L ( y , f ( x ) ) = m a x ( 0 , 1 − y f ( x ) ) L(y,f(x))=max(0,1-yf(x)) L(y,f(x))=max(0,1−yf(x))
- 指数损失(Adaboost):
L ( y , f ( x ) ) = e − y f ( x ) L(y,f(x))=e^{-yf(x)} L(y,f(x))=e−yf(x)
3.度量指标
先说一下性能度量指标和损失函数的关系,度量指标通常是对模型的性能进行度量的,比较他与真实值的差距,不一定可导的,但是损失函数一般要求可导,所以一般的损失函数基本上都可以作为一个度量指标,比如mse,交叉熵什么的,但是还有一些独特的度量指标
分类问题:AUC,查准率(ACC),查全率(召回)
回归问题:还是mse比较多
推荐排序问题:GAUC,NDCG
AUC
排序模型的AUC和分类问题就有了点偏差,比如在ctr预估中,我们希望把用户更容易点击的排在前面,我们依据模型给出的ctr-score对样本从大到小排序,假设为m个样本,则rank分从高到低依次为m,m-1…1,然后把正样本取出,查看正样本的排序位置,依据以下公式计算:
A U C = ∑ r a n k p o s i t i v e − M ( M + 1 ) 2 M × N AUC=\frac{\sum rank_{positive}-\frac{M(M+1)}{2}}{M\times N} AUC=M×N∑rankpositive−2M(M+1)
举个例子:
当有不同的用户的时候,不同用户之间的点击率其实并不能够直接比较,这样就会造成全局AUC失真,进而提出groupauc(GAUC)可能auc这个指标失真了,因为用户广告之间的排序是个性化的,不同用户的排序结果不太好比较,这可能导致全局auc并不能反映真实情况。
GAUC
GAUC就是分别对每个用户计算其AUC,然后求加权平均,实际处理时权重一般可以设为每个用户view的次数,或click的次数,而且一般计算时,会过滤掉单个用户全是正样本或负样本的情况。
NDCGhttps://www.cnblogs.com/by-dream/p/9403984.html
先说DCG,我们把搜索结果按照模型分数从高到低排个序,给一个rank序列,第一名为1,第二名为2…以此类推,假设我们搜索结果是p,则
D C G = ∑ i = 1 p r e l i log 2 ( r a n k i + 1 ) DCG=\sum_{i=1}^p{\frac{rel_i}{\log_2(rank_i+1)}} DCG=∑i=1plog2(ranki+1)reli
r e l i rel_i reli代表实际的优劣高低评分。
IDCG就是按照实际的优劣高低评分从高到低排列,计算所得的DCG,则nDCG=DCG/IDCG
举个例子:
假设搜索回来的6个结果,其相关性分数分别是 3、2、3、0、1、2
i | reli | log2(i+1) | reli /log2(i+1) |
---|---|---|---|
1 | 3 | 1 | 3 |
2 | 2 | 1.58 | 1.26 |
3 | 3 | 2 | 1.5 |
4 | 0 | 2.32 | 0 |
5 | 1 | 2.58 | 0.38 |
6 | 2 | 2.8 | 0.71 |
则DCG=3+1.26+1.5+0+0.38+0.71 = 6.86
我们对返回的结果重新排序,依据兴趣度(也就是实际的评分)进行排序,如下
i | reli | log2(i+1) | reli /log2(i+1) |
---|---|---|---|
1 | 3 | 1 | 3 |
2 | 3 | 1.58 | 1.89 |
3 | 3 | 2 | 1.5 |
4 | 2 | 2.32 | 0.86 |
5 | 2 | 2.58 | 0.77 |
6 | 1 | 2.8 | 0.35 |
则IDCG=3+1.89+1.5+0.86+0.77+0.35 = 8.37
所以NDCG@6= 6.86/8.37 = 81.96%
3.P-R,ROC,AUC
预测结果(+) | 预测结果(-) | |
---|---|---|
真实情况(+) | TP | FN |
真实情况(-) | FP | TN |
-
准确率
A c c u r a c y = n c o r r e c t n t o t a l = T P + T N t o t a l Accuracy=\frac{n_{correct}}{n_{total}}=\frac{TP+TN}{total} Accuracy=ntotalncorrect=totalTP+TN
受样本不均衡影响较大 -
精确率
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP -
召回率
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP -
P-R曲线
纵轴为精确率,横轴为召回率,当一个学习器A的P-R曲线被另一个B完全包住,则性能A优于B,当两个PR曲线有交叉时,看与y=x的相交点的横轴坐标,越大证明性能越好
P-R曲线上的点的含义:在某一阈值下,学习器将大于该阈值的输出为+,小于该阈值的输出为-,与此相对应的Precision和Recall
-
F1-score
F 1 = 2 × p r e c i s i o n × r e c a l l p r e c i s i o n + r e c a l l F1=\frac{2\times precision\times recall}{precision+recall} F1=precision+recall2×precision×recall
两者的调和平均值,介于0-1之间 -
ROC曲线
T P R = T P T P + F N = R e c a l l TPR=\frac{TP}{TP+FN}=Recall TPR=TP+FNTP=RecallF P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP
AUC为ROC曲线下的面积,一般处于0.5-1之间,因为若AUC<0.5,把预测的正样本变成负样本,把负样本变成正样本,就可以得到一个更好的分类器
ROC曲线的绘制,变换学习器预测为正类的阈值,得到在不同阈值下,学习器对应的TPR以及FPR,连接即为ROC曲线
AUC的实际意义,任意取一个正样本和负样本,模型预测正样本的评分高于负样本的概率
4. 偏差与方差
偏差度量了学习算法的期望预测与真实结果的偏离程度,刻画了算法本身的拟合能力
b
i
a
s
=
(
f
ˉ
(
x
)
−
y
)
2
bias=(\bar f(x)-y)^2
bias=(fˉ(x)−y)2
方差度量了同样大小的训练集变动导致的学习性能的变化,刻画了数据扰动的影响
误差=偏差+方差
噪声表达了当前任务上任何学习算法所能达到的期望泛化误差的下界
随着训练程度的增加,偏差逐渐减小,方差逐渐增大,即欠拟合是偏差大,方差小,过拟合是方差大,偏差小
5. 过拟合和欠拟合
过拟合:偏差小,方差大
解决方案:
- 获取更多的训练数据
- 降低模型复杂度
- 正则化方法
- 集成学习bagging
欠拟合:偏差大,方差小
解决方案:
- 添加新特征(升维度)
- 增加模型复杂度
集变动导致的学习性能的变化,刻画了数据扰动的影响
误差=偏差+方差
噪声表达了当前任务上任何学习算法所能达到的期望泛化误差的下界
随着训练程度的增加,偏差逐渐减小,方差逐渐增大,即欠拟合是偏差大,方差小,过拟合是方差大,偏差小
5. 过拟合和欠拟合
过拟合:偏差小,方差大
解决方案:
- 获取更多的训练数据
- 降低模型复杂度
- 正则化方法
- 集成学习bagging
欠拟合:偏差大,方差小
解决方案:
- 添加新特征(升维度)
- 增加模型复杂度
- 减小正则化系数