集成学习
集成学习简介
[知道]集成学习是什么
集成学习是机器学习中的一种思想,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型成为弱学习器(基学习器).训练时,使用训练集依次训练出这些弱学习器,对未知的样本进行预测时,使用这些弱学习器联合进行预测
传统机器学习算法(例如:决策树,逻辑回归等的目标都是寻找一个最优分类器尽可能的将训练数据分开.集成学习(Ensemble Learning)算法的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器.集成算法可以说从一个方面验证了中国的一句老化:三个臭皮匠,赛过诸葛亮
集成学习通过建立几个模型来解决单一预测问题.它的工作原理是 生成多个分类器/模型,各自独立的学习和作出预测.这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测
[了解]集成学习分类
集成学习算法一般分为;bagging和boosating
[理解]bagging集成
Bagging 框架通过有放回的抽样产生不同的训练集.从而训练具有差异性的弱学习器,然后通过平权投票,多表表决的方式决定预测结果
[理解]boosting集成
Boosting体现了提升思想,每一个训练器重点关注前一个训练器不足的地方进行训练,通过加权投票的方式,得出预测结果
Boosting是一组可将弱学习器升为强学习器的算法.这类算法的工作机制类似:
1.先从初始训练集训练出一个基学习器
2.再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到最大的关注
3.然后基于调整后的样本分布来训练下一个基学习器:
4.如此重复进行.甚至基学习器数目达到实现指定的值T为止
5.再将这T个基学习器进行加权结合得到集成学习器
简而言之:每新加入一个若学习器,整体能力就会得到提升
Bagging 与 Boosting
区别一: 数据方面
Bagging: 有放回采样
Boosting: 全部数据集,重点关注前一个弱学习器不足
区别二: 投票方面
Bagging: 平权投票
Boosting: 加权投票
区别三: 学习顺序
Bagging的学习是并行的,每个学习器没有依赖关系
Boosting学习是串行,学习有先后顺序
随机森林
[理解]算法思想
随机森林是基于Bagging思想实现的一种集成学习算法,它采用决策树模型作为每一个基学习器.其构造过程:
1.训练:
1.有放回的产生训练样本
2.随机挑选n个特征 (n 小于总特征数量)
2.预测: 平权投票,多数表决输出预测结果
步骤
1.随机选m条数据
2.随机选取k个数据特征
3.训练决策树
4.重复1-3步构造n个弱决策树
5.平权投票集成n个弱决策树
[知道]随机森林 API
sklearn.ensemble.RandomForestClassifier()
n_estimators:决策树数量,(default = 10)
Criterion:entropy、或者 gini, (default = gini)
max_depth:指定树的最大深度,(default = None 表示树会尽可能的生长)
max_features="auto", 决策树构建时使用的最大特征数量
Adaboost
[知道]adaboost算法简介
Adaptive Boosting(自适应提升)基于Boosting思想实现的一种集成学习算法核心思想是通过逐步提高那些被钱一步分类错误的样本的权重来训练一个强分类器.弱分类器的性能比随机猜测强就行,即可构造出一个非常准确的强分类器.其特点是:训练时,样本具有权重,并且在训练过程中动态调整.被分错的样本的样本会加大权重,算法更加关注难分的样本
AdaBoost算法的两个步骤
权值调整:
AdaBoost算法提高那些被前一轮基分类器错误分类样本的权值,而降低那些被正确分类样本的权值.从而使得那些没有得到正确分类的样本,由于犬之岛饿加大而受到一轮基分类器的更大关注
基分类器组合
AdBoost采用加权多表表决的方法
分类误差率较小的弱分类器的权值大,在表决中起较大的作用
分类误差率较大的弱分类器的权值小,在表决中起较小的作用.
[理解]AdaBoost算法推导
1.初始化训练数据权重相等,训练第1个学习器
--如果有 100个样本,则每个样本的初始化权重为:1/100
--根据预测结果找一个错误率最小的分裂点计算,更新:样本权重.模型权重
2.根据新权重的样本集 训练第2个学习器
--根据预测结果找一个错误率最小的分裂点计算,更新:样本权重,模型权重
3.迭代训练在前一个学习器的基础上,根据新的样本权重训练当前学习器
-直到训练出m个弱学习器
4.m个弱学习器集成预测公式
-a为模型的权重,输出结果大于0则归为郑磊,小于0则归为负类
[理解]AdaBoost构建过程
下面为训练数数据,假设弱分类器x产生.其阈值v使该分类器在训练数据集上的分类误差率最低,试用ADAboost算法学习一个强分类器
构建第一个弱学习器
1.初始化工作: 初始化 10 个样本的权重,每个样本的权重为:0.1
2.构建第一个基学习器:
1.寻找最优分裂点
1.对特征值x进行排序.确定分裂点为:0.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.,5
2.当以0.5为分裂点时,有5个样本分类报错
3.当以1.5为分裂点时,有4个样本分类报错
4.当以2.5为分裂点时,有3个样本分类报错
5.当以3.5为分裂点时,有4个样本分类报错
6.当以4.5为分裂点时,有5个样本分类报错
7.当以5.5为分裂点时,有4个样本分类报错
8.当以6.5为分裂点时,有5个样本分类报错
9.当以7.5为分裂点时,有4个样本分类报错
10.当以8.5为分裂点时,有3个样本分类报错
11最终,选择以2.5作为分裂点.计算得出基学习器错误率为:3/10=0.3
2.计算模型权重:1/2*np.log((1-0.3)/0.3)=0.4236
3.更新样本权重
构建第三个弱学习器
错误率:0.1820,模型权重: 0.7514
强学习器
构建第二个若学习器
1.寻找最优分裂点
2.计算模型权重
3.分类正确的样本:1,2,3,7,8,9,10.其权重调整系数为:0.5222
4.分类错误的样本:4,5,6.其权重调整系数为:1.9148
5.分类正确样本权重值
1.样本 1,2,3,9为:0.0373
2.样本6,7,8为:0.087
6.分类错误样本权重值: 0.1368
7.归一化Zt值为: 0.0373*4+0.087*3+0.1368*3 = 0.8206
8.最终权重:
1.样本1,2,3,9为:0.0455
2.样本6,7,8为:0.1060
3.样本3,4,5为:0.1667
9.此时得到
构建第三个弱学习器
错误率: 0.1820,模型权重: 0.7514
强学习器
GBDT
[理解]提升树(Boosting Tree)
梯度提升树(Gradient Boosting Decision Tre)是提升树(Boosting Decision Tree)的一种改进算法,佐伊在讲梯度提升树之前先来介绍一下提升树
假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了.如果我们的迭代轮数还没有完.可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小.最后每次拟合的岁数加起来便是模型输出的结果
[理解]梯度提升树
梯度提升树不再使用拟合残差,而是利用最速下降的近似方法,利用损失函数的负梯度作为提升树算法中的残差近似值
[理解]GBDT例子
初始化弱学习器(CART树)
我们通过计算当模型预测值为何值时,会使第一个基学习器的平方误差最小,即:求损失函数对f(xi)的导数,并令导数为0
构建第一个弱学习器(CART树)
由于我们拟合的是样本的负梯度,即:
由此得到数据表如下:
上表中平方损失计算过程说明(以切分点1.5为例):
1.切分点1.5将数据集分成两份[5.56],[5.56 5.7 5.91 6.4 6.8 7.05 8.9 8.7 9. 9.05]
2.第一份的平均值为5.56 第二份数据的平均值为
(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)/9 = 7.5011
3.由于是回归数,每份数据的平均值即为预测值,则可以计算误差,第一份数据的误差为0,第二份数据的平方误差为:
5.70-7.5011)^2+(5.91-7.5011)^2+...+(9.05-7.5011)^2 = 15.72308
以6.5作为切分点损失最小,构建决策树如下:
构建第二个弱学习器(CART树)
以3.5作为切分点损失最小,构建决策树如下:
构建第三个弱学习器(CART树)
以6.5作为切分点损失最小,构建决策树如下
最终学习器
GBDT算法流程
1.初始化学习器 (目标值的均值作为预测值)
2.迭代构建学习器,每一个学习器拟合上一个学习器的负梯度
3.直到打到指定的学习器个数
4.当输入未知样本时,将所有弱学习器的输出结果组合起来作为强学习器的输出
XGBoost
XGBoost(Extreme Gradeient Boosting) 全名叫极端梯度提升树,XGBoost是集成学习的王牌,在扛过了数据挖掘比赛中,大部分获胜者用了XGBoost
XGBoost在绝大多数的回归和分类问题上表现的十分顶尖
[知道]XGBoost算法思想
XGBoost 是对GBDT的敢进:
1.求解损失函数极值是使用泰勒二阶展开
2.在损失函数中加入了正则化项
3.XGB 自创一个数节点分裂指标.这个分裂指标就是从损失函数推导出来的.XGB分裂是考虑到了树的复杂度.
构建最优模型的方法是最小化训练数据的损失函数
预测值和真实值经过某个函数计算出损失,并求解所有样本的平均损失,
并且使得损失最小。这种方法训练得到的模型复杂度较高,很容易出现过拟合。因此,为了降低模型的复杂度,在损失函数中添加了正则化项,如下所示::
提高模型对未知数的泛化能力
[理解]XGboost的目标函数
XGBoost{Extreme Gradient Boosting) 是对梯度提升树的改进,并且在损失函数中加入了正则化项
目标函数的第一项表示整个强学习器的损失,第二部分表示强学习器中 k 哥弱学习器的复杂度
xgboost 每一个若学习器的复杂度主要从两个方面来考量:
-
γT 中的 T 表示一棵树的叶子结点数量,γ 是对该项的调节系数
-
λ||w||<sup>2</sup> 中的 w 表示叶子结点输出值组成的向量,λ 是对该项的调节系数
[了解]XGboost API
bst = XGBClassifier(n_estimators, max_depth, learning_rate, objective)