误差 error :学习器的实际预测输出与样本的真实输出之间的差异。
训练误差 training error / 经验误差 empirical error :学习器在训练集 上的误差
泛化误差 genneralization error : 学习器在新样本上的误差。
过拟合 overfitting :学习器将训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质而导致泛化能力下降的现象。过拟合是机器学习面临的关键障碍,无法避免,只能“缓解”。
欠拟合 underfitting :学习器对训练样本的一般性质尚未学好。
模型选择与评估的困境:
理想的模型选择方案是对候选模型的泛化误差进行评估,进而选择泛化误差最小的那个模型。然后,我们无法直接获得泛化误差,而训练误差又由于过拟合现象的存在而不适合作为标准。
现实任务中模型评估往往还需要考虑时间开销、存储开销以及可解释性等方面的因素,这里暂且只对泛化误差进行讨论。
所以接下来将探讨在现实中如何进行模型评估与选择。
假设测试样本也是从样本真实分布中独立同分布采样得来的,考虑使用测试集上的测试误差 testing error作为泛化误差的近似,来测试学习器对新样本的判别能力。
需要注意的是,测试集应尽可能地与训练集互斥。假设我们只有一个m个样本地数据集D,便需要通过适当的处理,从中产生出训练集S和测试集T,可考虑以下方法:
直接将数据集D划分为两个互斥的集合,一个作为训练集S,一个作为测试集T。在S上训练出模型后,用T来评估其测试误差作为泛化误差的统计。
训练/测试集的划分尽可能保持数据分布的一致性,避免因数据划分过程中引入额外的偏差而对最终结果产生影响。
训练/测试集的样本比例确定后,人存在多种划分方式对D进行分割,而不同的分割方式也可能对结果产生影响。所以单次使用留出法得到结果往往不够稳定可靠,一般采用若干次随即划分、重复进行实验评估后取平均值作为留出法的评估结果。
训练集与测试集的比例影响着评估结果的方差与偏差,常见做法是2/3 ~ 4/5的样本用于训练,剩余样本作为测试。但一般而言,测试集至少应含有30个样本。
在尽可能保持数据分布一致性的情况下,将数据集D划分为k个大小相似的互斥子集,每次用k-1个子集的并集作为训练集,剩下的那个子集作为测试集,由此获得k组训练/测试集的结果,最终返回的是k个测试结果的均值。
交叉验证法评估结果的稳定性和保真性很大程度上取决于k,因此该方法又称 “k折交叉验证 k-fold cross validation”。
子集的划分与留出法一样存在多种方式,同样为减小因样本划分不同而引入的差别,可将k折交叉验证随机使用不同的划分重复p次,将p次k折交叉验证结果的平均值最为最终的评估结果。
假设D中有m个样本,当k=m时,交叉验证法成为其特例 “留一法 Leave-One-Out” ,此时不受随机样本划分的影响,结果可能更准确,但数据集较大时开销也较大。
对于含有m个样本的数据集D,对其进行自助采样产生数据集D’:每次随机从D中挑选一个样本拷贝至D’中,重复m次。(“拷贝”意味着被选择过的样本在下次采样时仍有可能被选中。)
对于一个样本在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\to\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‘}作为测试集。
不同于留出法和交叉验证法中的训练集S的规模都小于D,自助法中训练集D’的规模等于D。在数据集较小、难以有效划分训练/测试集时较为有效,且能产生的多个不同的训练集对于集成学习等方法也有很大好处。
缺点在于自助法产生的数据集改变了初始数据集的分布,会引入估计偏差。所以在初始数据量足够时,留出法和交叉验证法更常用。
调参与最终模型 :
衡量模型泛化能力的评价标准,就是性能度量 performance measure,不同的任务需求往往需要使用不同的性能度量。
错误率 :分类错误的样本数占样本总数的比例。
E ( f ; D ) = { 1 m ∑ m = 1 m I ( f ( x i ) ≠ y i ) 样本离散 ∫ x ∼ D I ( f ( x i ) ≠ y i ) p ( x ) d x 样本连续 E(f;D)=\begin{cases}\frac{1}{m}\sum_{m=1}^{m}\mathbb I(f(x_i) \not =y_i)& \text{ 样本离散} \\\int_{x\sim D} \mathbb I (f(x_i) \not =y_i)p(x) dx& \text{ 样本连续} \end{cases} E(f;D)={m1∑m=1mI(f(xi)=yi)∫x∼DI(f(xi)=yi)p(x)dx 样本离散 样本连续
精度 :分类正确的样本数占样本总数的比例。
a c c ( f ; D ) = 1 − E ( f ; D ) = { 1 m ∑ m = 1 m I ( f ( x i ) = y i ) 样本离散 ∫ x ∼ D I ( f ( x i ) = y i ) p ( x ) d x 样本连续 acc(f;D)=1-E(f;D)=\begin{cases}\frac{1}{m}\sum_{m=1}^{m}\mathbb I(f(x_i) =y_i)& \text{ 样本离散} \\\int_{x\sim D} \mathbb I (f(x_i) =y_i)p(x) dx& \text{ 样本连续} \end{cases} acc(f;D)=1−E(f;D)={m1∑m=1mI(f(xi)=yi)∫x∼DI(f(xi)=yi)p(x)dx 样本离散 样本连续
对于二分类问题,可将样例根据其真是类别与学习器预测类别得组合划分为真正例、假正例、真反例和假反例四种情形,分别记为TP、FP、TN和FN。显然,TP+FP+TN+FN=样例总数,且构成如下“混淆矩阵”:
查准率P:关注学习器预测为正例的样本中确实为正例的个数
P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
查全率R:关注在数据集全部的正例中被学习器预测出来的个数
P = T P T P + F N P=\frac{TP}{TP+FN} P=TP+FNTP
F1度量:除“平衡点”方式外的另一种综合考虑查准率、查全率的性能度量,是两者的调和平均。
F 1 = 2 × P × R P + R = 2 × T P 样例总数 + T P − T N F1=\frac{2\times P\times R}{P+R}=\frac{2 \times TP}{样例总数+TP-TN} F1=P+R2×P×R=样例总数+TP−TN2×TP
考虑到具体任务中对查准率和查全率有所偏好,其更一般的形式如下:
F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R F_ β=\frac{(1+β^2)\times P\times R}{(β^2\times P)+R} Fβ=(β2×P)+R(1+β2)×P×R
在以下情况我们将得到多个二分类混淆矩阵:
1. 进行多次训练/测试,每次得到一个混淆矩阵。
2. 在多个数据集上训练/测试,以期得到近似全局的性能。
3. 多分类任务两两类别组合都对应一个混淆矩阵。
所以希望在n个二分类混淆矩阵上综合考虑查准率和查全率,于是有:
宏F1 (macro-F1) : 先在个混淆矩阵上分别计算出查准率和查全率,再计算平均值得到“宏查准率”(macro-P)、“宏查全率”(macro-R),从而得出macro-F1。
m a c r o - P = 1 n ∑ i = 1 n P i m a c r o - R = 1 n ∑ i = 1 n R i macro {\raisebox{0mm}{-}} P=\frac{1}{n} \sum_{i=1}^{n}P_i \qquad macro{\raisebox{0mm}{-}}R=\frac{1}{n} \sum_{i=1}^{n}R_i macro-P=n1i=1∑nPimacro-R=n1i=1∑nRi
m a c r o - F 1 = 2 × m a c r o - P × m a c r o - R m a c r o - P + m a c r o - R macro{\raisebox{0mm}{-}}F1=\frac{2\times macro{\raisebox{0mm}{-}}P\times macro{\raisebox{0mm}{-}}R}{macro{\raisebox{0mm}{-}}P+macro{\raisebox{0mm}{-}}R} macro-F1=macro-P+macro-R2×macro-P×macro-R
微F1 (micro-F1) : 先将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,再基于这些平均值计算出“微查准率”(micro-P)、“微查全率”(micro-R),从而得出micro-F1:
m i c r o - P = T P ‾ T P ‾ + F P ‾ m i c r o - R = T P ‾ T P ‾ + F N ‾ micro {\raisebox{0mm}{-}} P=\frac{\overline{TP}}{\overline{TP}+\overline{FP}} \qquad micro{\raisebox{0mm}{-}}R=\frac{\overline{TP}}{\overline{TP}+\overline{FN}} micro-P=TP+FPTPmicro-R=TP+FNTP
m i c r o - F 1 = 2 × m i c r o - P × m i c r o - R m i c r o - P + m i c r o - R micro{\raisebox{0mm}{-}}F1=\frac{2\times micro{\raisebox{0mm}{-}}P\times micro{\raisebox{0mm}{-}}R}{micro{\raisebox{0mm}{-}}P+micro{\raisebox{0mm}{-}}R} micro-F1=micro-P+micro-R2×micro-P×micro-R
ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,根据学习器的预测结果对样例进行排序,再按该顺序逐个把样本作为正例进行预测,每次计算出“假正例率”(False PositiveRate,简称FPR)和“真正例率”(True Positive Rate,简称TPR)这两个值,再分别以它们为横、纵坐标作图,就得到了“ROC曲线”。
T P R = T P T P + F N F P R = F P T N + F P TPR=\frac{TP}{TP+FN} \qquad FPR=\frac{FP}{TN+FP} TPR=TP+FNTPFPR=TN+FPFP
例图:
在前面介绍的性能度量中,都隐式地架设了均等代价。而为权衡不同类型错误所造成的不同损失,考虑为错误赋予“非均等代价”(unequal cost)。
如二分类中,可根据任务的领域知识设计如下“代价矩阵”:
非均等代价下,不再考虑简单地最小化错误次数,二是希望最小化“总体代价”(total cost)。对于上表,将第0类作为正类,第1类作为反类,令D+、D-分别代表样例集D中正例集和反例集,则“代价敏感”(cost-sensitive)错误率为: E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + I ( f ( x i ) ≠ y i ) × c o s t 01 + ∑ x i ∈ D − I ( f ( x i ) ≠ y i ) × c o s t 10 ) E(f;D;cost)=\frac{1}{m}(\sum_{x_i \in D^+}\mathbb I (f(x_i) \not =y_i)\times cost_{01}+\sum_{x_i \in D^-}\mathbb I (f(x_i) \not =y_i)\times cost_{10}) E(f;D;cost)=m1(xi∈D+∑I(f(xi)=yi)×cost01+xi∈D−∑I(f(xi)=yi)×cost10)
非均等代价下,使用“代价曲线”(cost curve)来直接反映学习器的期望总体代价。
曲线横轴是取值为[ 0,1 ]的正例概率代价:
P ( + ) c o s t = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 10 ( q 是样例为正例的概率 ) P(+)cost=\frac{p \times cost_{01}}{p \times cost_{01}+(1-p)\times cost_{10}} \qquad (q是样例为正例的概率) P(+)cost=p×cost01+(1−p)×cost10p×cost01(q是样例为正例的概率)
曲线纵轴是取值为[ 0,1 ]的归一化代价:
c o s t n o r m = F N R × p × c o s t 01 + F P R × ( 1 − p ) × c o s t 10 p × c o s t 01 + ( 1 − p ) × c o s t 10 ( 其中 F P R 是假正例率, F N R 是假反例率 ) cost_{norm}=\frac{FNR \times p\times cost{01}+FPR\times (1-p)\times cost_{10}}{p\times cost_{01}+(1-p)}\times cost_{10} \qquad (其中FPR是假正例率,FNR是假反例率) costnorm=p×cost01+(1−p)FNR×p×cost01+FPR×(1−p)×cost10×cost10(其中FPR是假正例率,FNR是假反例率)
再按如下步骤绘制:ROC曲线上每一点对应了代价平面上的一条线段,设 ROC曲线上点的坐标为(TPR, FPR),则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。