西瓜书学习-第一、二章

179 阅读7分钟

Cha1 绪论

1.1 引言

  • 机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。
  • 机器学习所研究的主要内容,是关于在计算机上从数据中产生“模型”(model)的算法,即“学习算法”(learning algorithm).
  • 计算机科学是研究关于“算法”的学问,那么类似的,可以说机器学习是研究关于“学习算法”的学问。

1.2基本术语

  • 经验误差:在训练集上的误差
  • 泛化误差:在新样本上的误差
  • 过拟合和欠拟合:简单来说就是拟合太好了和拟合不够
  • 评估方法:
    • 留出法(正常划分训练集和测试集)
    • 交叉验证法(分为k组,取出一组作为测试集,一共有k次训练),重复p次,即“p次k折交叉验证”交叉验证一个特例:留一法,即每个子集包含一个样本
    • 自助法:在数据集D中有放回的采样得到D’,将D’作为训练集,D\D‘即剩下的作为测试集,这样的测试 结果亦称“包外估计”,自主法适用于小数据集、难以划分数据集时使用
  • 性能度量:
    • 错误率和精度
    • 查准率和查全率(PR曲线),分别为预测的正例中有多少对的、真的正例中有多少被预测出来的
    • 度量,即分别为查准率和查全率的调和平均、加权调和平均
    • ROC曲线(真正例率与假正例率)、AUC(ROC曲线下的面积)
    • 代价敏感错误率和代价曲线

Cha2 模型评估与选择

2.1 经验误差与过拟合

精度=1-错误率=1-分类错误的样本数量/分类样本总数量

误差:我们把学习器的实际预测输出与样本的真实预测输出之间的差异称为误差(error)。在训练集上的误差成为训练误差(training error)或经验误差(empricial error),在测试集上的误差成为测试误差(test error),在新样本上的误差成为泛化误差(generalized error)。

  • 我们的目标是:让,泛化误差或测试误差,达到最小值。
  • 我们能够做到的是:让,训练误差或经验误差,达到最小值。

如果我们选择让学习器把样本学习的“很好”(让训练误差或经验误差达到最小),那么可能会将训练集的样本特有特征也考虑进入分类算法内,从而使得对非训练集数据进行预测时产生偏差,降低泛化能力。这种现象叫做过拟合。 反之,如果为了避免将过多无关的样本特有元素考虑进入分类算法,而选择惩罚“学习”行为,有可能回导致没有学习到重要的特征,这种现象叫做欠拟合。

简而言之:目标和实际能力的区别,会导致过拟合和欠拟合的问题。

从P!=NP定理容易发现,欠拟合容易避免,而过拟合问题总是存在(见西瓜书)。

在现实任务中,需要选择学习算法和参数配置,选择的过程就是“模型选择”问题。

2.2 评估方法

我们通常通过泛化误差来对学习算法和参数配置进行选择,这就需要我们构建测试集(testing set),并用测试误差(testing error)作为泛化误差(generalized error)的近似。

需要注意的是:测试样本要尽可能不出现在训练集当中。

产生训练集和测试集的方法主要有以下几种:

2.2.1 留出法

留出法(hold-out)直接将数据集分成两个互斥的集合。在分割过程中,要尽量保证数据分布的一致性,避免因为数据划分过程引入额外的偏差而对最终结果产生影响。

为了保证数据分布的一致性,我们可以根据数据分布将数据分为不同的层次,然后在不同层次上分别按照比例进行抽样,最后将不同层次上的抽样汇总,构成测试集。这种方法被称为分层采样法(stratified sampling)可以确保测试集的数据分布与总样本的数据分布相似。

留出法的问题是:单次留出法获得的测试集结果未必稳定,我们需要多次留出,并观察多次留出后,测试结果的效果如何。将多次留出的过程标准化后,我们可以得到交叉验证法。

2.2.2 交叉验证法

交叉验证法(cross validation)指的是将数据集分为K个互斥子集(需要保证每个子集的数据分布具有一致性,即通过分层采样获得),以K-1个子集的并集作为训练集,以另一个子集作为测试集。这样就可以获得K组训练/测试集,可以做K次训练和训练,最终返回的结果取决于K次结果的均值。

交叉验证法的稳定性和保真性很大程度上取决于K的取值,所以我们通常将交叉验证法的K明确说出,称为"K折验证法"。

但是K次回归都来自同一种分割方法得到的互斥子集。为了进一步保证结果的泛化结果的稳健性和保真性,我们需要进行多次分割(P次),并在不同分割结果上使用“K折验证法”。最终的评估结果是P次K折交叉验证结果的均值。我们将其称为“P次K折交叉验证”。

注:若样本总数为M,令K=M,那么每一个样本集就只有一个数据,这种方法叫“留一法”(Leave-one-out,LOO)。留一法最大限度的使用了数据集中的信息,同时因为使用了测试集来对算法进行调整,过拟合问题也可以得到一定程度上的解决。所以留一法的评估结果往往被认为比较准确。但是留一法的运算量比较大,当样本量较大时,使用留一法的计算开销是难以忍受的,而且留一法的训练效果并不是一定就比其他方法好。

2.2.3 自助法

我们希望能够尽量获取数据集中有用的信息,但在留出法和交叉验证法中,有一部分数据被用作了测试集;留一法的计算复杂度又太高。

自助法(bootstrapping)兼顾了信息使用量与效率:设数据集中一共有M个样本,我们首先抽出一个样本,计入训练集中,然后将该样本放回,再抽一个新样本,计入训练集。重复抽取、计入、放回的动作M次。因为我们有M个样本,仅有1/M!的概率会将所有的样本都抽中。根据KaTeX parse error: Double subscript at position 9: \lim_{n}_̲ (1-\frac{1}{m}…易得,取极限之后,一个样本大约有36.8%的概率永远不会在抽样中被选中。

我们将抽样的结果作为训练集,将没有被抽中的作为测试集。 此时,实际评估的模型与期望评估的模型都使用M个训练样本,而我们仍有35%左右的样本没有出现在测试当中,这样的测试结果,也称为“包外估计”(out-of-bag-estimation)。

自助法在数据集比较小、难以有效划分训练/测试集的时候很有用;此外,自助法能够从初始数据集中产生多个不同的训练集,对集成学习等方法有很大的好处。但是自助法产生的数据集的分布会和原始数据变得不一样,从而引入估计偏差,因此当数据量足够时,留出法和交叉验证法更常用一些。

2.2.4 调参与最终模型

大多数学习算法都有些参数(parameter)需要设定,参数配置不同,模型的性能会有很大的不同。我们对参数进行调节的过程叫做调参(parameter tuning)。

调参和算法选择没有本质的区别,同样是分割样本后对配有不同参数的模型进行回归,观察配有何种参数的模型的效果更好。在选定不同参数时,往往规定一个参数的变动范围,然后在这个范围内均匀的选取参数。这样做的运算复杂度会变得非常高。