第2章:模型评估和选择
经验误差和过拟合
评价模型好坏的几个指标:
- 正确率:在m个样本中有a个样本正确,则精度为\(acc = \frac{a}{m}\)
- 错误率:在m个样本中有m-a个样本错误,则误差为\(err = 1- acc\)
- 训练误差: 在训练样本中的误差为训练误差。
- 泛化误差:在测试样本中的误差为泛化误差。
在一个全局样本中,存在3种特征。不同类别样本之间真正的特征。训练集所具有的自身特征。测试集所具有的自身特征。
过拟合:学习器可能由于训练的次数太多,导致学习了训练集自身的特征,导致泛化能力下降。
欠拟合:学习器可能由于数据量少,或者学习器学习能力不足,学习器并没有充分的学习到全局样本真正的特征。
在机器学习的模型选择中,最理想的解决方案是比较泛化误差。但是在实际的操作中,我们无法直接获取泛化误差,只能通过测试集的误差来近似泛化误差。下面,将介绍几种模型评估的选择。
评估方法
一个包含m个样例数据集合\(D=\{(x_1, y_1),(x_2, x_2)..,(x_m, y_m)\}\), 其中训练集合为S,测试集合为T。
留出法
留出法:直接将数据集D划分为两个互斥的集合:训练集合S, 训练集合T, 其中\(D=S \cup T, S \cap T = \phi\)
注意在划分训练集和测试集时,需要两个数据集合的分布保持一致。也就是正负样本的比例两者要相同。这种保留类别比例的方法称为分层采样。
缺点:
- 单次使用留出法会存在训练集和测试集分布不均的情况。比如,对于符合某个特征的样本在训练集中过多,而在测试集中少。所以单次使用留出法并不是很理想。一般的方式是采用多次留出法。然后求泛化误差的平均值作为最终结果。
- 划分训练集和测试集的比例难以控制。若令\(k=\frac{|S|}{|D|}\)表示训练集的占比。当k过大,则测试集量少。导致泛化每次泛化误差的波动大,而且与真实的泛化误差相差很大。若k过小,由于训练集不能近似全局数据,则学习器不能充分学习。一般实验的k值为\([\frac{2}{3} \frac{4}{5}]\).
交叉验证法
交叉验证法:将全局数据集D划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布一致。将k-1个集合作为训练集,剩下1个作为测试集。这样就获得k组训练/测试集集合,返回k个泛化误差的均值。
缺点:
- 交叉验证法在划分k份数据时也会存在划分数据分布不均的时候,解决的方法是采用p次不同的划分策略,每次进行交叉验证。最终结果为p次k折交叉验证。
自助法
自助法:每次随机从D中挑选一个样本,将其拷贝到\(D^{'}\), 然后将该样本放回D中,重复m次则得到了大小为m的训练集集。
下面计算样本在m次随机采样中始终不被采到的概率:
则相当于大概有\(\frac{1}{3}\)的概率是测试集合。
缺点:
- 自助法产生的数据集改变了初始数据集的分布。
调参与最终模型
在大多数模型中都有参数需要设定,在实际中常用的做法是设定参数范围和步长,在一个参数中得到多个待验证值。当有多个参数时,则有指数级别的组合方案。
在研究对比不同算法的泛化能力时,用测试数据上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能进行模型选择和调参。
性能度量
对学习器的泛化能力进行评估的标准称为性能度量。在对比不同模型的能力时,使用不同的性能度量往往会导致不同的结果,所以模型的好坏是相对的。
分类任务中的性能度量
错误率和精度
-
错误率
\[err(f;D)= \int_{x \in D}I(f(x)\ne y)p(x)dx \] -
正确率
\[acc(f;D)= \int_{x \in D}I(f(x)= y)p(x)dx \]
查准率,查全率与F1
对于二分类问题,预测的结果可以分为真正例(TP), 假正例(FP), 真反例(TN),假反例(FN)。
![image-20230215064705983](https://img2023.cnblogs.com/blog/1445856/202302/1445856-20230215064707689-233923564.png)
查准率P:
查全率R:
P-R曲线:
以查全率和查准率为横纵坐标,就可以得到查准率-查全率的P-R曲线
![image-20230215065820408](https://img2023.cnblogs.com/blog/1445856/202302/1445856-20230215065822038-1208154152.png)
P-R曲线可以直观的显示学习器在样本总体上的查全率和查准率。当一个学习器的P-R曲线包住另外一个学习器的曲线则可以说第一个学习器的性能比第二个学习器好。
F1度量:
\(F_{\beta}\)度量:
在很多时候,任务对查准率和查全率的偏好不同,比如在网络安全中,对查全率要求很高,则\(F_{\beta}\)表示对查准率和查全率的不同偏好:
其中\(\beta > 0\)度量了查全率对查准率的相对重要性。\(\beta > 1\)时查全率有更大影响;\(\beta < 1\)时查准率有更大影响。
ROC与AUC:
真正率:所有正样本被预测为正的比例
假正率:所有负样本被预测为正的比例
ROC曲线:根据预测结果对样例为正样本的概率值进行排序。从最高值到最低值依次设为正样本,计算出真正率和假正率作为横纵坐标。
比如当设定第一个为正样本和当设定最后一个样本为正样本时,真正率和假正率如下:
![image-20230215090639131](https://img2023.cnblogs.com/blog/1445856/202302/1445856-20230215090644711-1523587683.png)
如下是一个学习器预测一组数据之后所产生的ROC曲线,其中对角线AUC是随机猜测模型。
![image-20230215090934678](https://img2023.cnblogs.com/blog/1445856/202302/1445856-20230215090935977-497248151.png)
在进行学习器的比较时,当一个学习器的ROC曲线包住另外一个学习器的ROC曲线,则前者优于后者。如果两个ROC曲线交叉,则使用各自的ROC曲线面积进行比较优劣。
AUC:
AUC表示的是ROC曲线所围成的面积,假设ROC曲线是由坐标\(\{(x_1, y_1),(x_2, y_2),...,(x_m, y_m)\}\)的点,按照顺序所连接形成的,则AUC计算如下:
需要注意的是,由于AUC的计算依赖于对样本预测的排序质量,因此AUC一定与排序误差相关,所以我们需要将这种关系放入到AUC的损失计算中。假设,给定\(m^+\)个正样本,\(m^-\)个负样本,\(D^+, D^-\)为正负样本集合,则排序损失定义为:
可以从公式中看出如果对x样本预测为正样本的概率小于负样本的概率则处罚1分,如果相等则出发0.5分。若一个正例在ROC曲线上对应的标记点坐标为(x, y),则\(\sum_{x^- \in D^-}(I(f(x^+) < f(x^-))+\frac{1}{2}I(f(x^+)=f(x^-))))\)为在x之前的负样本所占的比例。则AUC的计算如下:
代价敏感:
在很多任务中,对于不同类型的错误会有不同严重程度的后果。所以我们可以在不同错误中嵌入一个代价成本。在上面计算排序损失中,假设了犯错的成本相同。如果,我们觉得负样本排在正样本前面不可接受,则设置 \(cost > 1\),损失函数如下:
代价曲线:
对于二分类任务,二分类代价矩阵如下:
![image-20230215095210826](https://img2023.cnblogs.com/blog/1445856/202302/1445856-20230215095212269-274805865.png)
代价敏感错误率为
在非均等代价,ROC曲线不能反映出学习器的期待总体代价,但是代价曲线可以达到,正例概率代价如下:
纵轴的取值为[0, 1]的归一化代价
![image-20230215100254790](https://img2023.cnblogs.com/blog/1445856/202302/1445856-20230215100257071-1541448778.png)