原文:http://blog.csdn.net/mao_xiao_feng/article/details/52728164

对于随机森林的通俗理解

一、决策树

决策树是机器学习最基本的模型,在不考虑其他复杂情况下,我们可以用一句话来描述决策树:如果得分大于等于60分,那么你及格了。

这是一个最最简单的决策树的模型,我们把及格和没及格分别附上标签,及格(1),没及格(0),那么得到的决策树是这样的

但是我们几乎不会让计算机做这么简单的工作,我们把情况变得复杂一点

引用别的文章的一个例子

这是一张女孩对于不同条件的男性是否会选择见面的统计表,图中是否见面作为我们需要分类的结果,因此最后我们的结果无非就只是是和否两种情况。这是一个二分类的问题,但是需要判断的条件多了很多,现在不仅仅只是一个判断就能得出结果了,但是从上图我们找到了一个结果为否的记录,因此如果一个男性在城市无房产、年收入小于 17w 且离过婚,则可以预测女孩不会跟他见面。

那么问题就来了,在这种复杂的情况下,决策树怎么构建?

先通过城市是否拥有房产这条特征,把这10个人划分为2类

这个分类结果并不是很好,因为它没有将见面与不见面完全的分开,在算法中,当然不能凭我们的“感觉”去评价分类结果的好坏。我们需要用一个数去表示。

二、Gini不纯度

Gini不纯度是对分类结果好坏的度量标准(还可以用信息熵和增益去表示,可自行了解)

他的值是:1-每个标签占总数的比例的平方和。即1–∑mi=1fi2

对于上述的结果来讲,总的集合D被分为两个集合D1,D2,假设见面为1,不见面为0。

那么D1的不纯度为1-f1^2-f0^2,总数为5,见面的占了全部,则f1=1,f0=0,结果为0

D2的不纯度为1-f1^2-f0^2,f1=0.8,f0=0.2,结果为0.32

ok,那么整个分类结果的Gini不纯度就是D1/D与0的乘积 加上 D2/D与0.32的乘积,为0.16

Gini值代表了某一个分类结果的“纯度”,我们希望结果的纯度很高,这样就不需要对这一结果进行处理了。

从以上分析可以看出,Gini值越小,纯度越高,结果越好。

三、决策树的生成

在第一个例子中“如果得分大于等于60分,那么你及格了”中,生成决策树步骤是首先选择特征,“得分”,然后确定临界值,“>=60”

1.复杂的情况下也是一样,对于每一个特征,找到一个使得Gini值最小的分割点(这个分割点可以是>,<,>=这样的判断,也可以是=,!=),然后比较每个特征之间最小的Gini值,作为当前最优的特征的最优分割点(这实际上涉及到了两个步骤,选择最优特征以及选择最优分割点)。

2.在第一步完成后,会生成两个叶节点,我们对这两个叶节点做判断,计算它的Gini值是否足够小(若是,就将其作为叶子不再分类)

3.将上步得到的叶节点作为新的集合,进行步骤1的分类,延伸出两个新的叶子节点(当然此时该节点变成了父节点)

4.循环迭代至不再有Gini值不符合标准的叶节点

四、决策树的缺陷

我们用决策树把一个平面上的众多点分为两类,每一个点都有(x1,x2)两个特征,下面展示分类的过程

最后生成的决策树,取了四个分割点,在图上的显示如下,只要是落在中央矩形区域内默认是绿色,否则为红色

不过这种情况是分类参数选择比较合理的情况(它不介意某些绿色的点落在外围),但是当我们在训练的时候需要将所有的绿点无差错的分出来(即参数选择不是很合理的情况),决策树会产生过拟合的现象,导致泛化能力变弱。

五、随机森林

鉴于决策树容易过拟合的缺点,随机森林采用多个决策树的投票机制来改善决策树,我们假设随机森林使用了m棵决策树,那么就需要产生m个一定数量的样本集来训练每一棵树,如果用全样本去训练m棵决策树显然是不可取的,全样本训练忽视了局部样本的规律,对于模型的泛化能力是有害的

产生n个样本的方法采用Bootstraping法,这是一种有放回的抽样方法,产生n个样本

而最终结果采用Bagging的策略来获得,即多数投票机制

随机森林的生成方法:

1.从样本集中通过重采样的方式产生n个样本

2.假设样本特征数目为a,对n个样本选择a中的k个特征,用建立决策树的方式获得最佳分割点

3.重复m次,产生m棵决策树

4.多数投票机制来进行预测

(需要注意的一点是,这里m是指循环的次数,n是指样本的数目,n个样本构成训练的样本集,而m次循环中又会产生m个这样的样本集)

六、随机森林模型的总结

随机森林是一个比较优秀的模型,在我的项目的使用效果上来看,它对于多维特征的数据集分类有很高的效率,还可以做特征重要性的选择。运行效率和准确率较高,实现起来也比较简单。但是在数据噪音比较大的情况下会过拟合,过拟合的缺点对于随机森林来说还是较为致命的。

参考文献:

相亲的例子引用自:

http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-random-forest/

平面点分类的例子引用自:

http://wenku.baidu.com/link?url=pCUMFxVy8SFNDGLA0cQAgBg6Xmg1blEsjIWphUyqhn1PD8rxTTVBJT3jjjI8ers5LFrv4NhUa5uqNf9BhmVBhocYcSCUTmZGVWIDQI-tzKO

Gini不纯度:

http://blog.csdn.net/shisibushiba/article/details/50803092

随机森林的优缺点分析:

http://blog.csdn.net/keepreder/article/details/47273297

随机森林做特征选择:

http://blog.csdn.net/keepreder/article/details/47277517

对于随机森林的通俗理解相关推荐

  1. 集成学习—随机森林原理(理解与论文研读)

    如果只想大致理解下随机森林的原理请看第一部分,第二部分是对原论文的研读(灰色引用标记的为证明或自己的理解),这部分可能需要花的时间比较长,不需要的可以忽略. 此外,文末列出来的参考视频,如果读论文还是 ...

  2. 决策树、装袋、提升和随机森林的对比理解

    决策树 决策树是一种简单.常用的基础模型.之所以说它简单,不仅因为它的思想原理简单具体.贴近实际,它并不需要像线性回归模型一样用一个数学公式来表征,而是由规则来抽象.说它基础,是因为它是一系列复杂强大 ...

  3. 关于随机森林的一些理解

    目录 随机森林简介 优缺点 优点 缺点 sklearn中随机森林参数 简单实现 小节 随机森林简介 随机森林是一种只关注决策树的集成学习方法,由Leo Breiman和 Adele Cutler提出, ...

  4. 关于随机森林改进的理解

    随机森林作为一种集成学习方法,它是由一系列基学习器构成的,构成及学习器的方法就是通过随机化采样的方法,来构成不同泛化边界的基学习器,然后在通过简单的投票法来结合出最后的集成模型. 这种简单的模型,在U ...

  5. R语言第十一讲 决策树与随机森林

    概念 决策树主要有树的回归和分类方法,这些方法主要根据分层和分割 的方式将预测变量空间划分为一系列简单区域.对某个给定待预测的观 测值,用它所属区域中训练集的平均值或众数对其进行预测.         ...

  6. 比较全面的随机森林算法总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 上节介绍了集成学习方法包括bagging法和boosting ...

  7. 机器学习——动手从决策树实现随机森林

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第26篇文章,我们一起聊聊另外一个集成学习模型,它就是大名鼎鼎的随机森林. 随机森林在业内名气和使用范围都很广,曾经在许 ...

  8. 浅谈对机器学习方法(决策树,SVM,knn最近邻,随机森林,朴素贝叶斯、逻辑回归)的理解以及用sklearn工具实现文本分类和回归方法...

    一.决策树 定下一个最初的质点,从该点出发.分叉.(由于最初质点有可能落在边界值上,此时有可能会出现过拟合的问题. 二.SVM  svm是除深度学习在深度学习出现之前最好的分类算法了.它的特征如下: ...

  9. [白话解析] 通俗解析集成学习之bagging,boosting 随机森林

    [白话解析] 通俗解析集成学习之bagging,boosting & 随机森林 0x00 摘要 本文将尽量使用通俗易懂的方式,尽可能不涉及数学公式,而是从整体的思路上来看,运用感性直觉的思考来 ...

最新文章

  1. 改变Fragment的默认动画
  2. 实现文件拖放的一种简洁方法
  3. Bootstrap3 输入提示插件typeahead
  4. indesign使用教程,如何编辑段落样式?
  5. JVM的4种垃圾回收算法、垃圾回收机制与总结
  6. android studio 2.3.3 最新 中文 汉化包 韩梦飞沙 安卓工作室 美化包
  7. FW与手机APP交互的问题
  8. python股票回测_从啥都不会试着用python做均线回测--1
  9. 【学术论文写作】02 Tone and Diction
  10. java strlen_字符串长度函数strlen和mb_strlen的区别示例介绍
  11. android 闪屏动态界面,Android实现闪屏欢迎界面
  12. html卡牌游戏代码,查看“宝可梦卡牌游戏DPt系列”的源代码
  13. 2013南大专业课试题答案
  14. 浏览器网页缩放对页面的影响
  15. OSPF基本配置及手动修改路由器优先级
  16. 毕业答辩的PPT攻略
  17. hihocoder1238(dfs)
  18. 各搜索引擎爬虫UA大全2020最新版
  19. 中文版Eclipse变英文版
  20. html5的台账app,台账管理系统

热门文章

  1. Ubuntu下安装中文输入法(本文安装的搜狗输入法)
  2. 计算机科学环境保护,CMU-如何利用计算机科学、机器学习和人工智能保护环境.pdf...
  3. python监控错误语句,基于Python的关键字监控及告警
  4. php播放ppt代码,PHP+JavaScript幻灯片代码
  5. spring_Spring MVC控制器的单元测试:REST API
  6. python爬去百度文库_利用Python语言轻松爬取数据[精品文档]
  7. java win8 mac地址_Windows8系统下MAC地址修改方法图文教程
  8. linux mount 内核镜像,在Linux live system中创建loop设备并挂载镜像文件
  9. python 调用 tensorflow,C++与python 相互调用-- c++调用tensorflow教程
  10. 如何用 Markdown 来画图?