Stanford机器学习—第六讲. 怎样选择机器学习方法、系统
误差来源
误差主要来自于偏差和方差。
数学上定义:
通过covariate X 预测 Y ,我们假设存在如下关系:
Y = f(X) + ϵ 满足正态分布均值为0 方差σϵ
模型预测错误定义为:
期望误差分解为三个非负项的和,即本真噪音、bias和 variance。
https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff
本真噪音是任何学习算法在该学习目标上的期望误差的下界;( 任何方法都克服不了的误差)
bias 度量了某种学习算法的平均估计结果所能逼近学习目标的程度;(独立于训练样本的误差,刻画了匹配的准确性和质量:一个高的偏差意味着一个坏的匹配)
variance 则度量了在面对同样规模的不同训练集时,学习算法的估计结果发生变动的程度。(相关于观测样本的误差,刻画了一个学习算法的精确性和特定性:一个高的方差意味着一个弱的匹配)
MSE(mean squared error)可以拆分成bias和variance两部分:
以分类任务为例,均方误差MSE(mean squared error)
其中Y为x对应的真实类标,f(x)为预测标号
则,
泛化误差可分解为偏差、方差和噪声之和。
偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力,强调的是准度。
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响,强调的是稳定性。
噪声则表达了在当前任务上任何学习算法所达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,既能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。
Error = Bias + Variance
Error反映的是整个模型的准确度,Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,Variance反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。
如果我们能够获得所有可能的数据集合,并在这个数据集合上将loss最小化,这样学习到的模型就可以称之为“真实模型”,当然,我们是无论如何都不能获得并训练所有可能的数据的,所以“真实模型”肯定存在,但无法获得,我们的最终目标就是去学习一个模型使其更加接近这个真实模型。
而bias和variance分别从两个方面来描述了我们学习到的模型与真实模型之间的差距。
Bias是 “用所有可能的训练数据集训练出的所有模型的输出的平均值” 与 “真实模型”的输出值之间的差异;
Variance则是“不同的训练数据集训练出的模型”的输出值之间的差异。
Bias与Variance往往是不能兼得的。如果要降低模型的Bias,就一定程度上会提高模型的Variance,反之亦然。
造成这种现象的根本原因是,我们总是希望试图用有限训练样本去估计无限的真实数据。当我们更加相信这些数据的真实性,而忽视对模型的先验知识,就会尽量保证模型在训练样本上的准确度,这样可以减少模型的Bias。但是,这样学习到的模型,很可能会失去一定的泛化能力,从而造成过拟合,降低模型在真实数据上的表现,增加模型的不确定性。
相反,如果更加相信我们对于模型的先验知识,在学习模型的过程中对模型增加更多的限制,就可以降低模型的variance,提高模型的稳定性,但也会使模型的Bias增大。Bias与Variance两者之间的trade-off是机器学习的基本主题。
采用k-fold Cross Validation进行训练,只有1个模型会受到这个异常数据的影响,而其余k-1个模型都是正常的。在平均之后,这个异常数据的影响就大大减少了。
相比之下,模型的bias是可以直接建模的,只需要保证模型在训练样本上训练误差最小就可以保证bias比较小,而要达到这个目的,就必须是用所有数据一起训练,才能达到模型的最优解。因此,k-fold Cross Validation的目标函数破坏了前面的情形,所以模型的Bias必然要会增大。
偏差和方差的估计
偏差和方差的无偏估计见上图。
做多次重复实验,得到不同的f*,然后求期望f_,可得到目标函数f^的无偏估计。这样f_与f^的关系如上图所示。f_与f^之间有偏差误差,f*与f_之间有方差误差。
在A Few Useful Thingsto Know about Machine Learning中提到,可以将泛化误差(gener-alization error)分解成bias和variance理解
Bias: a learner’s tendency to consistently learn the same wrong thing,即度量了某种学习算法的平均估计结果所能逼近学习目标(目标输出)的程度。
Variance:the tendency to learn random things irrespective of the real signal,即度量了在面对同样规模的不同训练集时,学习算法的估计结果发生变动的程度。比如在同一现象所产生的不同训练数据上学习的决策树往往差异巨大,而实际上它们应当是相同的。
上图中靶心为某个能完美预测的模型,离靶心越远,则准确率随之降低。靶上的点代表某次对某个数据集上学习某个模型。纵向上,高低的bias:高的Bias表示离目标较远,低bias表示离靶心越近;横向上,高低的variance,高的variance表示多次的“学习过程”越分散,反之越集中。
偏差,方差与模型的关系
简单模型,偏差较大,这是因为模型简单,可能无法表示到目标函数,导致学习到的函数与目标函数有较大的误差。模型复杂,表示能力较强,进而有可能学习到目标函数,所以会有较小的偏差。
模型越复杂越容易得到较大的方差,简单模型容易得到较小的方差。
模型简单,偏差较大,容易导致欠拟合。模型复杂,方差较大,容易导致过拟合。
如何处理大的偏差和大的方差的?
对于大的偏差(可能会欠拟合),可以重新设计更加复杂的模型。
对于大的方差(可能会过拟合),可以考虑增加数据量。或者可以考虑添加正则项,这样会使得函数变的平滑,函数抖动的不大厉害,方差就会相对变小。但是这样会有可能增加偏差。
复杂的模型能更好的拟合训练集合能更好的拟合训练集合上的点,但是同时高复杂度的模型泛化能力差,造成了高方差。横坐标的右侧是过拟合overfit的情况,而左侧是欠拟合underfit的情况。
更多理解见Understanding the Bias-Variance Tradeoff
过拟合表明采用的模型比真实的数据分布更复杂,而欠拟合表示采用的模型比真实的数据分布要简单。
训练样本往往还有一定的噪音误差,所以如果太追求在训练集上的完美而采用一个很复杂的模型,会使得模型把训练集里面的噪音误差都当成了真实的数据分布特征,从而得到错误的数据分布估计。这样的话,到了真正的测试集上就错的一塌糊涂了(这种现象叫过拟合)。但是也不能用太简单的模型,否则在数据分布比较复杂的时候,模型就不足以刻画数据分布了(体现为连在训练集上的错误率都很高,这种现象较欠拟合)。
模型的选择
交叉验证法。将训练数据集分为不同的训练集和验证集。依次训练不同的模型,然后确定不同模型的平均误差,进而选择合适的模型。最后依据选择的模型,去整体学习训练集,来确定最终的模型参数。这样才能有可能在测试集上得到客观的结果。
Training set is a subset of the dataset used to build predictive models.
Validation set is a subset of the dataset used to assess the performance of model built in the training phase. It provides a test platform for fine tuning model’s parameters and selecting the best-performing model. Not all modeling algorithms need a validation set.
Test set or unseen examples is a subset of the dataset to assess the likely future performance of a model. If a model fit to the training set much better than it fits the test set, overfitting is probably the cause.
训练集(training set) 是用来训练模型或确定模型参数的,如ANN中权值等;
校验集(validation set) 是用来做模型选择(model selection),即做模型的最终优化及确定的,如ANN的结构;
测试集(test set) 则纯粹是为了测试已经训练好的模型的推广能力。当然,test set这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。
针对经验风险最小化算法的过拟合的问题,给出交叉验证的方法。
交叉验证(Cross Validation),有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法,该理论是由Seymour Geisser提出的。
HoldOut检验(Hold-Out Method)或者称为简单交叉验证
步骤:
1、 从全部的训练数据 S中随机选择 中随机选择 sm的样例作为训练集 train,剩余的 作为测试集 作为测试集 test。
2、 通过对训练集训练 ,得到假设函数或者模型 。
3、 在测试集对每一个样本根据假设函数或者模型,得到训练集的类标,求出分类正确率。
4,选择具有最大分类率的模型或者假设。
从严格意义上来说,Hold-Out检验并不算是交叉检验(Cross Validation),因为该方法没有达到交叉检验的思想,而且最后验证准确性的高低和原始数组的分类有很大的关系,所以该方法得到的结果在某些场景中并不具备特别大的说服力。在Hold-Out检验不够有说服力的情形下,有人提出了交叉验证这一个重要思想。
k-折交叉验证(k-fold crossValidation):
在机器学习中,将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试,将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。
1、 将全部训练集 S分成 k个不相交的子集,假设 S中的训练样例个数为 m,那么每一个子 集有 m/k 个训练样例,,相应的子集称作 {s1,s2,…,sk}。
2、每次从分好的子集中里面,拿出一个作为测试集,其它k-1个作为训练集
3、根据训练集训练出模型或者假设函数。
4、 把这个模型放到测试集上,得到分类率。
5、计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率。
这个方法充分利用了所有样本。但计算比较繁琐,需要训练k次,测试k次。
留一法 leave-one-out cross validation
留一法就是每次只留下一个样本做测试集,其它样本做训练集,如果有k个样本,则需要训练k次,测试k次。
留一发计算最繁琐,但样本利用率最高。适合于小样本的情况。
留P验证(Leave-p-out Cross Validation)
留p验证(LpO CV)指的是使用全集X中的p个元素作为测试集,然后剩下的n-p个元素作为训练集。根据数学上的定理可以得到,p个元素的选择方法有n!/((n-p)!p!)个,其中n!表示n的阶乘。在这个意义下,留p验证的时间复杂度也是非常高的。当p=1的时候,留1验证(Leave-one-out Cross Validation)的复杂度恰好是n。
交叉验证(Cross Validation)的好处是可以从有限的数据中获得尽可能多的有效信息,从而可以从多个角度去学习样本,避免陷入局部的极值。在这个过程中,无论是训练样本还是测试样本都得到了尽可能多的学习。
更多理解见 准确测量机器学习模型的误差
英文见 Accurately Measuring Model Prediction Error
更多评价指标见
分类算法中的ROC与PR指标
Recall(召回率) Precision(准确率) F-Measure E值 sensitivity(灵敏性) specificity(特异性)漏诊率 误诊率 ROC AUC
参考文献
http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17.html
bias and variance在机器学习中的应用
Bias-Variance Tradeoff
http://blog.csdn.net/l281865263/article/details/45974589
http://blog.csdn.net/ywl22/article/details/8606166
https://www.zhihu.com/question/27068705
bias和variance
Stanford机器学习—第六讲. 怎样选择机器学习方法、系统
https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff