机器学习(Machine Learning)是一门多学科交叉专业,涵盖概率论知识,统计学知识以及复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式, 并将现有内容进行知识结构划分来有效提高学习效率。本专栏将以学习笔记形式对《机器学习》的重点基础知识进行总结整理,欢迎大家一起学习交流!
专栏链接:《机器学习》学习笔记
目录
个体与集成
Boosting
Boosting算法
Adaboost
AdaBoost算法
Adaboost的算法流程
Adaboost的例子
AdaBoost实验
Bagging与随机森林
Bagging算法
Bagging算法特点
随机森林算法
结合策略
平均法
投票法
学习法
多样性
误差-分歧分解
多样性度量
多样性扰动
集成学习(ensemble learning)通过构建并结合多个学习器来提升性能。
考虑一个简单的例子,在二分类问题中,假定3个分类器在三个样本中的表现如下图所示,其中√ 表示分类正确,X 号表示分类错误,集成的结果通过投票产生。
集成个体应:好而不同
考虑二分类问题,假设基分类器的错误率为:
假设继承通过简单投票法结合T个分类器,若有超过半数的基分类器正确则分类就正确
假设基分类器的错误率相互独立,则由Hoeffding不等式可得集成的错误率为:
上式显示,在一定条件下,随着集成分类器数目的增加,集成得到错误率将指数级下降,最终趋向于0.
AdaBoost,是英文“Adaptive Boosting”(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些Adaboost弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用adaboost分类器可以排除一些不必要的训练数据特征,并将关键放在关键的训练数据上面。
目前,对adaBoost算法的研究以及应用大多集中于分类问题,同时近年也出现了一些在回归问题上的应用。就其应用adaBoost系列主要解决了: 两类问题、多类单标签问题、多类多标签问题、大类单标签问题,回归问题。它用全部的训练样本进行学习。
该算法其实是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力。整个过程如下所示:
Adaboost的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
具体说来,整个Adaboost 迭代算法就3步:
对于这个算法需要介绍的是:
求解过程:
解:初始化数据权值分布
对,
在权值分布为的训练数据上,阈值v取2.5时分类误差率最低,故基本分类器为
对于m=1,在权值分布为D1(10个数据,每个数据的权值皆初始化为0.1)的训练数据上,经过计算可得:
阈值v取2.5时误差率为0.3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.3)
阈值v取5.5时误差率最低为0.4(x < 5.5时取1,x > 5.5时取-1,则3 4 5 6 7 8皆分错,误差率0.6大于0.5,不可取。故令x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.4)
阈值v取8.5时误差率为0.3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.3)。所以无论阈值v取2.5,还是8.5,总得分错3个样本,故可任取其中任意一个如2.5,弄成第一个基本分类器为:
上面说阈值v取2.5时则6 7 8分错,所以误差率为0.3,更加详细的解释是:
因为样本集中 :
0 1 2对应的类(Y)是1,因它们本身都小于2.5,所以被G1(x)分在了相应的类“1”中,分对了。
3 4 5本身对应的类(Y)是-1,因它们本身都大于2.5,所以被G1(x)分在了相应的类“-1”中,分对了。
但6 7 8本身对应类(Y)是1,却因它们本身大于2.5而被G1(x)分在了类"-1"中,所以这3个样本被分错了。
9本身对应的类(Y)是-1,因它本身大于2.5,所以被G1(x)分在了相应的类“-1”中,分对了。
从而得到G1(x)在训练数据集上的误差率(被G1(x)误分类样本“6 7 8”的权值之和)e1=P(G1(xi)≠yi) = 3*0.1 = 0.3。
然后根据误差率e1计算G1对的系数:
这个a1代表G1(x)在最终的分类函数中所占的权重,为0.4236.接着更新徐念数据的权值分布,用于下一轮你迭代:
值得一提的是,由权值更新的公式可知,每个样本的新权值是变大还是变小,取决于它是被分错还是被分正确。
即如果某个样本被分错了,则yi * Gm(xi)为负,负负等正,结果使得整个式子变大(样本权值变大),否则变小。
第一轮迭代后,最后得到各个数据新的权值分布D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。
由此可以看出,因为样本中是数据“6 7 8”被G1(x)分错了,所以它们的权值由之前的0.1增大到0.1666,反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到0.0715。
分类函数f1(x)= a1*G1(x) = 0.4236G1(x)。
此时,得到的第一个基本分类器sign(f1(x))在训练数据集上有3个误分类点(即6 7 8)。
从上述第一轮的整个迭代过程可以看出:被误分类样本的权值之和影响误差率,误差率影响基本分类器在最终分类器中所占的权重。
迭代过程2:
对于m=2,在权值分布为D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的训练数据上,经过计算可得: 阈值v取2.5时误差率为0.1666*3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.1666*3), 阈值v取5.5时误差率最低为0.0715*4(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.0715*3 + 0.0715), 阈值v取8.5时误差率为0.0715*3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.0715*3)。
总观迭代步骤:
数据分布的学习
重启动,避免训练过程过早停止
从偏差-方差的角度:降低偏差,可对泛化性能相当弱的学习器构造出很强的集成。
时间复杂度低
可使用包外估计(由于Bootstrap sampling 只使用2/3左右数据,剩下的用作验证,称为“包外估计”—out of bag estimate)
学习器的组合可以从三个方面带来好处
由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用但学习器可能因误选而导致泛化性能不佳,结合多个学习器则会减小这一风险。
学习算法往往会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟,而通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险。
某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用但学习器则肯定无效,而通过结合多个学习器,由于响应的假设空间有所扩大,有可能学得更好的近似。
简单平均法
加权平均法
常见的增强个体学习器的多样性的方法
数据样本扰动通常是基于采样法
对数据样本的扰动敏感的基学习器(不稳定基学习器)
对数据样本的扰动不敏感的基学习器(稳定基学习器)
数据样本扰动对“不稳定基学习器”很有效
随机子空间算法(random subspace)
输出表示扰动
算法参数扰动
感谢阅读