机器学习吃瓜记-02
主要内容
西瓜书的第2章 模型评估与选择
。
第2章 模型评估与选择
第2章的主要讲到,现在有了多个模型我们应该如何去判断优劣,以及有哪些方法能够衡量算法的性能。
1.经验误差与过拟合
- 错误率 error rate
假设m个样本中有a个样本分类错误。即错误率\(E=a/m\)。 - 精度 accuracy
而对应的精度定义为\(精度 = 1 - 错误率\)。 - 误差 error
把学习器的实际预测输出与样本的真实输出之间的差异称之为误差。 - 训练误差 training error
学习器在训练集上的误差称为训练误差。 泛化误差 generalization error
在新样本上的误差称为泛化误差。过拟合 overfitting
把训练样本的一般特点都当做一般性质,学习过渡导致泛化性能下降。- 欠拟合 underfitting
与过拟合相反,对训练样本的一般性质尚未学好。 - 验证集 validation set
模型评估与选择中用于评估测试的数据集称为验证集。
过拟合问题
泛化误差generalization
error
是我们主要关心的,我们希望得到泛化误差小的学习器,但是对于新样本事先是无法预测的,所以现在实际情况
中能够做得到的是尽量努力使经验误差最小化,但随之而来的问题就是过拟合overfitting问题
。
机器学习面临的问题通常是NP难也就是不确定问题是否能在多项式时间内解决,则只要相信P≠NP
,则过拟合问题
就是不可避免的。
那么有哪些方法可以改善过拟合?
- 增加样本
- 正则化
- 降维
通常是有这些几种典型的方法来应对过拟合问题。
主要思想在于使得P=NP
即尽量确保问题能在多项式时间内解决,要么给更多选择,要么扩宽答案范围,要么减少维度。
面临问题
随即而来的问题就是会有很多种不同算法不同配置的模型,但是在这众多的模型之中怎么去评估好坏以及如何选择,就出现了模型选择model
selection
问题。
模型选择 model selection
理想状态
: 理想上来说是对模型的泛化误差进行评估,就能评判优劣。
现实状态
: 泛化误差并没有办法直接测得,所以只能用训练误差来近似泛化误差。
2.评估方法
通常方法
: 使用测试集testing set
来测得测试误差testing error
来作为泛化误差的近似。
决定好了如何评估模型,现在需要的是测试集
,而测试集的选取
又有一系列的方法。
留出法 hold-out
主要思想
: 是分层采样stratified sampling
来尽可能保持初始数据集的分布一致性,然后取一部分互斥集合为测试集T。
短板
: 在于原始数据集D和训练集S是有差异的
,但是想要测试集T的评估稳定,增加T的个数会使D与S的差异更大,不增加个数则测试集T的稳定性又会变低。
所以没有一个完美解决方法,而通常是使用2/3~4/5的数据来做训练集,剩余做测试集。
交叉验证法 cross validation
主要思想
: 是将数据集划分为k个互斥子集,也是采取分层采样来保持数据集一致性,轮流做测试集,最后其k个的平均值。
短板
: 跟留出法类似,原始数据集D和训练集S有差异。
交叉验证法还有一个特例是留一法(Leave-One-Out),每次留一个作为测试集,但是缺陷在于运算次数会变得很多。
自助法 bootstrapping
主要思想
:有保留的
采样产生数据集D',根据取极限算得概率大约36.8%的数据始终不会被选到,所以把这部分作为测试集。
短板
: 有保留的采样可能会出现一个数据重复出现,破坏了初始数据集的分布,引入了估计偏差。
自助法在数据集较小或者难以有效划分测试集的时候非常有用。
总结
在数据充足
的时候,尽可能保持原数据集的一致性不引入不必要的误差,即留出法和交叉验证法的表现会偏好。
而数据不充足
的时候,可以适当牺牲原数据集初始分布,使用自助法会有意想不到的表现。
调参与最终模型
在参数调节/调参parameter tuning
时进一步的把训练数据分为训练集和验证集,测试集上的结果用来估计实际使用时的泛化性能,在验证集上的性能来进行模型选择和调参。
3.性能度量
性能度量
性能度量perfomance
measure
是衡量模型泛化能力的评价标准。
不同的性能度量往往会有不同的评判结果,这意味着模型的好坏是相对的,什么样的模型是好不仅取决于算法和数据,还决定于任务需求
。
以下是一些常用的性能度量。
均方误差 mean squared error
回归任务
中最常用的性能度量是均方误差。使用函数值与均值的平方差的总和的大小来评估模型与数据的拟合程度。
\[ E(f ; D)=\frac{1}{m} \sum_{i=1}^{m}\left(f\left(x_{i}\right)-y_{i}\right)^{2} \]错误率error rate与精度accuracy
分类任务
中最常用的两种性能度量。查准率precision、查全率recall
查准率
: 检索出的信息中心有多少比例是用户感兴趣的。
查全率
: 用户感兴趣的信息中有多少被检索出来了。
对于二分类问题,样例根据真实类别与学习器预测类别的分类结果称作混淆矩阵confusion matrix
。
真实情况 | 预测结果 | |
正例 | 反例 | |
正例 | TP 真正例 | FN 假反例 |
反例 | FP 假正例 | TN 真反例 |
查准率precision
\[ P=\frac{T P}{T P+F P} \]查全率recall
\[ R=\frac{T P}{T P+F N} \]P-R曲线
P-R图直观的显示出显示器在样本总体上的查全率、查准率。
在一个学习器的P-R曲线包裹住另一个学习器的曲线时可以断定前者性能一定优于后者,但是大多数情况学习器的P-R曲线是交叉的。
因此需要一个综合考虑查准率、查全率的性能度量。
平衡点Break-Event Point度量
BEP度量是一个查准率=查全率时的取值
。例如图2.3中C的BEP是0.64,基于BEP比较认为学习器A优于B。F1度量
F1是基于查准率和查全率的调和平均harmonic mean
定义的。
\[ \frac{1}{F 1}=\frac{1}{2} \cdot\left(\frac{1}{P}+\frac{1}{R}\right) \]
化简后
\[ F 1=\frac{2 \times P \times R}{P+R}=\frac{2 \times T P}{\text { 样例总数 }+T P-T N} \]
由此继续演变成加权调和平均
\[ \frac{1}{F_{\beta}}=\frac{1}{1+\beta^{2}} \cdot\left(\frac{1}{P}+\frac{\beta^{2}}{R}\right) \]
实际问题中,对于查准率和查全率的重视度有所不同的,例如商品推荐是尽可能打扰用户提供更准确的内容时,查准率更重要。在检索逃犯信息时则更希望尽可能少的漏掉逃犯,所以查全率是更重要的等等。
β > 0
: 度量了查全率对查准率的相对重要性(Van Rijsbergen,1979)。
β = 1
: 退化为标准的F1度量。
β > 1
: 时查全率有更大影响。
β < 1
: 时查准率有更大影响。
调和平均偏好
调和平均和算术平均和集合平均相比,调和平均更重视较小值。
ROC和AUC
ROC曲线
全称受试者工作特征Receiver Operating Characteristic曲线。
- 真正例率TPR
真正利率True Positive Rate,是ROC曲线中的纵轴。
\[ \mathrm{TPR}=\frac{T P}{T P+F N} \] - 假正例率FPR
假正例率False Positive Rate,是ROC曲线中的横轴。
\[ \mathrm{FPR}=\frac{F P}{T N+F P} \]
对角线对应于随机猜测模型
,而点(0,1)对应于将所有正例排在所有反例之前的理想模型
。
AUC
Area Under ROC Curve
AUC指的是ROC曲线下的面积。
\[
\mathrm{AUC}=\frac{1}{2} \sum_{i=1}^{m-1}\left(x_{i+1}-x_{i}\right)
\cdot\left(y_{i}+y_{i+1}\right)
\]
ROC曲线的绘制过程
已经训练得到一个学习器\(f(s)\),现在对测试样本\(m^+\)个正例\(m^-\)个反例进行预测后按照预测值从大到小排序。分别调整阈值画出新增加的真正例率和假正例率,最后以梯形面积公式求和则为AUC的大小。
调整阈值如果真正例率增加则画绿线,假正利率增加为红线,蓝色为即增加真正例率又增加假正利率即调整阈值有两个正好等于阈值的一个真正例和一个假正例增加。例如(s4, 0.47, +), (s5, 0.47, −)。
代价敏感错误率与代价曲线
非均等带价unequal cost
:
在现实中通常不同类型的错误会所造成的后果是不同的,每种任务对风险偏好是不同的。
简单的最小化错误次数演变成希望最小化总体代价total cost
。
- 代价曲线cost curve
横轴是取值为\([0,1]\) 的正例概率代价
\[ P(+) \cos t=\frac{p \times \operatorname{cost}_{01}}{p \times \operatorname{cost}_{01}+(1-p) \times \cos _{10}} \]
纵轴是取值为\([0,1]\) 的归一化代价
\[ \operatorname{cost}_{n o r m}=\frac{\mathrm{FNR} \times p \times \operatorname{cost}_{01}+\mathrm{FPR} \times(1-p) \times \operatorname{cost}_{10}}{p \times \operatorname{cost}_{01}+(1-p) \times \operatorname{cost}_{10}} \]
代价曲线的绘制
ROC曲线上的每一点对应了代价平面上的一条线段,取所有线段的下界围城的面积即为在所有条件下学习器的期望总体代价。
4.比较检验
机器学习的性能比较涉及一下几个因素。
- 希望比较的是
泛化性能
,但是实验获得的是在测试集上的性能,两者未必相同。 - 测试集上的性能与
测试集本身的选择
有很大的关系。 - 机器学习算法本身有一定的
随机性
,即便相同的参数也可能会有不同结果。
统计假设检验hypothesis test
以统计学假设检验的方法来推断出在测试集上观测到学习器A比B好,则A的泛化性能时候再统计意义上优于B的把握有多大。
[待更新]假设检验
假设检验另外写一篇比较详细的文章。
5.偏差与方差
偏差-方差分解bias-variance decomposition
解释学习算法泛化性能的一种重要工具。
偏差-方差分解主要是对学习算法的期望泛化误差(泛化误差的期望)
进行分解。
\[
E(f ; D)=\mathbb{E}_{D}\left[\left(f(\boldsymbol{x} ;
D)-y_{D}\right)^{2}\right]
\]
左侧\(E(f;D)\)是期望泛化误差,其定义是预测值\(f(x;D)\)与标记(实际)值\(y_D\)的平方的期望值。
对公式进行展开整理,最后可对期望泛化误差进行分解。
\[
E(f ;
D)=\operatorname{bias}^{2}(\boldsymbol{x})+\operatorname{var}(\boldsymbol{x})+\varepsilon^{2}
\]
泛化误差可分解为偏差、方差与噪声之和。
偏差的含义
度量了学习算法期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
方差的含义
度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
噪声的含义
表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
- 偏差-方差窘境bias-variance delemma
偏差-方差窘境
假定我们能控制学习算法的训练程度,则在训练程度不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能够被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。
总结
主要内容
这一章内容确实有点多,但是主要思想并不复杂,以围绕如何判断模型优劣,如何衡量算法的性能相对可靠为核心展开。
内容框架
第二章内容的框架是这样的,需求上我们理想状态下是想要测得泛化误差
,但是实际上新样本无法预测
,而现状能够做到的是尽量努力使经验误差最小化
,但伴随着过拟合问题
的到来,最终会有存在不同配置不同参数的许多模型
,如何在其中去判断优劣以及选择
。
核心内容
通过实验,使用测试误差近似泛化误差。现在需要测试集,那么测试集如何选取,选好的测试集从哪几个方面比较,引入了性能度量这么一个评价标准,就有一系列的性能度量从不同角度去衡量算法性能。通常我们面临的问题是一个学习器并不绝对优于另一个学习器时如何去比较模型,引出了ROC、AUC、代价曲线和假设检验等内容。
以上是通过实验估计其泛化能力的方法,但是人们往往想知道为什么
会具有这种性能,就引出了解释学习算法工具偏方-方差分解
。