这是学习周志华老师《机器学习》的一些重要概念的简要笔记 ,仅防个人忘记
错误率(error rate) = 分类错误样本数 / 样本总数
精度(accuracy)= 1 - 错误率
误差(error)
过拟合(overfitting):学习器将训练样本自身的一些特定视为所有潜在样本都会具有的一般性质,这会导致泛化性下降
欠拟合(underfitting):对训练样本的一般性质尚未学好
使用测试集(testing set)来测试学习器对新样本的判别能力,以测试误差(testing error)作为泛化误差的近似
通常假设测试样本也是从样本真实分布中独立同分布采样获得。注意,测试集应尽可能与训练集互斥
hold-out 直接将数据集 D D D 划分为两个互斥的集合,一个为训练集 S S S ,另一个为测试集 T T T,常用比例是 2 3 ∼ 4 5 \frac{2}{3}\sim\frac{4}{5} 32∼54 的比例作为 S S S,剩下的作为 T T T。
注意, S , T S,T S,T 的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果造成影响。例如在分类任务中至少要保持样本的类别比例相似。若从采样的角度来看待数据划分过程,则保留类别比例的采样方式通常称为”分层采样“(stratified sampling)。若 S , T S,T S,T 中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差
然而,不同的划分将导致不同的 S , T S,T S,T,模型评估的结果也会不同。因此,单次使用 hold-out 得到的估计结果往往不够稳定可靠,在使用 hold-out 时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为 hold-out 的评估结果(即若使用 n n n 次hold-out,意味着要训练 n n n 个模型,然后取这些模型的平均估计作为最终的估计结果)
cross validation,亦称” k k k 折交叉验证“(k-fold cross validation, k k k 常取 5,10,20 等), 先将数据集 D D D 划分为 k k k 个大小相似的互斥子集 D 1 , ⋯   , D k D_1,\cdots,D_k D1,⋯,Dk,每个子集 D i D_i Di 都要尽可能保持数据分布的一致性,即从 D D D 中通过分层采样得到。然后,在每次训练一个完整的模型时(注意不是每迭代一次),用 k − 1 k-1 k−1 个子集的并集作为训练集,余下的作为测试集。这样在 k k k 组训练/测试集上,会获得 k k k 个模型,用这 k k k 个模型在各自的测试集上的测试结果的均值作为最终的测试结果
hold-out 与 cross validation 结合:缓解 cross validation 因不同划分所造成的不同评估结果。具体操作如下( p p p 次 k k k 折交叉验证):
留一法(Leave-One-Out,简称 LOO):仅留一个样本作为测试集,其余作为训练集,是 cross validation 的一个特例
目的:希望评估的是用 D D D 训练出的模型,但留出法和交叉验证法由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比 D D D 小,而这必然会引入一些因训练样本规模不同而导致的估计偏差;而留一法的计算复杂度太高,不适合使用。因此,bootstrapping 是一种比较好的解决方法
自助采样:
注意,通过自助采样后, D D D 中有一部分样本会在 D ′ D' D′ 中重复出现,另一部分不出现。而样本在 ∣ D ∣ |D| ∣D∣ 次采用中始终不被采到的概率为 ( 1 − 1 ∣ D ∣ ) ∣ D ∣ (1 - \frac{1}{|D|})^{|D|} (1−∣D∣1)∣D∣,取极限可得:
lim ∣ D ∣ → ∞ ( 1 − 1 ∣ D ∣ ) ∣ D ∣ = 1 e ≈ 0.368 \lim_{|D| \to \infty} \left(1 - \frac{1}{|D|}\right)^{|D|} = \frac{1}{e} \approx 0.368 ∣D∣→∞lim(1−∣D∣1)∣D∣=e1≈0.368
因此,通过自助采样,初始数据集 D D D 中约有 36.8 % 36.8\% 36.8% 的样本未出现在采样数据集 D ′ D' D′ 中
自助法就是通过自助采样法获得 D , D ′ D,D' D,D′,然后将 D ′ D' D′ 作为训练集, D \ D ′ D \backslash D' D\D′ 作为测试集。这样,实际评估的模型与期望评估的模型都使用了 ∣ D ∣ |D| ∣D∣ 个训练样本,而我们仍有数据总量约 1/3 的、没在训练集中出现的样本用于测试。这样的测试结果,亦称“包外估计”(out-of-bag estimate)
自助法:
调参方式主要分为两种:网格搜索与随机搜索,详见ML模型超参数调节:网格搜索、随机搜索与贝叶斯优化
最终模型:给定包含 m m m 个样本的数据集 D D D 并用训练/测试集中评估并选择好模型后,即学习算法及参数配置确定后,再用整个 D D D 重新训练模型,给模型作为最终模型
一般,数据集为划分:
回归中最常用的性能度量是“均方误差”(mean squared error, MSE),即:
(1) E ( f ; D ) = 1 ∣ D ∣ ∑ i = 1 ∣ D ∣ ( f ( x i ) − y i ) 2 = ∫ x ∼ D ( f ( x ) − y ) 2 p ( x ) d x E(f;D) = \frac{1}{|D|} \sum_{i=1}^{|D|} (f(x_i) - y_i)^2 = \int_{x \sim D} (f(x) - y)^2 p(x) dx \tag{1} E(f;D)=∣D∣1i=1∑∣D∣(f(xi)−yi)2=∫x∼D(f(x)−y)2p(x)dx(1)
其中 D D D 为数据分布,即为数据集, p ( ⋅ ) p(\cdot) p(⋅) 为概率密度函数
分类中最常用的两种性能度量,即:
(2) E ( f ; D ) = 1 ∣ D ∣ ∑ i = 1 ∣ D ∣ 1 ( f ( x ) = ̸ y i ) = ∫ x ∼ D 1 ( f ( x ) = ̸ y ) p ( x ) d x acc ( f ; D ) = 1 − E ( f ; D ) \begin{array}{l} E(f;D) = \displaystyle\frac{1}{|D|} \sum_{i=1}^{|D|} 1(f(x) =\not y_i) = \int_{x \sim D} 1(f(x) =\not y) p(x) dx \\ \text{acc}(f;D) = 1 - E(f;D) \end{array} \tag{2} E(f;D)=∣D∣1i=1∑∣D∣1(f(x)≠yi)=∫x∼D1(f(x)≠y)p(x)dxacc(f;D)=1−E(f;D)(2)
其中 E ( ⋅ ) E(\cdot) E(⋅) 为错误率,acc ( ⋅ ) (\cdot) (⋅) 为精度
对于二分类问题,可将样例根据其真实类别与预测类别的组合划分为:真正例(TP)、假正例(FP)、真反例(TN)、假反例(FN),则查准率与查全率的定义如下:
(3) P = T P T P + F P = T P 被 预 测 成 正 例 的 数 量 R = T P T P + F N = T P 数 据 集 中 所 有 正 例 数 量 \begin{array}{l} P = \displaystyle\frac{TP}{TP + FP} = \frac{TP}{被预测成正例的数量} \\[1.2em] R = \displaystyle\frac{TP}{TP + FN} = \frac{TP}{数据集中所有正例数量} \end{array} \tag{3} P=TP+FPTP=被预测成正例的数量TPR=TP+FNTP=数据集中所有正例数量TP(3)
查准率 P P P 和查全率 R R R 是一对矛盾的度量。一般而言, P P P 越高时, R R R 往往偏低;而 R R R 高时, P P P 往往偏低(前提:一个好的分类器)。通常只有在一些简单任务中,才可能使二者均高
用于综合考虑 P , R P,R P,R 来对模型的性能进行度量。此处以一个简单的例子看它应如何计算
假设现在有一个二分类器对数据集 D = { d 1 , d 2 , d 3 } D=\{ d_1, d_2, d_3 \} D={d1,d2,d3} 的预测结果如下:
样本 | 真实类别 | 预测概率 |
---|---|---|
d 2 d_2 d2 | 1 | 0.9 |
d 1 d_1 d1 | 0 | 0.8 |
d 3 d_3 d3 | 1 | 0.2 |
注意,样本已经根据预测概率进行了排序,则分别看排名前1,前2,前3个样本,通过式 (3) 分别计算这三个阶段对应的 P , R P,R P,R 值:
前 n n n | T P TP TP | F P FP FP | P P P | R R R |
---|---|---|---|---|
1 | 1 | 0 | 1 | 0.5 |
2 | 1 | 1 | 0.5 | 0.5 |
3 | 1 | 1 | 0.5 | 0.5 |
例如以前 2 为例,通过表 1 可知,排名前 2 为 d 2 , d 1 d_2,d_1 d2,d1,其中 d 2 d_2 d2 为 T P TP TP,而 d 1 d_1 d1 为 N P NP NP,故在前 2 个中共有 1 个 T P TP TP 和 1 个 N P NP NP,对应到表 2 的 T P TP TP 列即为 1。同理可知 N P NP NP。然后再通过公式 (3) 即可得到 P , R P,R P,R 值。将所计算得到的所有 P , R P,R P,R 作为 ( P , R ) (P,R) (P,R) 点即可绘制 P-R曲线。更详细的例子可参考链接
P-R 图直观地显示出学习器在样本总体上的查全率、查准率。在进行比较时,若一个学习器的 P-R 曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若二者的曲线发生了交叉,则难以一般性地断言两者孰优孰劣,只能在具体查准率或查全率条件下比较。一般而言,比较 P-R 曲线下面积的大小,可一定程度上表征学习器在查准率和查全率上取得相对 “双高”的比例,但该值不太容易计算
因 P-R 曲线的面积不太容易计算,其它相对交容易且能综合考虑查准率、查全率的性能度量被提出,具体如下:
该点是“查准率=查全率”的取值,如图上所示。值越大,则可认为学习器越优
因 BEP 过于简单,更常用的为 F 1 F1 F1 度量,具体定义如下:
(4) F 1 = 2 × P × R P + R = 2 × T P 样 例 总 数 + T P − T N ( 直 接 套 入 公 式 ( 3 ) 中 P , R 的 定 义 即 可 解 得 等 号 右 边 ) F1 = \frac{2×P×R}{P+R} = \frac{2×TP}{样例总数+TP-TN}(直接套入公式(3)中P ,R的定义即可解得等号右边)\tag{4} F1=P+R2×P×R=样例总数+TP−TN2×TP(直接套入公式(3)中P,R的定义即可解得等号右边)(4)
它的一般形式为 F β F_{\beta} Fβ,定义如下:
(5) F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R F_\beta = \frac{(1+\beta^2)×P×R}{(\beta^2 × P)+R} \tag{5} Fβ=(β2×P)+R(1+β2)×P×R(5)
可用于表达对查 P / R P/R P/R的不同的偏好。当 β = 1 \beta=1 β=1 时退化成标准的 F 1 F1 F1, β > 1 \beta>1 β>1 时对 P P P 有更大影响, β < 1 \beta<1 β<1 时则相反。( F β = ( 1 + β 2 ) 1 β 2 1 R + 1 P \displaystyle F_\beta = (1+\beta^2) \frac{1}{\beta^2\frac{1}{R} + \frac{1}{P}} Fβ=(1+β2)β2R1+P11)
此处的二分类混淆矩阵,即值在数据集上进行训练/测试后得到的 T P , N P , F P , F N TP,NP,FP,FN TP,NP,FP,FN 的统计数量,即上面的表 2.1
假设存在多个二分类混淆矩阵,例如进行多次训练/测试,或在多个数据集上进行训练/测试,每次可获得一个混淆矩阵,希望可以估计在这 n n n 个二分类混淆矩阵上综合考察 P , R P,R P,R。下面记录两种做法:
截断点:根据分类预测结果对样本进行排序,然后人为选择一个“截断点”/分类阈值,该点将样本分为两部分,截断点以前的分为正例,否者为反例
在 P , R P,R P,R 中,若我们更重视 P P P,则可选择排序靠前的位置进行截断;若更重视 R R R,则可选择排序靠后的位置进行截断——因此,排序本身质量的好坏体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,即“一般情况下”泛化性能的好坏。而 ROC 曲线则是从该角度来对学习器泛化性能进行研究的工具
ROC 曲线,全称“受试者工作特征”(Receiver Operating Characteristic)曲线,用于衡量学习器在一般情况下泛化性能的好坏。该曲线的横、纵轴为“假正例”(False Positive Rate,简称 FPR)、“真正率”(True Positivate Rate,简称 TPR),具体定义如下:
(8) FPR = F P T N + F P = F P 测 试 数 据 中 反 例 的 数 量 TPR = T P T P + F N = T P 测 试 数 据 中 正 例 的 数 量 = R \begin{array}{l} \text{FPR} = \displaystyle\frac{FP}{TN + FP} = \frac{FP}{测试数据中反例的数量}\\[1em] \text{TPR} = \displaystyle\frac{TP}{TP + FN} = \frac{TP}{测试数据中正例的数量} = R \end{array} \tag{8} FPR=TN+FPFP=测试数据中反例的数量FPTPR=TP+FNTP=测试数据中正例的数量TP=R(8)
注意 FPR,TPR \text{FPR,TPR} FPR,TPR 的分母均为常数,变的仅为分子。
ROC 曲线的绘制过程如下:给定 m + m^+ m+ 个正例和 m − m^- m− 个反例
与 P-R 曲线一样,若一个学习器的 ROC 曲线被另一个的曲线完全“包住”,则断言后者的性能优于前者;若有交叉,则难以一般断言,此时可通过比较 ROC 曲线下的面积来判断。ROC 曲线下的面积,即为 AUC(Area Under ROC Curve),假设共有 m m m 个样本/点,则它的估算公式为:
(9) AUC = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ( y i + 1 + y i ) \text{AUC} = \frac{1}{2} \sum_{i=1}^{m-1} (x_{i+1}-x_i)(y_{i+1}+y_i) \tag{9} AUC=21i=1∑m−1(xi+1−xi)(yi+1+yi)(9)
非均等代价(unequal cost):在现实中,不同类型的错误所造成的后果不同。因此,为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)
代价矩阵(cost matrix):由人为根据领域知识所构建,矩阵中的每一项 c o s t i j cost_{ij} costij 表示将第 i i i 类样本预测为第 j j j 类样本的代价。一般而言,预测正确的代价为 0,即 c o s t i i = 0 cost_{ii}=0 costii=0
在非均等代价上,优化的目标不再是简单地最小化错误次数(公式 (1)),而是最小化“总体代价”(total cost)。以二分类为例,将 c o s t 01 cost_{01} cost01 作为假反例 F N FN FN 的代价, c o s t 10 cost_{10} cost10 作为假正例 F P FP FP 的代价。数据集 D D D 有 D − D^- D− 个反例,有 D + D^+ D+ 个正例, 则“代价敏感”(cost-sensitive)错误率为:
(10) E ( f ; D ; c o s t ) = 1 ∣ D ∣ ( ∑ x i ∈ D + 1 ( f ( x i ) = ̸ y i ) × c o s t 01 + ∑ x i ∈ D − 1 ( f ( x i ) = ̸ y i ) × c o s t 10 ) E(f;D;cost) = \frac{1}{|D|} \left( \sum_{x_i \in D^+} 1(f(x_i) =\not y_i) × cost_{01} + \sum_{x_i \in D^-} 1(f(x_i) =\not y_i) × cost_{10} \right) \tag{10} E(f;D;cost)=∣D∣1(xi∈D+∑1(f(xi)≠yi)×cost01+xi∈D−∑1(f(xi)≠yi)×cost10)(10)
类似的,也可定义一些其它性能度量的代价敏感版本
在非均等代价上,ROC 曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到该目的。该曲线的横、纵轴分别为正例概率代价 P ( + ) c o s t P(+)cost P(+)cost、归一化代价(cost_{norm}):
(11) P ( + ) c o s t = p ∗ c o s t 01 p ∗ c o s t 01 + ( 1 − p ) ∗ c o s t 10 c o s t n o r m = FNR ∗ p ∗ c o s t 01 + FPR ∗ ( 1 − p ) ∗ c o s t 10 p ∗ c o s t 01 + ( 1 − p ) ∗ c o s t 10 \begin{array}{l} P(+)cost = \displaystyle\frac{p*cost_{01}}{p*cost_{01} + (1-p)*cost_{10}} \\[1.2em] cost_{norm} = \displaystyle\frac{\text{FNR}*p*cost_{01}+\text{FPR}*(1-p)*cost_{10}}{p*cost_{01} + (1-p)*cost_{10}} \end{array} \tag{11} P(+)cost=p∗cost01+(1−p)∗cost10p∗cost01costnorm=p∗cost01+(1−p)∗cost10FNR∗p∗cost01+FPR∗(1−p)∗cost10(11)
其中 p p p 是数据集中样例为正例的概率(注意不是预测概率),在此即为 p = D + D p = \displaystyle\frac{D^+}{D} p=DD+ ; FPR \text{FPR} FPR 即为公式 (8) 中定义的假正率, FNR = 1 − TPR \text{FNR} = 1-\text{TPR} FNR=1−TPR 为假反率。cost curve 的绘制除了可直接利用式 (11) 来求得外,更简便的方法便是利用 ROC 曲线。具体步骤如下:
(12) cost curve = min { f ( FPR i , TPR i ) for (FPR i , TPR i ) in “points of ROC" } \begin{array}{l} \text{cost curve} = \min \left\{ f(\text{FPR}_i,\text{TPR}_i) \text{ for (FPR$_i$, TPR$_i$) in ``points of ROC"} \right\} \end{array} \tag{12} cost curve=min{f(FPRi,TPRi) for (FPRi, TPRi) in “points of ROC"}(12)
其中 f ( a , b ) = ( ( 1 − b ) − a ) ∗ x + a , x ∈ [ 0 , 1 ] f(a,b) = ((1-b)-a)*x + a, x \in [0,1] f(a,b)=((1−b)−a)∗x+a,x∈[0,1] 为一条过点 ( 0 , a ) , ( 1 , 1 − b ) (0,a), (1,1-b) (0,a),(1,1−b) 的直线,即 ROC 曲线上的每一点对应了代价平面上的一条线段。设 ROC 曲线上点的坐标为 ( FPR, TPR ) (\text{FPR, TPR}) (FPR, TPR),则根据 FNR = 1 − TPR \text{FNR} = 1-\text{TPR} FNR=1−TPR 可得到对应的 ( FPR,FNR ) (\text{FPR,FNR}) (FPR,FNR),然后在代价平面上绘制一条从 ( 0 , FPR ) (0,\text{FPR}) (0,FPR) 到 ( 1 , FNR ) (1,\text{FNR}) (1,FNR) 的线段,线段下的面积表示该条件下的期望总体代价。如此操作即可将 ROC 上的所有点均转换成在代价平面上对应的线段,然后取所有线段的下界,即为代价曲线,其所围成的面积,即为在所有条件下学习器的期望总体代价。具体示例如下图所示:
“偏差-方差”(bias-variance decomposition)试图对学习算法的期望泛化错误率进行拆解。算法在不同训练集上学得的结果很可能不同,即使这些训练集来自同一个分布。
对测试样本 x x x,令 y D y_D yD 为 x x x 在数据集中的标记, y y y 为 x x x 的真实标记, f ( x ; D ) f(x;D) f(x;D) 为训练集 D D D 上学得模型 f f f 在 x x x 上的预测输出,则
偏差-方差分解用于将泛化误差分解为偏差、方差与噪声之和:
E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) + ϵ 2 E(f;D) = bias^2(x) + var(x) + \epsilon^2 E(f;D)=bias2(x)+var(x)+ϵ2
该分解说明了,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定
偏差-方差窘境(bias-variance dilemma):即一般而言偏差与方差是有冲突的。给定学习任务,假定学习算法的训练程度可控,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器昌盛显著变化 ,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动逐渐能被学习到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化。若训练数据自身的、非全局的特性被学习器学到,则发生过拟合