机器学习之集成学习

集成学习

  • 概念

            仅是机器学习中一种思想,通过多种模型(算法)组合形成一个精度更高模型,参与组合模型称为弱学习器。使用集成学习可提升2%的准确性

  • 分类

    • bagging

      • 思想

      • 有放回的抽样(booststrap)产生不同的训练集,从而训练不同学习器

      • 通过平权投票、多数表决方式决定预测结果

      • 弱学习器可以并行训练

      • 作用

              防止过拟合
      • 代表算法:随机森林
    • boosting

      • 随着学习积累从弱到强

      • 每新加入一个弱学习器,整体能力就会得到提升

      • 代表算法:Adaboost、GBDT、XGBoost、Light GBM

      • 思想:

        • 每一个训练器重点关注前一个训练器不足地方进行训练

        • 通过加权投票方式,得出预测结果

        • 串行训练方式

      • 作用

        防止欠拟合
  • bagging 与boosting对比

    baggingboosting
    数据采样对数据进行有放回采样训练全部样本,根据前一轮学习结果调整数据的重要性
    投票方式所有学习器平权投票对学习器进行加权投票
    学习顺序并行,每个学习器无依赖关系串行,学习有先后顺序
随机森林算法

基于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。想要使用手工安装

  • 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:随机数种子

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值