【机器学习基础】系列博客为参考周志华老师的《机器学习》一书,自己所做的读书笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。
1.误差-分歧分解
在【机器学习基础】第二十七课:集成学习之个体与集成一文中,欲构建泛化能力强的集成,个体学习器应“好而不同”。现在我们来做一个简单的理论分析。
假定我们用个体学习器h1,h2,…,hT通过加权平均法结合产生的集成来完成回归学习任务f:Rd↦R。对示例x,定义学习器hi的“分歧”(ambiguity)为:
A(hi∣x)=(hi(x)−H(x))2
其中,H(x)为集成得到的模型:
H(x)=T∑i=1wihi(x)
则集成的“分歧”是:
ˉA(h∣x)=T∑i=1wiA(hi∣x)=T∑i=1wi(hi(x)−H(x))2
显然,这里的“分歧”项表征了个体学习器在样本x上的不一致性,即在一定程度上反映了个体学习器的多样性。个体学习器hi和集成H的平方误差分别为:
E(hi∣x)=(f(x)−hi(x))2 E(H∣x)=(f(x)−H(x))2
令ˉE(h∣x)=∑Ti=1wi⋅E(hi∣x)表示个体学习器误差的加权均值,有:
ˉA(h∣x)=T∑i=1wi(hi(x)−H(x))2=T∑i=1wi(hi(x)2−2hi(x)H(x)+H(x)2)=T∑i=1wihi(x)2−2T∑i=1wihi(x)H(x)+T∑i=1wiH(x)2=T∑i=1wihi(x)2−2H(x)T∑i=1wihi(x)+H(x)2T∑i=1wi=T∑i=1wihi(x)2−2H(x)⋅H(x)+H(x)2=T∑i=1wihi(x)2−H(x)2
∑Ti=1wi=1。
又:
T∑i=1wiE(hi∣x)−E(H∣x)=T∑i=1wi(f(x)−hi(x))2−(f(x)−H(x))2=T∑i=1wi(f(x)2−2f(x)hi(x)+hi(x)2)−(f(x)2−2f(x)H(x)+H(x)2)=f(x)2−2f(x)T∑i=1wihi(x)+T∑i=1wihi(x)2−f(x)2+2f(x)H(x)−H(x)2=f(x)2−2f(x)H(x)+T∑i=1wihi(x)2−f(x)2+2f(x)H(x)−H(x)2=T∑i=1wihi(x)2−H(x)2
结合式(6)和式(7)可得:
ˉA(h∣x)=T∑i=1wiE(hi∣x)−E(H∣x)=ˉE(h∣x)−E(H∣x)
式(8)对所有样本x均成立,令p(x)表示样本的概率密度,则在全样本上有(结合式(3)):
T∑i=1wi∫A(hi∣x)p(x)dx=T∑i=1wi∫E(hi∣x)p(x)dx−∫E(H∣x)p(x)dx
类似的,个体学习器hi在全样本上的泛化误差和分歧项分别为:
Ei=∫E(hi∣x)p(x)dx Ai=∫A(hi∣x)p(x)dx
集成的泛化误差为:
E=∫E(H∣x)p(x)dx
将式(10)-式(12)代入式(9),再令ˉE=∑Ti=1wiEi表示个体学习器泛化误差的加权均值,ˉA=∑Ti=1wiAi表示个体学习器的加权分歧值,有:
E=ˉE−ˉA
式(13)明确提示出:个体学习器准确率越高、多样性越大,则集成越好。并将其称为“误差-分歧分解”(error-ambiguity decomposition)。
要想使泛化误差E越小,则可使ˉE越小,即个体学习器准确率越高;使ˉA越大,即多样性越大。
但是上述的推导过程只适用于回归学习,难以直接推广到分类学习任务上去。
2.多样性度量
顾名思义,多样性度量(diversity measure)是用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度。典型做法是考虑个体分类器的两两相似/不相似性。
亦称“差异性度量”。
给定数据集D={(x1,y1),(x2,y2),…,(xm,ym)},对二分类任务,yi∈{−1,+1},分类器hi与hj的预测结果列联表(contingency table)为:
其中,a表示hi与hj均预测为正类的样本数目;b、c、d含义由此类推;a+b+c+d=m。基于这个列联表,下面给出一些常见的多样性度量。
不合度量(disagreement measure):
disij=b+cm
disij的值域为[0,1]。值越大则多样性越大。
相关系数(correlation coefficient):
ρij=ad−bc√(a+b)(a+c)(c+d)(b+d)
ρij的值域为[−1,1]。若hi与hj无关,则值为0;若hi与hj正相关则值为正,否则为负。
Q-统计量(Q-statistic):
Qij=ad−bcad+bc
Qij与相关系数ρij的符号相同,且lvert Q_{ij} rvert leqslant lvert rho_{ij} rvert。
kappa-统计量(kappa-statistic):
kappa = frac{p_1-p_2}{1-p_2} tag{17}
其中,p_1是两个分类器取得一致的概率;p_2是两个分类器偶然达成一致的概率,它们可由数据集D估算:
p_1 = frac{a+d}{m} tag{18} p_2 = frac{(a+b)(a+c)+(c+d)(b+d)}{m^2} tag{19}
若分类器h_i与h_j在D上完全一致,则kappa=1;若它们仅是偶然达成一致,则kappa=0。kappa通常为非负值,仅在h_i与h_j达成一致的概率甚至低于偶然性的情况下取负值。
以上介绍的都是“成对型”(pairwise)多样性度量,它们可以容易地通过2维图绘制出来。例如著名的“kappa-误差图”,就是将每一对分类器作为图上的一个点,横坐标是这对分类器的kappa值,纵坐标是它们的平均误差,下图给出了一个例子。显然,数据点云的位置越高,则个体分类器准确性越低;点云的位置越靠右,则个体学习器的多样性越小。
3.多样性增强
在集成学习中需有效地生成多样性大的个体学习器。与简单地直接用初始数据训练出个体学习器相比,如何增强多样性呢?一般思路是在学习过程中引入随机性,常见做法主要是对数据样本、输入属性、输出表示、算法参数进行扰动。不同的多样性增强机制可同时使用。有些方法甚至同时使用了更多机制。
3.1.数据样本扰动
给定初始数据集,可从中产生出不同的数据子集,再利用不同的数据子集训练出不同的个体学习器。
数据样本扰动法对“不稳定基学习器”很有效,例如决策树、神经网络等,训练样本稍加变化就会导致学习器有显著变动。
然而,有一些基学习器对数据样本的扰动不敏感,例如线性学习器、支持向量机、朴素贝叶斯、k近邻学习器等,这样的基学习器称为稳定基学习器,对此类基学习器进行集成往往需使用输入属性扰动等其他机制。
3.2.输入属性扰动
著名的随机子空间(random subspace)算法就依赖于输入属性扰动,该算法从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器。对包含大量冗余属性的数据,在子空间中训练个体学习器不仅能产生多样性大的个体,还会因属性数的减少而大幅节省时间开销。同时,由于冗余属性多,减少一些属性后训练出的个体学习器也不至于太差。若数据只包含少量属性,或者冗余属性很少,则不宜使用输入属性扰动法。
3.3.输出表示扰动
此类做法的基本思路是对输出表示进行操纵以增强多样性。可对训练样本的类标记稍作变动,如“翻转法”(Flipping Output)随机改变一些训练样本的标记;也可对输出表示进行转化,如“输出调制法”(Output Smearing)将分类输出转化为回归输出后构建个体学习器;还可将原任务拆解为多个可同时求解的子任务,如ECOC法利用纠错输出码将多分类任务拆解为一系列二分类任务来训练基学习器。
3.4.算法参数扰动
基学习算法一般都有参数需进行设置,例如神经网络的隐层神经元数、初始连接权值等,通过随机设置不同的参数,往往可产生差别较大的个体学习器。对参数较少的算法,可通过将其学习过程中某些环节用其他类似方式代替,从而达到扰动的目的,例如可将决策树使用的属性选择机制替换成其他的属性选择机制。