InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

集成学习算法(Ensemble Method)浅析

  • 2018-05-20
  • 本文字数:3763 字

    阅读完需:约 12 分钟

个性化推荐系统是达观数据在金融、电商、媒体、直播等行业的主要产品之一。在达观数据的个性化推荐系统架构中,可以简单地分为 5 层架构,每层处理相应的数据输出给下一层使用,分别是:

  • 数据处理层
    作为推荐系统最低端的数据处理层,主要功能是首先将客户上传上来的一些无用的噪声数据进行清理过滤,将推荐系统所需要用到的数据导入到数据存储层中;

  • 数据存储层
    对于 item 的数据一般存入在 Mysql 中,随着数据量越来越大的 item 的数据,相比 Mysql 的扩展性来说,HBase 和 Hive 是一个更好的选择,Hive 可以方便离线分析时操作。而对于实时模块,以及一些用进程同步相关的模块,实时性要求比较高的,redis 就可以派上用场了,作为缓存,生产者生产数据写入 redis 供消费者读取;

  • 生成候选集
    通过一系列的基础算法如协同过滤,content-base,点击反馈,热门等数据给每个用户生成个性化的候选集;

  • 融合候选集
    将各个算法生成的候选集的 item 按照一系列规则进行融合过滤。

  • 重排序
    将融合过滤后的 item 集合用一定的算法重新排序,将排序后的结果输出到用户,这边主要常用到机器学习相关模型和算法,如 LR 和 GBDT。

本文将着重浅析一下重排序用到的集成学习算法(Ensemble Method)。

集成学习概述

集成学习算法本身不算一种单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。可以说是集百家 之所长,能在机器学习算法中拥有较高的准确率,不足之处就是模型的训练过程可能比较复杂,效率不是很高。目前常见的集成学习算法主要有2 种:基于Bagging 的算法和基于Boosting 的算法,基于Bagging 的代表算法有随机森林,而基于Boosting 的代表算法则有Adaboost、GBDT、XGBOOST 等。

基于Bagging 算法

Bagging 算法 (装袋法) 是 bootstrap aggregating 的缩写,它主要对样本训练集合进行随机化抽样,通过反复的抽样训练新的模型,最终在这些模型的基础上取平均。

基本思想

  1. 给定一个弱学习算法,和一个训练集;
  2. 单个弱学习算法准确率不高;
  3. 将该学习算法使用多次,得出预测函数序列,进行投票;
  4. 最后结果准确率将得到提高。

以随机森林为例来详解

  • 随机森林基本原理随机森林由 LeoBreiman(2001)提出,从原始训练样本集 N 中有放回地重复随机抽取 k 个样本生成新的训练样本集 合,然后根据自助样本集生成 k 个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取的样品,森林中的每棵树 具有相同的分布,分类误差取决于每一棵树的分类能力和它们之间的相关性。特征选择采用随机的方法去分裂每一个 节点,然后比较不同情况下产生的误差。能够检测到的内在估计误差、分类能力和相关性决定选择特征的数目。单棵 树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样品可以通过每一棵树的分类结果经统计后选择最 可能的分类。

  • 随机森林算法过程

    1. 从训练数据中选取 n 个数据作为训练数据输入,一般情况下 n 是远小于整体的训练数据 N 的,这样就会造成有一部 分数据是无法被取到的,这部分数据称为袋外数据,可以使用袋外数据做误差估计。
    2. 选取了输入的训练数据的之后,需要构建决策树,具体方法是每一个分裂结点从整体的特征集 M 中选取 m 个特征构 建,一般情况下 m 远小于 M。
    3. 在构造每棵决策树的过程中,按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建。决策树的其他结点 都采取相同的分裂规则进行构建,直到该节点的所有训练样例都属于同一类或者达到树的最大深度。
    4. 重复第 2 步和第 3 步多次,每一次输入数据对应一颗决策树,这样就得到了随机森林,可以用来对预测数据进行决策。
    5. 输入的训练数据选择好了,多棵决策树也构建好了,对待预测数据进行预测,比如说输入一个待预测数据,然后多 棵决策树同时进行决策,最后采用多数投票的方式进行类别的决策。

  • 随机森林注意点

    1. 在构建决策树的过程中是不需要剪枝的。
    2. 整个森林的树的数量和每棵树的特征需要人为进行设定。
    3. 构建决策树的时候分裂节点的选择是依据最小基尼系数的。

基于 Boosting 算法

提升算法 (Boosting) 是常用的有效的统计学习算法,属于迭代算法,它通过不断地使用一个弱学习器弥补前一个弱学习器的“不足”的过程,来串行地构造一个较强的学习器,这个强学习器能够使目标函数值足够小。

基本思想

  1. 先赋予每个训练样本相同的概率;
  2. 然后进行 T 次迭代,每次迭代后,对分类错误的样本加大权重 (重采样),使得在下一次的迭代中更加关注这些样本。


Boosting 系列算法里最著名算法主要有 AdaBoost 算法和提升树 (boosting tree) 系列算法。提升树系列算法里面应用最广泛的是梯度提升树 (Gradient Boosting Tree)。

以 AdaBoost 算法作为代表算法来详解

  • 基本原理Adaboost(adaptive boosting: boosting + 单层决策树) 是 boosting 中较为代表的算法,基本思想是通过训练数据的分布构造一个分类器,然后通过误差率求出这个若弱分类器的权重,通过更新训练数据的分布,迭代进行,直到达到 迭代次数或者损失函数小于某一阈值。

假设训练数据集为\(T=\{(X_1,Y_1),(X_2,Y_2),(X_3,Y_3),(X_4,Y_4),(X_5,Y_5)\}\)

其中有\(Y_i=\{-1,1\}\)

  • 算法过程1. 初始化训练数据的分布;

    训练数据的权重平均分布为 \(D = \{W_{11},W_{12},W_{13},W_{14},W_{15}\}\) 其中 \(W_{1i} = {1 \over N}\)

    2. 选择基本分类器;

    这里选择最简单的线性分类器\(y=aX+b\) 分类器选定之后,最小化分类误差可以求得参数。

    3. 计算分类器的系数和更新数据权重;

    误差率也可以求出来为\(e_1\) . 同时可以求出这个分类器的系数。基本的 Adaboost 给出的系数计算公式为\(\alpha_m = \frac{1}{2}\log \frac{1-e_m}{e_m}\) 然后更新训练权重分布为\(D_{m+1}=\{w_{m+1,1},\dots,w_{m+1,i},\dots,w_{m+1,N}\}\)

    其中

    \(w_{m+1,i}=\frac{w_{m,i}}{Z_m}exp(-\alpha _my_iG_m(x_i))\)

    规范因子为

    \(Z_m=\sum_{i=1}^{N}w_{m,i} exp(-\alpha _my_iG_m(x_i))\)

1. 得出分类器的组合\(f(x)=\sum_{m=1}^{M}\alpha _mG_m(x)\)

  • 说明

数学上可以证明,AdaBoost 方法不断拟合一个强学习器 \(F(x)=F(x)+\alpha h(x)\)

的过程其实是利用某种优化方法(如自适应牛顿法)使目标函数\(J(F)=E(e^{-yF(x)})\) 最小的过程。

Bagging 和 Boosting 算法异同

Bagging 算法与 Boosting 算法的核心都是将一系列弱学习器的算法按照特定的结合策略组合成强学习器的过程。两者之 间的区别在于以下几点上:

1. 样本选择:

  • Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的.
  • Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化. 而权值是根据上一轮的分类结果 进行调整。

2. 样例权重:

  • Bagging:使用均匀取样,每个样例的权重相等。
  • Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大.

3. 预测函数:

4. 并行计算:

集成学习之结合策略

以上部分我们主要关注与学习器本身,对于学习器之间的结合策略并未涉及到,这一小节主要介绍常见的结合策略,主要有平均法,投票法,学习法。

  • 平均法

对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干和弱学习器的输出进行平均得到最 终的预测输出。最简单的平均是算术平均,也就是说最终预测为

\(mathH(x)=\frac{1}{T}\sum_{1}^{T}h_i(x)\)!
如果每个学习器有一个权重 w,则最终预测为\(H(x)=\frac{1}{T}\sum_{1}^{T}w_ih_i(x)\)

其中\(w_i\) 是个体学习器\(h_i\) 的权重,有\(w_i\geq 0,\sum_{i=1}^{T}w_i=1\)

  • 投票法

假设我们的预测类别是\(\{c_1,c_2,\dots,c_K\}\) , 对于任意一个预测样本 x,我们的 T 个弱学习器的预测结果分别是\((h_1(x),h_2(x),\dots,h_T(x))\)

最简单的投票法是相对多数投票法,也就是我们常说的少数服从多数,也就是 T 个弱学习器的对样本 \(x\) 的预测结果中, 数量最多的类别 \(c_i\) 为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。

稍微复杂点的投票有绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。

更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

  • 学习法

上两节的方法都是对弱学习器的结果做平均或者投票,相对比较简单,但是可能学习误差较大,于是就有了学习法这种方 法,对于学习法,代表方法是 stacking,当使用 stacking 的结合策略时,我们不是对弱学习器的结果做简单的逻辑处理, 而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。

在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。

总结

Bagging 和 Boosting 都是把若干个分类器整合为一个分类器的集成学习方法,只是整合的方式不一样,最终得到不一样 的效果。下面是将决策树与这些算法框架进行结合所得到的新的算法:

  1. Bagging + 决策树 = 随机森林
  2. AdaBoost + 决策树 = 提升树
  3. Gradient Boosting + 决策树 = GBDT

其中 GBDT 在达观数据个性化推荐重排序层得到很好地应用。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2018-05-20 18:002403

评论

发布
暂无评论
发现更多内容

Vue的动态组件 & 异步组件

编程江湖

Vue

前端质量提升利器-马可代码覆盖率平台

vivo互联网技术

前端 代码 平台架构

魔电熊户外电源体验|让户外露营实现用电自由!

科技热闻

SAP HANA Delivery Unit概念简述

Jerry Wang

数据库 内存数据库 1月月更

netty系列之:JVM中的Reference count原来netty中也有

程序那些事

Java Netty 程序那些事 1月月更

中年人对酒的看法

wood

300天创作

浅谈数据中台和DataFabric的差异

Kafka中文社区

Linux之chown命令

入门小站

Linux

ReactNative进阶(十):WebView 应用详解

No Silver Bullet

webview React Native 1月月更

前后端分离 -- 深入浅出Spring Boot + Vue实现员工管理系统 Vue如此简单~

Bug终结者

Vue 前后端分离 Java 分布式 elementUI

java集合【13】——— Stack源码分析走一波

秦怀杂货店

Java 源码分析 集合

Java&Go高性能队列之LinkedBlockingQueue性能测试

FunTester

Disruptor 性能测试 消息队列 FunTester 高性能消息队列

云单元架构,如何赋能数字化转型呢?

博文视点Broadview

Apache Flink 不止于计算,数仓架构或兴起新一轮变革

Apache Flink

大数据 flink 编程 实时计算 流式数仓

在线CSS代码压缩美化工具

入门小站

工具

查询 MySQL 字段注释的 5 种方法!

王磊

kafka的优缺点都有那些

编程江湖

kafka

美团李凯揭秘数据库发展三大趋势 | TiDB Hackathon 评委访谈

PingCAP

【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理

洛神灬殇

springmvc Spring Framework Spring MVC 1月月更

性能场景之压测策略设计

zuozewei

性能测试 性能分析 1月月更

AI开发平台系列2:集成式机器学习平台对比分析

Baihai IDP

AI

谁说count(*) 性能最差,我需要跟你聊聊

华为云开发者联盟

函数 count 字符 数据表

请说出4种不使用第三方变量交换两个变量值的方法

阿Q说代码

位运算 1月月更 交换变量

表设计之数据类型优化

Ayue、

数据库 1月月更

深入理解static关键字

编程江湖

static关键字

快来一起玩转LiteOS组件:RHas

华为云开发者联盟

C语言 LiteOS 组件 RHas 哈希函数库

1 月月更|盘点 2021|推荐学Java——数据表操作

逆锋起笔

Java MySQL 数据库表 多表查询 关联查询

Hive UDF,就这

华为云开发者联盟

sql 函数 UDF Hive UDF 用户自定义函数

java开发框架Redis之sentinel和集群

@零度

redis JAVA开发

阿里副总裁浅雪对话VMware全球副总裁原欣:阿里云携手VMware,助力企业数字化转型

大咖说

云计算 阿里云 数字化转型 阿里巴巴‘

教你如何在Spark Scala/Java应用中调用Python脚本

华为云开发者联盟

Python spark 脚本 Spark Scala Spark java

  • 扫码添加小助手
    领取最新资料包
集成学习算法(Ensemble Method)浅析_语言 & 开发_陈祥龙_InfoQ精选文章