关于随机森林进行多分类的一个思考

机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别输出的类别的众树而定,它有着许多的有点,能很好地处理多分类问题。

基本算法

简要描述

随机森林,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵之间是没有关联的,在得到森林之后,当有一个新的输入样本进入的时候,让森林中的每一棵决策树分别进行判断,对其进行分类,最后预测为被选择的最多的那一类。
建立决策树的过程中,需要注意两点:采样与完全分裂。首先是两个随机采样的过程,random forest对输入的数据进行行列的采样;这里的采样,可能存在重复的样本。假设有N个样本,那么采样的样本也为N个,在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现over-fitting。然后进行列采样,从M个feature中选择m(m

需要注意的是:每一棵决策树相对是较弱的,但是将多棵决策树结合起来就十分强大。可以这样比喻随机森林算法:每一棵决策树就是一个精通某一个窄领域的专家(从M个feature中选择m个让每一棵决策树进行学习),这样在随机森林中就有很多个精通不同领域的专家,对一个新的输入数据,可以从不同的角度去分析,最终由各方面的专家进行投票,得到最终结果。

RF、XGB、GBDT、LigthGBM 对缺失值的敏感性;

RF:不敏感,它包含一个好方法可以估计遗失的资料,并且,如果有很大一部分的资料遗失,仍可以维持准确度

XGB:不敏感,算法中对缺失值进行了处理,对缺失特征值分裂时,左右节点都分裂,最终看哪个损失更小就分到哪边,所以对缺失值不敏感

GBDT:对缺失值没有对应处理,敏感

ligthGBM: 不敏感,和Xgboost是一样的。每次分割的时候,分别把缺失值放在左右两边各计算一次,然后比较两种情况的增益,择优录取

随机森林做多分类:

关于XGBOOST多分类 : 回归或者二分类,每次迭代训练一棵树。多分类,基于one vs all的方式训练多棵。

多分类问题会对每个类别生成一棵树,而分类或者回归,每次迭代生成一棵树,最后使用加法模型加权求和得到最终的结果。预测时一样,用加法模型计算最终的结果。

相同点:

  • 都是由多棵树组成,最终的结果都是由多棵树一起决定。

不同点:

  • 集成学习:RF属于bagging思想,而GBDT是boosting思想
  • 偏差-方差权衡:RF不断的降低模型的方差,而GBDT不断的降低模型的偏差
  • 训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的,而GBDT每次使用全部样本
  • 并行性:RF的树可以并行生成,而GBDT只能顺序生成(需要等上一棵树完全生成)
  • 最终结果:RF最终是多棵树进行多数表决(回归问题是取平均),而GBDT是加权融合
  • 数据敏感性:RF对异常值不敏感,而GBDT对异常值比较敏感
  • 泛化能力:RF不易过拟合,而GBDT容易过拟合

参考:https://wustchuichui.github.io/2016/04/06/Random-forest/

Original: https://www.cnblogs.com/Allen-rg/p/13999119.html
Author: 静悟生慧
Title: 关于随机森林进行多分类的一个思考

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/551174/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Verilog的基本语法

    1.标识符 标识符:模块名、变量名、常量名 Verilog是大小写敏感的(a和A是不同的)标识符:任意一组字母、数字、$、_的组合标识符的第一个字母必须是字母或下划线书写标识符时应…

    技术杂谈 2023年6月1日
    075
  • io.undertow.websockets.jsr.ServerWebSocketContainer cannot be cast to org.apache.tomcat.websocket.server.WsServerContainer

    Caused by: java.lang.ClassCastException: io.undertow.websockets.jsr.ServerWebSocketContain…

    技术杂谈 2023年5月30日
    075
  • 编程过程中常用的英文单词

    引用 parameter和argument的区别 parameter和argument的区别 parameter是指函数定义中参数,而argument指的是函数调用时的实际参数。 …

    技术杂谈 2023年6月21日
    079
  • InnoDB一棵B+树可以存放多少行数据?

    InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万。为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说…

    技术杂谈 2023年5月31日
    099
  • pycharm可以运行但无法debug的解决方法

    错误信息:pydev debugger: process 4588 is connecting 如果您尝试了网上的很多方法如防火墙设置,去掉 “.idea”…

    技术杂谈 2023年6月21日
    090
  • 学习vbs

    个人总结: 官方文档: 简单总结: Original: https://www.cnblogs.com/cjin-01/p/16813164.htmlAuthor: 2337Tit…

    技术杂谈 2023年7月23日
    081
  • Linux—OpenSSH服务

    Linux—OpenSSH服务 OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议可以用来进行远程控制或在计算机之间传送文件。而实现此功能的传…

    技术杂谈 2023年6月21日
    083
  • 【无敌Python 】增强视频画质,就应该这么做

    原理 不知道大家小时候有没有玩过这个? 最早的动画就是这么形成的,记得小时候还有这种小书卖。 其实视频的原理也是这样,一个视频是由很多张图片组成的,一个图片是一帧。所以我们要对视频…

    技术杂谈 2023年6月21日
    076
  • Java——关于HashMap的面试问题

    1、HashMap的底层实现 答:JDK1.7及其之前的版本是数组+链表,JDK1.8是数组+链表/红黑树 2、HashMap的数组的元素类型 答:java.util.Map$En…

    技术杂谈 2023年7月24日
    076
  • LeetCode35.搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 …

    技术杂谈 2023年7月24日
    065
  • MySQL-连接数据库

    连接数据库在操作数据库之前,需要连接它,输入命令:mysql -u用户名 -p密码。 在你自己本机上连接数据库用上述方式是可以的,不过在平台上连接数据库还需要加上一句-h127.0…

    技术杂谈 2023年7月11日
    062
  • java本地缓存

    由于服务器、数据库、网络等资源有限,无法支撑越来越多的请求与计算量,所以将一部分数据放在缓存中,以此减小薄弱环节的计算量和请求流程。 网站中缓存的应用场景:1:可以缓存整个页面的h…

    技术杂谈 2023年7月11日
    053
  • JavaDoc

    ; ; JavaDoc javadoc命令是用来生成自己API文档的。 参数信息: * @author 作者名 @version 版本号 @sinse 指明需要最早使用的JDK版本…

    技术杂谈 2023年6月21日
    098
  • 一文总结高并发大数据量下MySQL开发规范【军规】

    在互联网公司中,MySQL是使用最多的数据库,那么在并发量大、数据量大的互联网业务中,如果高效的使用MySQL才能保证服务的稳定呢?根据本人多年运维管理经验的总结,梳理了一些核心的…

    技术杂谈 2023年7月25日
    090
  • Vue基础知识汇总

    2020年初的时候突击将Vue学习了一下,因为有不错的HTML、CSS、JS 基础,以及微信小程序的编程知识,Vue学起来是真的快·,三下五除二,将Vue官网的教程文章搞完了,并完…

    技术杂谈 2023年7月11日
    074
  • 前端学命令行

    写在前面 命令行已经成为前端程序员必备的一项基础技能。如今的前端开发严重依赖命令行,通过 node 部署前端开发环境,通过 git 实现版本管理,命令行还可以更有效地控制操作系统(…

    技术杂谈 2023年5月31日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球