机器学习读书笔记(二)

机器学习读书笔记

第二章 模型与评估

2.1 经验误差与过拟合

错误率

通常我们把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在 mm 个样本中有 aa 个样本分类错误,则错误率 E=a/mE = a/m; 相应的,1a/m1 - a/m 称为“精度”(accuracy),即 “精度 = 1 - 错误率”。更一般地,我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。显然,我们希望得到泛化误差小的学习器。然而,我们事先并不知道样本是什么样,实际能做的是努力使经验误差最小化。

过拟合

当学习器把训练样本学习得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有一般性质,这样就会导致泛化性能下降,这种现场在机器学习中,称为“过拟合”。

过拟合是机器学习面临的关键障碍,且过拟合无法避免,我们所能做的只是“缓解”,或者说减小其风险。关于这一点,可以大致这样理解:机器学习面临的问题通常是NP难甚至更难,而有效的学习算法必然是多项式时间内运行完成,若可彻底避免过拟合,则通过经验误差最小化就能获得最优解,这就是意味着我们构造性地证明了P=NPP = NP;因此,只要相信PNPP \ne NP,过拟合就不可避免。

NP 问题(完全多项式非确定性问题,Non-Deterministic Polynomial Complete Problems)

NP 问题是指一个复杂问题不能确定是否多项式时间内找到答案,但是可以在多项式时间内验证答案是否正确。

2.2 评估方法

通常,我们可以通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,我们需要使用一个“测试集”(testing error) 来测试学习器对新样本的判别能力,然后以测试集上的"测试误差"(testing error)作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分步采样而得,但需要注意的是,测试集应该与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。

独立同分布(iid, independently identically distribution)

在概率论理论中,指随机过程中,任何时刻的取值都为随机变量,如果这些随机变量服从同一分布,并且相互独立,那么这些随机变量是独立同分布。

如果随机变量X1X_1X2X_2 相互独立,是指X1X_1 的取值不影响X2X_2 的取值,X2X_2 的取值也不影响X1X_1 的取值且随机变量X1X_1X2X_2 服从 同一分布,这意味着X1X_1X2X_2 具有相同的分布形状和相同的分布参数,对离随机变量具有相同的分布律,对连续随机变量具有相同的概率密度函数,有着相同的分布函数,相同的期望、方差。

示例——掷骰子

  • 独立

    每次抽样之间是没有关系,互不影响的;

    就像抛骰子,每次抛到几就是几,这就是独立的,但如果要求两次抛的和大于8,其余的不算,那么第一次抛和第二次抛就不独立了,因为第二次抛的时候结果是和第一次相关的。

  • 同分布

    每次抽样,样本都服从同一个分布。

    抛骰子每次得到任意点数的概率都是 16\frac{1}{6} ,这就是同分布的。但如果第一次抛的是6面的骰子,第二次抛的是一个正12面体的骰子,就不再是同分布了。

如果我们只有一个包含mm 个样例的数据集D={(x1,y1),(x2,y2),,(xm,ym)}D = \lbrace (x_1, y_1), (x_2, y_2), \cdots, (x_m, y_m) \rbrace,既要训练,又要进行测试,怎么样才能做到呢?答案是:通过对DD 进行适当的处理,从中产生出训练集SS 和测试集TT 。下面介绍几中常见的做法。

2.2.1 留出法

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

需要注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。如果从采样(sampling)的角度来看待数据集的划分过程,则保留出类别比例的采样方式通常称为"分层采样"(stratified sampling)。

分层抽样

它是从一个可以划分成不同子总体(或称为层)的总体中,按规定的比例从不同层中随机抽取样品(个体)的方法。

  • 优点

    样本的代表性比较好,抽样误差比较小。

  • 缺点

    抽样手续较简单随机抽样还要繁杂些。

留出法,使用过程中,常见的做法是将大约2/34/52/3 \sim 4/5 的样本用于训练,剩余样本用于测试。

2.2.2 交叉验证法

“交叉验证法”(cross validation) 先将数据集DD 划分为 kk 个大小相似的互斥子集,即,D=D1D2DkD = D_1 \bigcup D_2 \bigcup \cdots D_kDiDj=(ij)D_i \bigcap D_j = \emptyset (i \ne j)。每个子集 DiD_i 都尽可能保持数据分布一致性。即从DD中通过分层采样得到,然后,每次用 k1k-1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就可以获得 kk 个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 kk 的取值,为强调这一点,通常把交叉验证法称为**"kk 折交叉验证"**(kk - fold cross validation)。kk 最常用的取值是 10,此时称为 10 折交叉验证;其他常用的 kk 值有 5205 、 20 等。

2.2.3 自助法

当数据集较小,难以有效划分训练/测试集时,“自助法”(bootsrapping) 很有用,如果初始数据量足够时,留出法和交叉验证法更常用一些。

自助法,直接以自助采样(bootstrap sampling)为基础。给定包含 mm 个样本的数据集 DD ,我们对它进行采样产生数据集 DD':每次随机从DD 中挑选一个样本,将其拷贝放入 DD',然后再将该样本放回初始数据集 DD 中,使得该样本在下次采样时,仍有可能被采到;这个过程重复执行 mm 次后,我们就得到了包含 mm 个样本的数据集 DD' ,这就是自助采样的结果。显然,DD 中有一部分样本会在 DD' 中多次出现,而另一部分样本不出现。可以做一个简单估计,样本在 mm 次采样中始终不被采到的概率是 (11m)m(1 - \frac{1}{m})^m,取极限得到
limm(11m)m1e0.368(2.1) \lim_{m \mapsto \infty}(1-\frac{1}{m})^m \mapsto \frac{1}{e} \approx0.368 \tag{2.1}
即,通过自助采样,初始数据 DD 中约有 36.8%36.8 \% 的样本未出现在采样数据集 DD' 中。这样,实际评估的模型与期望评估的模型都使用mm个训练样本,而我们仍有数据总量约为 1/31/3 的、没在训练集中出现的样本用于测试。这样的测试结果,亦称"包外估计"(out-of-bag estimate)。

公式 2.1,推导

根据两个重要极限定理,第二重要极限定理:
limn(1+1n)n=elimn(1+n)1n=e \lim_{n \mapsto \infty}(1 + \frac {1}{n})^n = e \quad 或 \quad \lim_{n \mapsto \infty}(1+n)^{\frac{1}{n}} = e
则式中,
limm(11m)m=limm[(1+1m)m]1=e1 \lim_{m \mapsto \infty}(1 - \frac{1}{m})^m = \lim_{m \mapsto \infty}[(1 + \frac{1}{-m})^{-m}]^{-1} =e^{-1}
此公式得证。

以上公式的推导过程,详见两个重要极限的推导过程

2.2.4 调参与最终模型

大多数的学习算法都有些参数需要设定,参数配置不同,学得的模型的性能往往有显著差别。因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需要对算法参数进行设定,这就是通常所说的"参数调节"或简称"调参"。

我们通常把学得的模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集通常称为"验证集"(validation set)。

2.3 性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。这意味着模型的"好坏"是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。

在预测任务中,给定样例集 D={(x1,y1),(x2,y2),(xn,yn)}D = \lbrace (x_1, y_1), (x_2, y_2), \cdots (x_n, y_n) \rbrace,其中 yiy_i 是示例 xix_i 的真实标记。要评估学习器 ff 的性能,就要把学习器预测结果 f(x)f(x) 与真实标记 yy 进行比较。

回归任务最常用的性能度量是"均方误差"(mean squared error)
E(f;D)=1mi=1m(f(xi)yi)2(2.2) E(f; D) = \frac{1}{m} \sum_{i=1}^m(f(x_i) - y_i)^2 \tag{2.2}
更一般的,对于数据分布 DD 和概率密度函数 p()p(\cdot),均方误差可描述为
E(f;D)=xD(f(x)y)2p(x)dx(2.3) E(f;D) = \int_{x \sim D}(f(x) - y)^2p(x)dx \tag{2.3}

在数学中,[连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。而随机变量的取值落在某个区域之内的概率则为概率密度函数在这个区域上的积分(。当概率密度函数存在的时候,累积分布函数是概率密度函数的积分。

定义

对于一维实随机变量 XX, 设它的积累分布函数是 FX(x)F_X(x),如果存在可测函数 fX(x)f_X(x),满足:FX(x)=xfX(t)dtF_X(x) = \int_{- \infty}^x f_X(t)dt,那么 XX 是一个连续型随机变量,并且 fX(x)f_X(x) 是它的概率密度函数。

性质

这里指的是一维连续随机变量,多维连续变量也类似。

随机数据的概率密度函数:表示瞬时幅值落在某指定范围内的概率,因此是幅值的函数。它随所取范围的幅值而变化。

密度函数f(x)f(x) 具有下列性质:

  1. f(x)0f(x) \ge 0
  2. f(x)dx=1\int_{- \infty}^{\infty} f(x)dx = 1
  3. P(a<xb)=abf(x)dxP(a< x \le b) = \int_a^bf(x)dx

2.3.1 错误率与精度

这是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例。精度则是分类正确的样本占样本总数的比例。对样例集 DD ,分类错误率的定义为
E(f;D)=1mi=1mII(f(xi)yi)(2.4) E(f; D) = \frac{1}{m} \sum_{i=1}^m \mathrm {II}(f(x_i) \ne y_i) \tag{2.4}

精度则定义为
acc(f;D)=1mi=1mII(f(xi)=yi)=1E(f;D).(2.5) acc(f; D) = \frac{1}{m}\sum_{i=1}^m \mathrm{II}(f(x_i) = y_i) = 1 - E(f; D). \tag{2.5}
更一般的,对于数据分布 DD 和概率密度函数p()p(\cdot),错误率与精度可分别描述为
E(f;D)=xDII(f(x)y)p(x)dx(2.6) E(f; D) = \int_{x \sim D} \mathrm{II}(f(x) \ne y)p(x)dx \tag{2.6}

acc(f;D)=xDII(f(x)=y)p(x)dx(2.7) acc(f; D) = \int_{x \sim D} \mathrm{II}(f(x) = y)p(x) dx \tag{2.7}

2.3.2 查准率、查全率与 F1F1

以信息检索为例,我们经常会关心"检索出的信息中有多少比例是用户感兴趣的" “用户感兴趣的信息中有多少被检索出来了”。“查准率”(precision)与"查全率"(recall)是更为适用于此类需求的性能度量。

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

真实情况 预测结果
正例 反例
正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)
  • TP:正确地标记为正,即算法预测它为正样本,且这个样本真实情况也是正样本;
  • FP:错误地标记为正,即算法预测它为正样本,但这个样本真实情况是负样本;
  • FN:错误地标记为负,即算法预测它为负样本,仩这个样本真实情况是正样本;
  • TN:正确地标记为负,即算法预测它为负样本,且这个样本真实情况也是负样本;

所以有:
Accuracy==TP+TNTP+TN+FP+FN(2.8) Accuracy = \frac{预测正确的样本数}{总样本数} = \frac{TP + TN}{TP + TN + FP + FN} \tag{2.8}

Precision=11=TPTP+FP(2.9) Precision = \frac{预测为 1 且正确预测的样本数}{所有预测为 1 的样本数} = \frac{TP}{TP + FP} \tag{2.9}

Recall=11=TPTP+FN(2.10) Recall = \frac{预测为 1 且正确预测样本数}{真实情况下所有为1的样本数} = \frac{TP}{TP + FN} \tag{2.10}

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。

在实际的模型评估中,单用Precision或者Recall来评价模型是不完整的,评价模型时必须用Precision/Recall两个值。这里介绍三种使用方法:平衡点(Break-Even Point,BEP)、F1度量、F1度量的一般化形式。

-BEP是产准率和查全率曲线中查准率=查全率时的取值,如下:

在这里插入图片描述

“平衡点”(Break-Even Point,简称 BEP)就是这样一个度量,它是"查准率=查全率"时的取值。如上图所示,算法的效果为:A>B>CA > B > C ,但 BEP 还是过于简化了些,更常用的是 F1F1 度量:
F1=2×P×RP+R=2×TP+TPTN(2.11) F1 = \frac{2 \times P \times R}{P + R} = \frac{2 \times TP}{样例总数 + TP - TN} \tag{2.11}

F1F1 是基于查准率与查全率的调和平均(harmonic mean) 定义的:
1F1=12(1P+1R) \frac {1}{F1} = \frac {1}{2}\left(\frac {1}{P} + \frac {1}{R}\right)

F1F1 度量的一般形式——FβF_\beta,能让我们表达出对查准率/查全率的不同偏好,它定义为:
Fβ=(1+β2)×P×R(β2×P)+R(2.12) F_{\beta} = \frac{(1 + \beta^2) \times P \times R}{(\beta^2 \times P) + R} \tag{2.12}
其中,β>0\beta > 0 度量了查全率对查准率的相对重要性;β=1\beta = 1时退化为标准的 F1F1β>1\beta > 1 时,查全率有更大影响;β<1\beta < 1时查准率有更大影响。

FβF_{\beta} 是加权调和平均:
1Fβ=11+β2(1P+β2R) \frac {1}{F_{\beta}} = \frac {1}{1+\beta^2}\left( \frac{1}{P} + \frac{\beta^2}{R} \right)
与算法平均(P+R2)\left( \frac{P + R}{2} \right) 和几何平均 (P×R)(\sqrt{P \times R}) 相比,调和平均更重视较小值

很多时候,我们需要在 nn 个二分类混淆矩阵上综合考察查准率和查全率。一种直接的做法是先在各混淆矩阵上分别计算出查准率和查全率,记为(P1,R1),(P2,R2),,(Pn,Rn)(P_1, R_1),(P_2, R_2),\cdots, (P_n, R_n),再计算平均值,这样就得到了"宏查准率"(macro-P)、“宏查全率”(macro-R),以及相应的"宏 F1"(macro-F1):
macroP=1ni=1nPi(2.13) macro-P = \frac {1}{n}\sum_{i=1}^n P_i \tag{2.13}

macroR=1ni=1nRi(2.14) macro-R = \frac{1}{n} \sum_{i=1}^n R_i \tag{2.14}

macroF1=2×macroP×macroRmacroP+macroR(2.15) macro-F1 = \frac{2 \times macro-P \times macro-R}{macro-P + macro-R} \tag{2.15}

还可以先将各混肴矩阵的对应元素进行平均,得到TPTPFPFPTNTNFNFN 的平均值,分别记为 TP\overline{TP}FP\overline{FP}TN\overline{TN}FN\overline{FN} ,再基于这些平均值计算出"微查准率"(micro-P)、“微查全率(micro-P)” 和 "微 F1F1"(micro-F1):
microP=TPTP+FP(2.16) micro-P = \frac {\overline{TP}}{\overline{TP} + \overline{FP}} \tag{2.16}

microR=TPTP+FN(2.17) micro-R = \frac{\overline{TP}}{\overline{TP} + \overline{FN}} \tag{2.17}

microF1=2×microR×microRmicroP+microR(2.18) micro-F1 = \frac{2 \times micro-R \times micro-R}{micro-P + micro-R} \tag{2.18}

2.3.3 ROC 与 AUC

很多学习器是为了测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值(thresh)进行比较,若大于阈值则分为正类,否则为反类。

ROC 全称是"受试者工作特征"(Receiver Operating Characteristic) 曲线,它源于"二战"中用于敌机检测的雷达信号分析技术,二十世纪六七十年代开始被用于一些心理学、医学检测应用中,此后被引入机器学习领域。

ROC 曲线的纵轴是"真正例率"(True Positive Rate,简称 TPR),横轴是"假正例率"(False Positive Rate,简称 FPR),两者的定义为:
TPR=TPTP+FN(2.19) TPR = \frac{TP}{TP + FN} \tag{2.19}

FPR=FPTN+FP(2.20) FPR = \frac{FP}{TN + FP} \tag{2.20}

在这里插入图片描述

ROC 曲线与 AUC

若一个学习器 ROC 曲线被另一个学习器的曲线完全"包住",则可断言后者的性能优于前者;若两个学习器的 ROC 曲线发生交叉,则难以一般性地断言两者孰优孰劣。此时如果一定要进行比较,则较为合理的判据是比较 ROC 曲线下的面积,即AUC(Area Under ROC Curve)。

从定义可知,AUC 可通过对 ROC 曲线下各部分的面积求和而得,假定ROC曲线是由座标为{(x1,y1),(x2,y2),,(xm,ym)}\lbrace (x_1, y_1), (x_2, y_2), \cdots,(x_m, y_m) \rbrace 的点按序连接而形成(x1=0,xm=1)(x_1=0, x_m=1),则 AUC 可估算为
AUC=12i=1m1(xi+1xi)(yi+yi+1)(2.21) AUC = \frac{1}{2} \sum_{i=1}^{m-1}(x_{i+1}-x_i)\cdot(y_i + y_{i+1}) \tag{2.21}
形式化地看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定m+m^+ 个正例和 mm^- 个反例,令D+D^+DD^- 分别表示正、反例集合,则排序"损失"(loss)定义为
lrank=1m++mx+D+xD((IIf(x+)<f(x))+12IIf(x+)=f(x)) l_{rank} = \frac{1}{m^+ + m^-}\sum_{x^+\in D^+}\sum_{x^- \in D^-}\left( \left(\mathrm{II}f(x^+)<f(x^-) \right) + \frac{1}{2}\mathrm{II}f(x^+)=f(x^-) \right)
即考虑每一个对正、反例,若正例的预测值小于反例,则记一个"罚分",若相等,则记 0.5 个"罚分"。容易看出,lrankl_{rank} 对应是 ROC 曲线之上的面积:若一个正例在 ROC 曲线上对应标记点的座标为 (x,y)(x, y),则 xx 恰是排序在其之前的反例占的比例,即假正例率。因此有
AUC=1lrank(2.23) AUC = 1 - l_{rank} \tag{2.23}

2.4 比较检验

机器学习中性能比较这件事要比大家想像的复杂的多,这里面涉及到几个重要方面:

  1. 首先,我们希望比较的是泛化性能,然而通过实验评估方法我们获得的是测试集上的性能,两者的对比结果可能未必相同;
  2. 测试集上的性能与测试集本身的选择有很大关系,且不论使用不同大小的测试集会得到不同的结果,即使是使用相同大小的测试集,若包含的测试样例不同,测试结果也会有不同;
  3. 很多机器学习算法本身有一定的随机性,即便用相同的参数设置在同一个测试集上很多次运行,其结果也会有不同。

统计假设检验为我们进行学习器性能比较提供了重要依据。常用的几种机器学习性能比较方法有:

  • 假设检验
  • 交叉验证 tt 验证
  • McNemar 检验
  • Friedman 检验与 Nemenyi 后续检验

2.5 偏差与方差

对学习算法除了通过实验估计其泛化性能,人们往往还希望了解它"为什么"具有这样的性能。“偏差—方差分解”(biase-variance decomposition)是解释学习算法泛化性能的一种重要工具。

对测试样本 xx, 令 yDy_Dxx 在数据集中的标记,yyxx 的真实标记,f(x;D)f(x; D) 为训练集 DD 上学得模型 ffxx 上的预测输出。以回归任务为例,学习算法的期望预测为
f(x)=ED[f(x;D)](2.24) \overline{f}(x) = \mathbb{E}_D[f(x; D)] \tag{2.24}
使用样本数相同的不同训练集产生的方差为
var(x)=ED[(f(x;D)f(x)2)](2.25) var(x) = \mathbb{E}_D\left[\left(f(x; D) - \overline{f}(x)^2 \right)\right] \tag{2.25}
噪声为
ε2=ED[(yDy)2](2.26) \varepsilon^2 = \mathbb{E}_D\left[\left(y_D - y \right)^2 \right] \tag{2.26}
期望输出与真实标记的差别称为偏差(bias),即
bias2(x)=(f(x)y)2(2.27) bias^2(x) = \left( \overline{f}(x) - y \right)^2 \tag{2.27}
为了便于讨论,假定噪声期望为零,即 ED[yDy]=0\mathbb{E}_D[y_D - y] = 0。通过简单的多项式展开合并,可对算法的期望泛化误差进行分解:
E(f;D)=bias2(x)+var(x)+ε2(2.28) E(f; D) = bias^2(x) + var(x) + \varepsilon^2 \tag{2.28}
也就是说,泛化误差可分解为偏差、方差与噪声之和。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章