AdaBoost与随机森林区别

2024-05-30 03:38
文章标签 区别 随机 森林 adaboost

本文主要是介绍AdaBoost与随机森林区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AdaBoost

首先明确一个大方向:强可学习和弱可学习是等价的。所以,弱可学习方法可以提升为强可学习方法。AdaBoost最具代表性。

对于提升方法,有两个问题需要回答:

  • 每一轮如何改变训练数据的权值或概率分布?
  • 如何将弱分类器组合成一个强分类器?

AdaBoost的做法:

  • 提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。
  • 加权多数表决的方法,加大分类误差率小的弱分类器的权值,使其在表决中起较大作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用,这就是AdaBoost的一个特点。总的来说,AdaBoost算法的步骤为:更新训练数据权值->在此权值上训练弱分类器(策略为最小化分类误差率)->计算分类误差率(误分类样本的权值之和)->计算分类器系数(要用到上一步的分类误差率)->更新训练权值->构建基本分类器的线性组合,一直循环,直到基本分类器的线性组合没有误分类点。

缺点:可理解性差。

推广:提升树

提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。 
提升树利用加法模型与前向分布算法实现学习的优化过程。当损失函数是平方损失和指数损失函数时,每一步的优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,有人提出了梯度提升算法。这是利用最速下降法的近似方法,其关键是利用损失函数的负梯度在当前模型的值作为回归问题提升算法中的残差的近似值,拟合一个回归树。梯度提升决策树简称GBDT。

随机森林

我先自己瞎说一次。 
森林,顾名思义,好多棵树。这里的树是决策树。那么,树多了能够干啥呢?表决啊。每一颗树都对测试样本进行决策,最后算法的结果是所有树的结果的众数。 
那么,“随机”是干啥的?随机森林的随机有两层意思。

  • 训练样本选取随机。虽然每一棵树的训练样本个数都是样本总数N,但是每一个样本的随机选取都是有放回的选取。这样,每一颗树的训练样本几乎都不相同。
  • 特征选取随机。假设训练数据有M个特征,随机森林的每一颗树只选取m(m< M)个特征用于构建决策树。每一颗树选取的特征可能都不完全相同。

强调:随机森林不进行剪枝。决策树剪枝是因为防止过拟合,而随机森林的“随机”已经防止了过拟合,因此不需要剪枝。可以这样比喻随机森林算法:每一棵决策树就是一个精通于某一个窄领域 的专家(因为我们从M个feature中选择m让每一棵决策树进行学习),这样在随机森林中就有了很多个精通不同领域的专家,对一个新的问题(新的输入数 据),可以用不同的角度去看待它,最终由各个专家,投票得到结果。

补充:随机森林有2个参数需要人为控制,一个是森林中树的数量,一般建议取很大。另一个是m的大小,推荐m的值为M的均方根。

最后说一下随机森林的优缺点:

  • 不用做特征选择
  • 在训练完后,它能够给出哪些feature比较重要

总结

模型组合(比如说有Boosting,Bagging等)与决策树相关的算法比较多,这些算法最终的结果是生成N(可能会有几百棵以上)棵树,这样可以大大的减少单决策树带来的毛病,有点类似于三个臭皮匠等于一个诸葛亮的做法,虽然这几百棵决策树中的每一棵都很简单(相对于C4.5这种单决策树来说),但是他们组合起来确是很强大。

在最近几年的paper上,如iccv这种重量级的会议,iccv 09年的里面有不少的文章都是与Boosting与随机森林相关的。模型组合+决策树相关的算法有两种比较基本的形式:随机森林与GBDT((Gradient Boost Decision Tree),其他的比较新的模型组合+决策树的算法都是来自这两种算法的延伸。


转载来源:http://blog.csdn.net/xmu_jupiter/article/details/46863771

这篇关于AdaBoost与随机森林区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1015478

相关文章

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程