机器学习 周志华 学习笔记
总目录
世上只有一种投资是只赚不赔的,那就是学习。
当你的的能力还驾驭不了你的目标时,
就应该沉下心来历练;
当你的才华撑不起你的野心时,
就应该静下心来学习
第二章 模型评估与选择
2.1 经验误差与过拟合
- 错误率(Error Rate): 分类错误的样本数占样本总数的比例. 如果在m个样本中, 有a个样本分类错误, 则错误率 E = a m E=\frac{a}{m} E=ma.
- 精度(Accuracy): 精度 = 1 - 错误率 ,
- 误差(Error): 学习器的实际预测输出与样本的真实输出之间的差异.
- 训练误差(training error):学习器在训练集上的误差,又称为经验误差(empirical error)
- 泛化误差(generalization):学习器在新样本上的误差
- 代价(cost):也称为损失,指将某种类别样本预测为另一种类别时付出的代价,与之相对应的计算损失的函数是代价函数(损失函数)
- 经验风险:学习器在训练集上的风险。在实际训练学习器时,常见的做法是经验风险最小化(Empirical Risk Minimization,ERM)。
- 过拟合(Overfitting): 学习器把训练样本学的太好, 很可能已经把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质,所导致的泛化性能下降. 有很多种因素可能导致过拟合, 其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特征都学到了. 过拟合是无法避免的, 我们所能做的只是’缓解’, 或者说减小风险.
- 欠拟合(Underfitting): 指学习器对训练样本的一般性质尚未学好. 学习力低下.
- 模型选择(Model Selection): 在解决现实问题时, 对不同算法模型的选择. 对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型.
2.2 评估方法
本节介绍了三种模型评估方法:留出法、交叉验证法、自助法(也称 bootstrap )
测试集(Testing Set): 用于测试学习器对新样本的判别能力, 然后以测试集上的’测试误差’(Testing Error)作为泛化误差的近似. 通常假设测试样本也是从样本真实分布中独立分布采样而得. 单需注意的是, 测试集应该尽可能与训练集互斥, 即测试样本尽量不在训练集中出现, 未在训练过程中使用过.
2.2.1 留出法 (hold-out)
- 留出法(Hold-Out): 直接将数据集D划分为两个互斥的集合, 其中一个集合作为训练集S, 另一个作为测试集T, 即 , ,
在S上训练出模型后, 用T来评估其测试误差, 作为对泛化误差的估计. 需要注意的是, 训练/测试集的划分要尽可能保持数据分布的一致性,
避免因数据划分过程引入额外的偏差而对最终结果产生影响, 例如在分类任务中至少要保持样本的类别比例相似. - 分层采样(Stratified Sampling): 如果从采样(Sampling)的角度来看待数据集的划分过程,
则保留类别比例的采样方式通常称为’分层采样’(Stratified Sampling). - 在使用留出法时, 一般要采用若干次随机划分, 重复进行实验评估后取均值做为留出法的评估结果.
- 我们希望评估的是用D训练出的模型的性能, 但留出法需划分训练/测试集, 这样就会导致一个窘境: 若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型, 但由于T比较小, 评估结果可能不够稳定准确; 若令测试集T多包含一些样本,则训练集S与D差别更大了, 被评估的模型与用D训练出的模型相比可能有比较大的差别, 从而降低了评估结果的保真性(Fidelity).这个问题没有完美的解决方案, 常见做法是将大约 的样本用于训练, 剩余样本用于测试.
2.2.2 交叉验证法
交叉验证法(cross validation)先将数据集 D 划分为 k 个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从 D 中通过分层采样得到. 然后,每次用 k-1 个子集的并集作为训练集,余下的那个子集作为测试集,这样就可获得 k 组训练/测试集,从而可进行 k 次训练和测试,最终返回的是这 k 个测试结果的均值。交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值,为强调这一点,通常把交叉验证法称为 " k 折交叉验证"
假定数据集 D 中包含 m 个样本,若令 k=m , 则得到了交叉验证法的一个特例:留一法(Leave-One-Out,简称 LOO). .留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。
为了减少因样本划分不同引入的误差,k折交叉验证通常要随机使用不同的划分重复P次,最终评估结果是这P次k折交叉验证结果的均值,列“10次10折交叉验证”,与“100次留出法”,都是进行100次训练。
2.2.3 自助法
自助法”,直接用自主采样法为基础,在给定包含m个样本的数据集D,每次随机从D中取一个样本,放在D’中,然后将样本放回原有的样本中,进行重复取样(执行m次),也就是又放回的取样,最后得到D’,这就是自主采样的结果,而在D’中包含D中的元素多次出现,而另一部分不会出现,样本在m次采样中始终不被采到的概率是 [公式] ,取极限:
初始的数据集D中约有36.8%的样本为被采集到数据集D’。于是用D’做训练集,D-D’做测试集(也就是未采集的36.8%部分元素)。自助法对于数据集较小,难以划分为训练/测试集是很有用。
自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。
每个算法按某组参数配置训练之后都会得到一个模型。 算法本身的一些参数,例如 k 近邻的近邻个数 k、支持向量机的参数 C,就是这里提到的算法参数,亦称超参数。
算法训练后会得到一个模型,例如支持向量机最终会得到 w 和 b 具体的值,这就是模型参数。用模型参数就可以对未见样本做预测了。
有时算法需要从候选超参数中选择使用其一,例如支持向量机的参数 C;这时需要先将训练集继续划分为两部分,其中一部分(暂称为小训练集)用于训练使用了不同候选超参数的模型,然后将剩余部分(即验证集)用于测试,进 而基于验证集测试结果选出较好的超参数;然后,再以此超参数为准,在整个训练集上重新训练,再用测试集进行测试其性能。
2.3 性能度量
回归任务最常用的性能度量是"均方误差" (mean squared error):
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\sum_{i=1}^m(f(\bm{x_i})-y_i)^2 E(f;D)=m1i=1∑m(f(xi)−yi)2
对于连续函数,数据分布 D 和概率密度函数 p(.), 均方误差可描述为:
E ( f ; D ) = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x E(f;D)=\int_{\bm{x}\sim D}(f(\bm{x})-y)^2p(\bm{x})dx E(f;D)=∫x∼D(f(x)−y)2p(x)dx
分类错误率定义为:
E ( f ; D ) = 1 m ∑ i = 1 m II ( f ( x i ) = ̸ y i ) E(f;D)=\frac{1}{m}\sum_{i=1}^m\textrm{II}(f(\bm{x_i}) =\not y_i) E(f;