西瓜书1、2章学习笔记

翻开周志华老师的西瓜书,让我感到本科阶段的数学知识忽远忽近,今后让我们捡回数学知识,一起学习这本经典的机器学习书籍,遨游在机器学习的海洋里吧。

引言

首先什么是机器学习?举个例子,假设一家公司正招聘一名新员工,在招聘广告登出之后有1000个人申请,每个人都投了简历。每个人都有着各式各样的技能(或者说是特征),如果人为的靠经验一个个筛选,这实在太多了,所以我们想训练一台机器通过大量的数据以让它获得经验,来帮助 hr 来完成这项任务,以减少人的负担。

机器学习的学习任务可大致分为两大类:监督学习和无监督学习,前者的代表有分类和回归,而后者的代表有聚类,需要注意的是,机器学习的目标是使模型能很好地适应新样本,而不仅仅在训练样本表现的好,我们称学得的模型适用于新样本的能力,称为泛化能力,当然了,泛化能力越强说明模型越好。

假设空间

我们都知道在数学中,越归纳越简单,反而越演绎越复杂,而在机器学习中,这更多的是一种归纳的学习过程。接下来我们以书中的例子展开来介绍。

假定我们获得了这样一个训练数据集:

编号 色泽 根蒂 敲声 好瓜
1 青绿 蜷缩 浊响
2 乌黑 蜷缩 浊响
3 青绿 硬挺 清脆
4 乌黑 稍蜷 沉闷

这里我们的学习目标是好瓜,暂且假设好瓜是由色泽、根蒂、敲声三个因素决定的,因此,可以把学习的过程看作在假设空间的搜索过程。

西瓜问题的假设空间

搜索结束后,最终会获得与训练集一致(即对所有训练样本能够进行正确判断)的假设,这就是我们学得的结果。

需要注意的是,实际问题中可能有很大的假设空间,而学习的过程又是基于有限样本的,因此,可能有多个假设与训练集一致,即存在着一个与训练集一致的 假设集合,我们称之为 版本空间。在本例子中,对应的版本空间如下图所示:

西瓜问题的版本空间

归纳偏好

通过有限样本学习得到的模型都对应了假设空间的一个假设,假如说有一个西瓜是(色泽=青绿,根蒂=蜷缩,敲声=沉闷)的,那么按照版本空间的三个假设,得到的结果是不一样的。因此,任何一个机器学习算法都有其偏好,我们成为 归纳偏好

要知道,如果算法没有偏好的话,倘若每次都遇到同一个数据,得到的结果不是唯一的,这样的学习结果显然没有意义。

在下图中,下面的训练集可能有很多条曲线可以拟合出来,如果是算法更偏向于相似样本有相似的输出,那么算法可能会更偏向于 A 曲线。

存在多条曲线与有限样本训练集一致

因此,归纳偏好可以视为学习算法在自身一个很庞大的假设空间中对假设进行选择的启发式或“价值观”。“奥卡姆剃刀”的简单有效原理便是一种原则。事实上,归纳偏好对应了学习算法本身做出的关于“什么样的模型更好”的假设。具体问题中,归纳偏好是否和问题本身相匹配,大多数时候直接决定了算法能否取得好的性能

检验误差与过拟合

通常我们认为模型分类错误的样本数站样本总数的比例称为 错误率,对于 m m m 个样本中有 a a a 个样本分类错误,则有错误率

E = a m E=\frac{a}{m} E=ma

1 − a m 1-\frac{a}{m} 1ma精度

更一般地,我们把学习器在训练集的误差称为 训练误差,在新样本的误差称为 泛化误差。当然我们希望训练误差越小越好,但是,这很有可能导致 过拟合,即对新样本的表现能力并不好。而 欠拟合 就是算法对数据的学习还不够。虽然过拟合无法避免,我们只能减小其风险。两者相比下,欠拟合可以更好的解决。

过拟合与欠拟合对比

评估方法

对模型的评估,因此我们需要 测试集,而我们希望测试集尽可能与训练集互斥,因为一旦测试集有一些被模型学习过,会导致模型的泛化能力间接变弱,这是不可取的。

在对于一个包含 m m m 个样例的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋯ ( x m , y m ) } D= \{ (x_1,y_1),(x_2,y_2) \cdots (x_m,y_m)\} D={ (x1,y1),(x2,y2)(xm,ym)} 进行训练和测试,做法是将 D D D 拆分出训练集 S S S 和测试 T T T

以 下 是 一 些 常 用 的 方 法 。 以下是一些常用的方法。

留出法

留出法将数据集 D D D 划分为两个互斥的集合,一个作为训练集 S S S,另一个作为测试集 T T T。即有 D = S ∪ T , S ∩ T = ∅ D=S \cup T,S \cap T=\varnothing D=ST,ST= ,将 S S S 训练出来的模型用 T T T 进行评估,作为泛化误差的估计。

通常 S S S T T T 的划分比例为 7 : 3 7:3 7:3

注意:

  1. 尽可能保持数据分布的一致性,避免因数据划分过程引入的额外偏差而对最终结果产生影响。
  2. 采用若干次随机划分,评估取均值后作为留出法的评估结果,避免单次使用留出法的不稳定性。

交叉验证法

交叉验证法将数据集 D D D 划分为 k k k 个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ ⋯ ∪ D k , D i ∩ D j = ∅ ( i ≠ j ) D=D_1\cup D_2\cup \cdots\cup D_k ,D_i \cap D_j=\varnothing(i \ne j) D=D1D2Dk,DiDj=(i=j)。每个子集都尽可能保持数据分布的一致性,即从 D D D 中通过分层采样得到。然后,每次用 k − 1 k-1 k1 个子集的并集作为训练集,余下的那个子集作为测试集。这样就可获得 k k k 组训练/测试集,从而可进行 k k k 次训练和测试,最终返回的是这 k k k 个测试结果的均值。

注意:

交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k k k 的取值,为强调这点,通常把交叉验证法称为 K 折交叉验证 。最常用的取值是 10 。此时称为 10 折交叉验证。

以下是 10 折交叉验证图:

在这里插入图片描述

自助法

自助法是在前两者的基础上,进行改进,给定 m m m 个样本的数据集 ,我们对它进行采样产生数据集 D ′ D' D 每次随机从 D D D 中挑选一个样本,将其拷贝放入 D ′ D' D ,然后再将该样本放回初始数据集 ,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m m m 次后,我们就得到了包含 m m m 个样本的数据集 D ′ D' D。显然, D D D 中有一部分样本会在 D ′ D' D 中多次出现,而另一部分样本不出现.可以做一个简单的估计,样本在 m m m 次采样中始终不被采到的概率是 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1m1)m,取极限得到:

lim ⁡ x → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim_{x \to \infty} (1-\frac{1}{m})^m=\frac{1}{e} \approx 0.368 xlim(1m1)m=e10.368

可以发现,初始数据集 D D D 中约有 36.8 % 36.8% 36.8 的样本未出现在采样后的数据集 D ′ D' D 中。也就是说这种方法既保正了训练数据不全是原数据,也保正了训练数据集的大小。

注意的是这种方法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够的时候,留出法和交叉验证法更常用一些。

性能度量

在预测任务中,给定样例集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋯ ( x m , y m ) } D= \{ (x_1,y_1),(x_2,y_2) \cdots (x_m,y_m)\} D={ (x1,y1),(x2,y2)(xm,ym)},其中 y i y_i yi x i x_i xi 的真实值,要评估学习器 f f f 的性能,就要把两者进行误差分析,即只要让 M S E MSE MSE 越小越好。其中 M S E MSE MSE 的计算方式如下:

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(x_i)-y_i)^2 E(f;D)=m1i=1m(f(xi)yi)2

错误率与精度

前面提到的错误率与精度,是分类中常见的两种性能度量,适用于分类任务。其中错误率定义如下:

E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) E(f;D)=\frac{1}{m}\sum_{i=1}^{m}I(f(x_i)\ne y_i) E(f;D)=m1i=1mI(f(xi)=yi)

精度定义如下:
a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) \begin{aligned} acc(f;D)&=\frac{1}{m}\sum_{i=1}^{m}I(f(x_i)= y_i)\\ &=1-E(f;D) \end{aligned} acc(f;D)=m1i=1mI(f(xi)=yi)=1E(f;D)

准确率、召回率

对于二分类问题,可以根据实际值与评估器进行对比划分为真正例 T P TP TP、假正例 F P FP FP、真反例 T N TN TN、假反例 F N FN FN,显然有 T P + F P + T N + F N = 样 例 总 数 TP+FP+TN+FN =样例总数 TP+FP+TN+FN

在这里插入图片描述

其中准确率 P P P 和 召回率 R R R 的定义如下:

P = T P T P + F P R = T P T P + F N \begin{aligned} P =\frac{TP}{TP+FP}\\ R =\frac{TP}{TP+FN} \end{aligned} P=TP+FPTPR=TP+FNTP

P P P R R R 是一对矛盾的度量,这是显然的。而两者会存在一个平衡点(BEP)。如下图:

P-R曲线与平衡点示意图

若一个学习器 P-R 曲线被另一个曲线包住,或者说面积更大,则说明另一个学习器更优。

ROC 与 AUC

  很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个 分类阙值 进行比较,若大于阅值则分为正类,否则为反类.例如 S i g m o d Sigmod Sigmod 函数取值为 0 − 1 0-1 01
  概率预测结果的好坏,直接决定了学习器的泛化能力。实际上,根据这个实值或概率预测结果 我们可将测试样本进行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面.这样,分类过程就相当千在这个排序中以某个截断点 将样本分为两部分,前一部分判作正例,后一部分则判作反例。

与 P-R 曲线相似,根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了 “ROC 曲线”。P-R 曲线使用准确率、召回率为纵、横轴。而 ROC 曲线的纵轴是 真正例率 TPR,横轴是 假正例率 FPR,两者定义如下:

T P R = T P T P + F N F P R = F P T N + F P \begin{aligned} TPR =\frac{TP}{TP+FN}\\ FPR =\frac{FP}{TN+FP} \end{aligned} TPR=TP+FNTPFPR=TN+FPFP

可以根据有限样本进行绘制 ROC 曲线,如下图:

ROC 曲线与 AUC 示意图

同样的,若一个学习器的 ROC 曲线被另一个学习器的曲线包住,或 AUC 面积更大,则另一个学习器更优。

而 AUC 的计算公式如下(每个小长方形的面积求和):

A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ( y i + y i + 1 ) AUC=\frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1}-x_i)(y_i+y_{i+1}) AUC=21i=1m1(xi+1xi)(yi+yi+1)

偏差与方差

机器学习中泛化误差可以分解为三个部分,偏差、方差和噪声,在提升算法的性能过程中,我们主要专注偏差和方差,因为噪声属于不可约减的误差。了解导致偏差和方差的原因有助于我们改进数据的拟合过程,从而产生更准确的模型。

定义模型 f f f 的期望预测,方差,与真实值 y y y 的偏差如下:

f ˉ ( x ) = E [ f ( x ; D ) ] v a r ( x ) = E [ ( f ( x ; D ) − f ˉ ( x ) ) 2 ] b i a s 2 ( x ) = ( f ˉ ( x ) − y ) 2 \begin{aligned} &\bar{f}(x)=E[f(x;D)]\\ &var(x)=E[(f(x;D)-\bar{f}(x))^2]\\ &bias^2(x)=(\bar{f}(x)-y)^2 \end{aligned} fˉ(x)=E[f(x;D)]var(x)=E[(f(x;D)fˉ(x))2]bias2(x)=(fˉ(x)y)2

泛化误差与偏差、方差的关系示意图

因此,在模型评估时,难免会遇到高偏差与高方差的问题,其一般解决方案如下:

高偏差:增加更多的特征,提升模型复杂度。
高方差:增加训练样本数据,减少特征数量。

参考资料
[1] 周志华.机器学习[M].北京:清华大学出版社,2020.

[2] 贾俊平.统计学[M].北京.中国人民大学出版社,2019.

猜你喜欢

转载自blog.csdn.net/lhrfighting/article/details/121369291