集成学习
-
概念
仅是机器学习中一种思想,通过多种模型(算法)组合形成一个精度更高模型,参与组合模型称为弱学习器。使用集成学习可提升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:随机数种子
-
-