集成学习
概念
仅是机器学习中一种思想,通过多种模型(算法)组合形成一个精度更高模型,参与组合模型称为弱学习器。使用集成学习可提升2%的准确性
分类
bagging
思想
有放回的抽样(booststrap)产生不同的训练集,从而训练不同学习器
通过平权投票、多数表决方式决定预测结果
弱学习器可以并行训练
作用
防止过拟合- 代表算法:随机森林
boosting
随着学习积累从弱到强
每新加入一个弱学习器,整体能力就会得到提升
代表算法:Adaboost、GBDT、XGBoost、Light GBM
思想:
每一个训练器重点关注前一个训练器不足地方进行训练
通过加权投票方式,得出预测结果
串行训练方式
作用
防止欠拟合
bagging 与boosting对比
bagging boosting 数据采样 对数据进行有放回采样训练 全部样本,根据前一轮学习结果调整数据的重要性 投票方式 所有学习器平权投票 对学习器进行加权投票 学习顺序 并行,每个学习器无依赖关系 串行,学习有先后顺序
随机森林算法
基于Bagging思想实现的一种集成学习算法,采用决策树模型作为每一个弱学习器
训练:
有放回的产生训练样本
随机挑选n个特征(n小于总长度)
构建方法
1.随机选m条数据
2.随机选取k个数据特征
3.训练决策树
4.重复1-3步构造n个弱决策树
5.平权投票集成n个弱决策树
API
sklearn.ensemble.RandomForestClassifier()
n_estimators:决策树数量,(default=10)
Criterion:entropy、或者gini(defalut=10)
max_depth:指定树的最大深度,(defalut=None,表示树会尽可能生长)
max_features="auto",决策树构建时使用最大特征数量
if"auto",then max_features=sqrt(n_features)
if"sqrt",then max_features=sqrt(n_features)(same as "auto")
if"log2",then max_features=log2(n_features)
if None,then max_features=n_features
bootstrap:是否采用有放回抽样,如何为False将会使用全部训练样本,(default=True)
min_samples_split:节点分裂所需最小样本数,(default=2)
若节点样本数少于min_samples_split,则不会再进行划分
若样本量不大,不需要设置这个值
若样本数量级非常大,则推荐增大这个值
min_samples_leaf:叶子节点最小样本数(default=1)
如果某叶子节点数小于样本数,则会和兄弟节点一起被剪枝
较小的叶子结点样本数量使模型更容易捕捉训练数据中噪声
min_impurity_split:节点划分最小不纯度
如果某节点不纯度(基尼系数,均方差)小于这个阈值,则该节点不在生成子节点,并变为叶子节点
一般不推荐改动默认值1e-7
Adaboost算法
概念
基于Boosting思想,通过逐步提高那些被前一步分类错误样本权重来训练一个强分类器
解决二分类任务
计算方法

Adboost算法推导流程
初始化训练数据权重相等,训练第一个学习器
如果有50个样本,则每个样本初始化权重为:1/50
根据预测结果找一个错误率最小分裂点,计算、更新:样本权重,模型权重
根据新权重样本集,训练第2个学习器
根据预测结果找一个错误率最小分裂点计算、更新:样本权重、模型权重
迭代训练再前一个学习器基础上,根据新的样本权重训练当前学习器,直到训练出m个弱学习器
m个弱学习器继承预测公式

模型权重计算公式

样本权重计算公式

Adaboost构建过程
1.初始化数据权重,训练第一个弱学习器,找最小错误率计算模型权重,再更新模型数据权重
2.根据更新数据集权重,来训练第2个弱学习器,再找最小的错误率计算模型权重,再更新模数据权重
依次重复第2步骤,训练至n个弱学习器,最后组合起来进行预测。结果大于0为正类,反之为负类。
GBDT
提升树(Boosting Decision Tree)
通过拟合残差思想来进行提升
残差:真实值-预测值
获取多个弱学习器

梯度提升树构建流程
初始化若学习器(目标值均值作为预测值)
迭代构建学习器,每一个学习器拟合上一个学习器负梯度
直到达到指定学习器个数
当输入未知样本时,将所有弱学习器输出结果组合起来作为强学习器输出
GBDT特性
它使用的弱学习器是决策树
采用Boosting思想
去拟合每次弱学习器后负梯度信息
可解决回归问题
XGBoost
概述
极端梯度提升树,集成学习方法中王牌,在数据挖掘比赛中,大部分获胜者用了XGBoost
基于什么改进?
XGBoost基于GBDT改进
在其基础上增加:正则化项(叶子节点个数+叶子节点输出向量),缓解过拟合
在损失函数求解过程
二阶泰勒展开
样本角度转换到叶子节点
导数为0,求解最优解,获取损失表达形式
衡量弱学习器生成,以及在生成过程中节点是否进行划分
构建思想
构建模型方法是最小化训练数据损失函数

训练模型复杂度较高,易过拟合
在损失函数中加入正则化项

提高对未知测试数据泛化性能
是对GBDT改进,并且在损失函数中加入了正则化项

正则化项用来降低模型复杂度

目标函数

泰勒公式

XGB安装和使用,在sklean机器学习库中没有集成xgb。想要使用手工安装
pip3 install xgboost
可以在xgb官网熵查看最小版本:XGBoost Documentation — xgboost 2.1.0-dev documentation
XG boost编码风格
支持非sklearn方式,即自己风格
支持sklearn方式,调用方式保持sklearn形式
API
XGBClassifier(n_estimators,max_depth,learning_rate,objective)
导包
import xgboost as xgb
实例化
自定义变量名=xgb.XGBClassfier(n_estimators=100,objective="multi:softmax",random_state=40)
n_estimators:表示迭代次数
objective ="multi:softma":表示多分类问题
max_depth:表示树的深度
random_state:随机数种子