目录
一 集成学习背景
1 集成学习概念
2 集成学习优势
1)弱分类器之间存在差异性的问题
2)对于数据集过大或者过小的问题
3)对于数据集的划分边界过于复杂,线性模型很难描述的问题
4)对于多个异构数据集而言,数据集很难合并的问题
3 集成学习三种思想
1)Bagging思想(Bootstrap Aggregating,自主汇聚法)
2)Boosting思想(存在弱学习器,可通过提升技术变成强学习器)
3)Stacking思想
二 Bagging
1 随机森林算法(Random Forest)
1)算法原理
2)优点
3)缺点
2 随机森林的推广算法
1)Extra Tree算法原理(一般不推荐使用)
2)Totally Random Trees Embedding算法原理(TRTE,一种无监督的特征转换)
3)Isolation Forest算法原理(IForest,一种异常点检测算法)
三 Boosting思想
1 AdaBoost算法
1)概念(关注提升过程)
2)算法原理
3)算法流程
4)算法优缺点
2 GBDT(Gradient Boosting Dicision Tree)
1)算法概念
2)算法流程(以回归问题为例)
3)算法处理分类问题,损失函数采用对数损失函数(交叉熵损失函数)
4)算法优缺点
3 XGBOOST(GBDT的变种算法)
1)算法概念
2)算法原理
3)算法学习策略(树生成策略)
4)XGBoost特性(优点)
四 Stacking思想
指将若干个学习器进行组合而得到一个新的学习器
导致分类边界的不同(换言之存在错误),那么将多个弱分类器合并之后,会得到更加合理的分类边界
我们可以采用划分或者有放回操作,得到不同的数据子集,分别训练不同的学习器,在组合成一个新的学习器
可以训练多个学习器,再组合成一个新的学习器
可以对每个数据集训练一个学习器,在组合成一个新的学习器
在原始数据集上通过bootstap有放回抽样方式,抽取出S个新的数据集(存在重复数据,实际训练时需去重),分别训练S个学习器,并进行组合成新的学习器(并行训练)
每一步产生弱学习器,并加权累计到总学习器上,且每一步的弱学习器生成都是依据损失函数的梯度方式(串行训练)
训练多个学习器产生多个输出,并作下个学习器的输入,并重复多个阶段进行(类似于深度学习中的神经网络)
注意:Bagging与Boosting区别
Bagging每一轮样本是从原始数据中有放回随机抽取的
Boosting每一轮样本为原始数据,但是样本权重或者目标属性由上一轮损失函数调整
Bagging采用并行计算
Boosting采用串行计算
Bagging降低的是模型的方差()
Boosting降低的是模型的偏差()
第一点:无需进行交叉验证或者使用一个独立测试集来获取误差的无偏估计(换言之它可以在内部进行误差的无偏估计)
数据集足够大,采用bootstrap抽样,对于第K棵树而言,约有1/3总样本未参与第K棵树的生成,它们被称为第K棵树的袋外样本
第一步:每个袋外样本,计算它作为袋外样本的树(约有1/3棵树),对其分类情况
第二步:多数表决法预测分类情况
第三步:使用误分类样本个数占总袋外样本的比率作为袋外错误率
第二点:可以得到特征重要度,进行特征选择
第三点:可以并行训练,对于大规模数据集具有训练优势
第一点:对于特别的异常样本,使得RF容易陷入过拟合
第二点:对于取值较多的特征,使得RF决策受到影响
注意:在某些特别情况下,可能优于RF算法
注意:是一种非监督的特征转换方式(RF+KD-Tree),可以将数据从低维度映射到高维度
第一步:计算该样本在T棵决策树上的叶子节点深度,求得平均深度
第二步:m为样本个数,为欧拉常数:
第三步:从而测试点作为异常点概率:
注意:异常点检测不需要太多样本以及太多决策树
算法在每一轮迭代过程中,会给每个样本赋予权重,预测越正确的样本降低其权重,反之提高权重
第一点:将基分类器的线性组合作为强分类器,给分类误差小的基分类器以较大的权重,给分类误差大的基分类器以较小的权重
第二点:损失函数(总分类器角度的错误率)
第三点:第k-1轮总学习器,第k轮总学习器,m轮总学习器损失函数
第四点:使m轮损失函数达到最小值时的,是Adaboost的最终求解
注意:求解偏导过程
第一步:假定数据集
第二步:初始化训练集样本分布权重
第三步:使用具有权值分布的训练集学习,得到基学习器
第四步:计算在训练集上的分类误差
第五步:计算的权重系数(针对基分类器)
注意:误差越大,权重系数越小
第六步:更新具有权值分布的训练集(使用归一化因子)
第七步:构建基本学习器的线性组合
第八步:最终分类器
注意:可以指定每个弱学习器的缩减系数
第一点:优点
第二点:缺点
算法在每一轮迭代过程中,使用残差更新目标属性,预测越正确的样本残差越小,反之越大
注意:GBDT由三部分构成,回归树、梯度提升、缩减系数
第一步:假定数据集
第二步:基学习器采用回归树,使用平方和损失或者绝对值损失函数(推荐平方和损失函数)
注意:为防止基回归树过拟合,添加缩放系数
第三步:初始化初始函数(常数函数)
注意:实际算法中C一般按照均值方法初始化常数函数
第四步:第m轮迭代中构建回归树
第一点:第m棵树第j个叶子节点的预测值
第二点:样本在第m棵树的预测值
第五步:总模型
添加缩放系数:
第一点:二分类
注意:表示总样本中正负样本的比率的对数
第二点:多分类(目标属性采用多标签)
第一点:优点
第二点:缺点
算法在每一轮迭代过程中,使用残差更新目标属性,预测越正确,残差越小,反之亦然
第一点:损失函数 = GBDT损失函数 + 正则化项(L2正则)
第二点:第m轮迭代后,损失函数
第三步:损失函数最小时的
第四步:将带入损失函数
第五步:XGBoost损失函数
第一步:XGBoost算法原理所确定的损失函数,可以使得我们确定节点分裂的信息损失
第二步:选择特征属性以及分裂特征属性依据信息损失(不同于决策树的信息损失纯度度量)
第一点:分裂左节点(L)、右节点(R)之前的损失函数
第二点:分裂左节点(L)、右节点(R)之后的损失函数
越大,分裂节点之后的信息损失越大
第三步:节点分裂是采用近似计算(分位数)
选择以及分裂特征属性,不是遍历每一个特征进行各种可能的分裂属性,而是依据二阶导数作为权重的分位数进行分裂属性
第一点:定义集合
第二点:确定分位数位置
第三点:在第个特征的分位数位置进行分裂属性,计算信息损失程度大小
目前几乎不使用,深度学习神经网络比其更加具有优势