我们希望在新的样本身上学习器仍然能够表现得更好,所以我们要尽可能的从训练样本中学出适用于所有潜在样本的“普遍规律”,这样就可以对新的样本做出正确的判断。
很多因素都会导致过拟合,其中最常见的情况就是机器学习过于强大,以至于把训练样本所包含的不太普遍的特性都学到了。欠拟合就是学习能力不足的情况,这种情况我们容易解决,而过拟合则很麻烦。 在后面的学习中我们会看到过拟合是机器学习的关键障碍,各类算法都必然携带针对过拟合的措施;我们需要认识到过拟合无法彻底避免,只能缓解。
我们希望得到训练好的模型,就是要让学习器举一反三,那么我们的训练集和测试集就要分开才能到达很好的评估效果。如同我们学习一样,练习题做得滚瓜烂熟,期末考试考原题,满分是必然的吧,不满分扣个5分也有95分。遇到牛人,直接背试卷ABCD,也满分。这样当然不好,没有把练习题和考试题分开啊。我们来看看机器学习的“考试方法”
直接将数据集D分为两个互斥集合,一个训练集合S,和一个测试集合T, D = S U T ,S ∩ T = ∅;学习器在S集合行训练出模型,然后再用集合T测试误差,作为泛化误差的估计。
煮个栗子:100个样本,分给训练集有 60 个样本,测试集30个样本。我们训练60个样本中,分类正确的有56个,错误分类4个。
错 误 率 = 4 60 = 0.067 精 度 = 0.933 \begin{aligned} 错误率&=\frac{4}{60}=0.067 \\ 精度&=0.933 \end{aligned} 错误率精度=604=0.067=0.933
注意: 训练集和测试集的划分要尽量保持和原数据一致性.你不能这样,训练集中的数据基本都是单一的数据,特征也基本一致,而测试集的数据则稀奇古怪,三类四类的都有。这种划分就不合理,最后就会导致,训练误差很小,测试出来的泛化误差就很大。
单次使用留出法得到的估计结果往往不稳定不可靠。我们一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。 比如进行 100 次随机划分,每次产生一个 训练集 / 测试集 用于实验评估,就有100 个结果,我们返回这 100 个结果的平均值。
但是哪个比列才更好呢?如果训练集 S 包含绝大多数样本,则训练出的模型可能更接近于总集合D训练出的模型,但是测试集T就少了,评估结果可能不够稳定准确;反过来测试集T多包含样本,训练集S训练度可能不够,与总集合D差别更大了,降低了评估结果的保真性。这个问题没有完美的解决方案,我们一般将 2 3 \frac{2}{3} 32~ 4 5 \frac{4}{5} 54 的数据用于训练,其他的部分用来测试
所谓的“交叉验证法”就是现将数据集 D 划分为 k 个大小相似的互斥子集,即
D D D = D 1 D_1 D1U D 2 D_2 D2U…U D k D_k Dk, D i D_i Di∩ D j D_j Dj=∅(i≠j)
每个子集 D i D_i Di尽可能保持数据分布的一致性,即从D中通过层次采样得到。然后每次使用 k - 1个子集的并集作为训练集,余下的哪个子集作为测试集,这样就可以获得 k 组 训练集 / 测试集,就可以进行 k 次训练和测试,最终返回 K 个训练结果的均值。
交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 值,为了强调这一点,我们又称“k折交叉验证” k 的最常用取值是10,也有用5,20的。来看一张图把,助于理解。
如果我们数据集D包含m个样本,又 k = m,就得到了交叉验证法的一个特例:留一法(Leave-One-Out,简称LOO)
直接以自助采样为基础。给定 m 个样本的数据集 D,我们对其进行采样产生数据集 D’:每次随机从D中选取一个样本,将其拷贝放入D’,然后再将样本放回数据集D中,使得该样本在下次采样中仍可能被采到;重复 m 次,就收集到了 m 个数据集 D’,这就是自助采样的结果。D中有一部分数据会多次出现,而另一部分数据则不会出现。我们可以做一个简单的估计。样本在 m 次采样中始终不会采到的概率是 ( 1 − 1 m ) m {(1-\frac{1}{m})}^m (1−m1)m,取极限:
lim m − > + ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim_{m-> +\infty}{(1-\frac{1}{m})}^m = \frac{1}{e}\approx0.368 m−>+∞lim(1−m1)m=e1≈0.368
通过自助采样,初始数据集D中有36.8%的样本未出现在采集数据集 D’ 中。我们将D’用来训练,D \ D’用作测试集。
性能量度也是衡量模型泛化能力的评价标准。 它反应了任务需求,在对比不同模型能力时,使用不同的性能量度往往会导致不同的批判结果。模型的好坏是相对的,什么样的模型什么时候是好的,不仅取决于算法和数据,还决定于任务需求。
在预测任务中,给定样例集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D = \left \{{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} \right \} D={(x1,y1),(x2,y2),...,(xm,ym)}
其中 y i y_i yi 表示 x i x_i xi 的真实标记。要评估学习器 f 的性能,就要把学习器预测的结果 f ( x ) f(x) f(x) 与真实 y y y 进行比较。
这是分类任务中最常用的两种性能量度,既适用于二分类,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占总数的比例。
对于样本集 D 分类错误率定义为:
E ( f ; D ) = 1 m ∑ i = 1 m ∣ ∣ ( f ( x i ) ≠ y i ) E(f;D)=\frac{1}{m}\sum_{i=1}^m\left | \right |(f(x_i)\neq y_i) E(f;D)=m1i=1∑m∣∣(f(xi)=yi)
精度定义:
a c c ( f ; D ) = 1 m ∑ i = 1 m ∣ ∣ ( f ( x i ) = y i ) = 1 − E ( f ; d ) \begin {aligned} acc(f;D)\ &=\ \frac{1}{m}\sum_{i=1}^m \left | \right | (f(x_i)=y_i) \\ &=\ 1-E(f;d) \end {aligned} acc(f;D) = m1i=1∑m∣∣(f(xi)=yi)= 1−E(f;d)
更一般的,对于数据分布 D 和概率密度函数 p ( ⋅ ) p(·) p(⋅) ,错误率与精度可分别描述为
E ( f ; D ) = ∫ x ∼ D ∣ ∣ ( f ( x ) ≠ y ) p ( x ) d x , a c c ( f ; D ) = ∫ x ∼ D ∣ ∣ ( f ( x ) = y ) p ( x ) d x = 1 − E ( f ; D ) \begin {aligned} E(f;D) &=\ \int_{x\sim D} \left | \right |(f(x)\ \neq\ y)\ p(x)dx, \\ acc(f;D)\ &= \ \int_{x\sim D} \left | \right | (f(x)\ =\ y)p(x)dx\\ &=\ 1-E(f;D) \end {aligned} E(f;D)acc(f;D) = ∫x∼D∣∣(f(x) = y) p(x)dx,= ∫x∼D∣∣(f(x) = y)p(x)dx= 1−E(f;D)
错误率和精度虽然常用,但并不能满足所有任务 需求,这里我们将要引入查准率和全差率。对于二分类问题,我们可以将样例根据其真实类别与学习器预测类别的组合划分为:真正例、假正例、真反例、假反例 四种情况,令其 TP , FP,TN,FN 分别表示其对应的样例数,那么有:TP + FP + TN + FN = 样例总数。我们可以得到一个分类结果的“混淆矩阵”:
查准率P和全差率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} PR=TP+FPTP=TP+FNTP
查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。 我们可以利用西瓜集这样记:
查 准 率 P = 猜 对 的 好 西 瓜 ( 全 对 ) 猜 出 的 好 西 瓜 ( 预 测 集 输 出 为 好 ) 查 全 率 R = 猜 对 的 好 西 瓜 ( 全 对 ) 所 有 的 好 西 瓜 ( 属 于 全 集 中 ) \begin{aligned} \\ 查准率P&=\frac{猜对的好西瓜(全对)}{猜出的好西瓜(预测集输出为 好)} \\ \\ 查全率R&=\frac{猜对的好西瓜(全对)}{所有的好西瓜(属于全集中)} \end{aligned} 查准率P查全率R=猜出的好西瓜(预测集输出为好)猜对的好西瓜(全对)=所有的好西瓜(属于全集中)猜对的好西瓜(全对)
在很多情况下,我们可以根据学习器的预测结果对样例进行排序,排在前面的的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例样本。按照这个顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率,查准率。再以查全率为横轴、查准率为纵轴做出“P-R”图。
我们可以直观的看出曲线的分布,那根曲线在上面,哪个学习器的性能就越好。 但是实际情况下我们的曲线基本会相交,而我们却偏要找出一个更好的,在这种情况下,我们设计了一些综合考虑查准率、查全率的性能量度。平衡点(BEP) 就是这样一个量度,它是“查准率=查全率”时的取值,上图的C的 BEP 在0.64左右,基于 BEP 的比较,可以认为 A 优于 B.但是 BEP过于粗暴了,我们可以如下处理。
ROC全称“受试者工作特征”(Recevier Operating Characteristic),与P-R曲线相似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要的值,分别以它们为横、纵坐标图就得到了“ROC”图,纵轴是“真正例率(TPR),横轴是假正率例(FPR)” : T P R = T P T P + F N , F P R = F P F P + T N \begin{aligned}TPR=\frac{TP}{TP+FN},\\ FPR=\frac{FP}{FP+TN}\end{aligned} TPR=TP+FNTP,FPR=FP+TNFP
现实任务中通常是利用有限个测试样例来绘制ROC图,此时仅能获得有限个(真正例率,假正率例)坐标对,无法产生光滑的ROC曲线绘图过程:给定 m + m^+ m+个正例和 m − m^- m−个反例,根据,此时真正例率和假正例率均为0,在坐标(0,0)标记一个点。然后,将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。设前一个标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为(x,y+ 1 m + \frac{1}{m^+} m+1);当前若为假正例,则对应的标记点坐标为(x+ 1 m − \frac{1}{m^-} m−1,y),然后连线。
学习器比较时,同样那根曲线在上面,哪个学习器的优。但是任然存在相交的情况,但是我们一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即AUC。
从定义可知,AUC可通过对ROC曲线下部分的面积求和得到。假设ROC曲线是由坐标为{( x 1 , y 1 x_1,y_1 x1,y1),( x 2 , y 2 x_2,y_2 x2,y2),…,( x m , y m x_m,y_m xm,ym)}点按序链接而生成( x 1 = 0 , x m x_1=0,x_m x1=0,xm=1),b图。则ACU可以估算为:
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)\cdot (y_i+y_{i+1}) AUC=21i=1∑m−1(xi+1−xi)⋅(yi+yi+1)
形式的看AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定 m + m^+ m+个正例和 m − m^- m−个反例,令 D + D^+ D+和 D − D^- D−分别表示正例,反例集合,则排序"损失"定义为:
l r a n k = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − ( ∣ ∣ ( f ( x + ) < f ( x − ) ) + 1 2 ∣ ∣ ( f ( x + ) = f ( x − ) ) ) lrank=\frac{1}{m^+m^-} \sum_{x_+∈D^+}\sum_{x_-∈D^-}(\left | \right |(f(x^+)
即考虑一个正例,反例,正例预测值小于反例,记一个罚分,相等就0.5个罚分。如果对应的是ROC曲线之上的面积:若一个正例在ROC曲线之上对应的坐标为(x,y),则x恰是排序在其之前的反例所占比例。有:
A U C = 1 − l r a n k AUC=1-lrank AUC=1−lrank
总结:
这里需要我们一起来,头脑中回想一下什么是误差?过拟合欠拟合的定义?为了评估学习器的优劣,有哪些方法?性能量度有哪些呢?文章有点长,大家梳理一下吧。