机器学习之模型评估

过拟合与欠拟合

过拟合(over-fitting)

过拟合其实就是所建的机器学习模型或者是深度学习模型在训练样本中过度学习,将训练样本的误差等特点也当作样本的一般特性,导致在验证数据集以及测试数据集中表现不佳。

欠拟合

欠拟合值机器学习模型并没有将样本的一般性质学好。

模型评估

使用实验测试来对模型的泛化能力做出评估进而做出选择,通常使用测试集对模型识别新样本能力进行测试。

留出法

“留出法”(hold-out)直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。另一个需注意的问题是,即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割,这些不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

另外使用留出法会导致一个窘境:若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定准确;若令测试集T多包含一些样本,则训练集S与D差别更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。这个问题没有完美的解决方案,常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。可从“偏差-方差”的角度来理解:测试集小时,评估结果的方差较大;训练集小时,评估结果的偏差较大。

这个问题没有完美的解决方案,常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

交叉验证

“交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。

留一法

留一法是交叉验证的一个特例,当数据集中包含M个样本,则则做m折交叉验证(k=M),在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。然而,留一法的缺点是训练开销非常大。

自助法

自助法以自助采样法为基础,给定包含m个样本的数据集D,我们对它进行采样产生数据集D’;每次随机从D中挑选一个赝本,将其拷贝放入D’,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,就得到了包含m个样本的数据集D’,这就是自助采样的结果。

自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。

然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。

解决方式

过拟合

本小节内容总结自:https://blog.csdn.net/heyongluoyao8/article/details/49429629

  1. 早停(early stopping):Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。
  2. 增大数据集:可通过从数据源头采集更多数据、过采样、复制原有数据并加上随机噪声、根据当前数据集估计数据分布参数,使用该分布产生更多数据等
  3. 减小特征维度
  4. 正则化:正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则等。
    • 正则项是为了降低模型的复杂度,从而避免模型区过分拟合训练数据,包括噪声与异常点(outliers)。从另一个角度上来讲,正则化即是假设模型参数服从先验概率,即为模型参数添加先验,只是不同的正则化方式的先验分布是不一样的。这样就规定了参数的分布,使得模型的复杂度降低(试想一下,限定条件多了,是不是模型的复杂度降低了呢),这样模型对于噪声与异常点的抗干扰性的能力增强,从而提高模型的泛化能力。还有个解释便是,从贝叶斯学派来看:加了先验,在数据少的时候,先验知识可以防止过拟合;从频率学派来看:正则项限定了参数的取值,从而提高了模型的稳定性,而稳定性强的模型不会过拟合,即控制模型空间。
    • 另外一个角度,过拟合从直观上理解便是,在对训练数据进行拟合时,需要照顾到每个点,从而使得拟合函数波动性非常大,即方差大。在某些小区间里,函数值的变化性很剧烈,意味着函数在某些小区间里的导数值的绝对值非常大,由于自变量的值在给定的训练数据集中的一定的,因此只有系数足够大,才能保证导数的绝对值足够大。
  5. Dropout:在神经网络中,有一种方法是通过修改神经网络本身结构来实现的,其名为Dropout。在训练开始时,随机得删除一些(可以设定为一半,也可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变,然后按照BP学习算法对ANN中的参数进行学习更新(虚线连接的单元不更新,因为认为这些神经元被临时删除了)。这样一次迭代更新便完成了。下一次迭代中,同样随机删除一些神经元,与上次不一样,做随机选择。这样一直进行瑕疵,直至训练结束。

欠拟合

欠拟合较好解决,例如:增加模型迭代次数、增加模型复杂程度、增加样本特征维数等。

性能度量

错误率与精度

错误率和精度是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务。

错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。

查准率、查全率与F1

这几个指标在信息检索、Web搜索等应用中经常出现,例如在信息检索中,我们经常会关心“检索出的信息中有多少比例是用户感兴趣的”“用户感兴趣的信息中有多少被检索出来了”。“查准率”(precision)与“查全率”(recall)是更为适用于此类需求的性能度量。

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为 $TP$ (真正例,true positive)、 $FP$ (假正例,false positive)、 $TN$ (真反例,true negative)、 $FN$ (假反例,false negative)四种情形,令$TP$、$FP$、$TN$、$FN$分别表示其对应的样例数,则显然有$TP+FP+TN+FN=D$.分类结果的“混淆矩阵”(confusion matrix)如下表:

真实情况 预测正例 预测反例
正例 $TP$ $FN$
反例 $FP$ $TN$

查准率$P$与查全率$R$定义为:
$$P={TP\over TP+FP}$$

$$R={TP\over TP+FN}$$
F1定义为:
$$F1={2\times P\times R\over P+R}={2\times TP\over D+TP-TN}$$
其中$D$为样例总数。

ROC与AUC

AUC是一个模型评价指标,只能用于二分类模型的评价,AUC是Area under curve的首字母缩写,其值等于ROC曲线下的面积。ROC曲线的x轴是伪阳性率(false positive rate),y轴是真阳性率(true positive rate)。ROC曲线如下图:
机器学习之模型评估/ROC.png

ROC曲线如何绘制?将大多机器学习模型处理二分类问题都将输出测试样本属于正例的概率,将此概率从大到小排列,得到如下表:

ID 正例概率 实际情况
1 0.85 正例
2 0.83 正例
3 0.82 正例
4 0.81 反例
999 0.05 反例
1000 0.02 正例

依次调整阈值使前 $k$ 个样本为正例,分别计算真阳性率与伪阳性率,并在曲线中画点。例如阈值为0.85时($k=1$),仅有第一个样本分类为正例,则真阳性率为1,伪阳性率为0,因此可以得到左上角的点。当画出所有点后,依次连接成ROC曲线。

偏差与方差

$$E(f;D)=bias^2(x)+var(x)+\epsilon^2$$
泛化误差为偏差方差与噪声之和。

  1. 偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
    $$bias^2(x)={(\overline{f}(x)-y)^2}$$
  2. 方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
    $$var(x)=\mathbb{E}_D\big[(f(x;D)-\overline{f}(x))^2\big]$$
  3. 噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
    $$\epsilon^2=\mathbb{E}_D\big[(y_D-y)^2\big]$$

偏差方差窘境

机器学习之模型评估/error.png

假如学习算法训练不足时,此时学习器的拟合能力不够强,这个时候偏差主导了算法的泛化能力。随着训练的进行,学习器的拟合能力逐渐增强,偏差逐渐减小,但此时通过不同数据学习得到的学习器就可能会有较大的偏差,即此时的方差会主导模型的泛化能力。若学习进一步进行,学习器就可能学到数据集所独有的特征,而这些特征对于其它的数据是不适用的,这个时候就是发生了过拟合。

Bagging和Boosting

Bagging是通过重采样的方法来得到不同的模型,假设模型独立则有:
$$E(\frac{\sum _ iE(X _ i)}{n})=E(X _ i)$$
$$Var(\frac{\sum _ iVar(X _ i)}{n})=\frac{1}{n}Var(X _ i)$$
Bagging主要可以降低的是方差。

而Boosting每一次都关注使得整理的loss减少,很显然可以降低bias。

此部分可参考:https://www.zhihu.com/question/26760839

本文标题:机器学习之模型评估

文章作者:微石

发布时间:2018年07月11日 - 10:07

最后更新:2018年08月05日 - 21:08

原始链接:akihoo.github.io/posts/712a0b5b.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。