对于随机森林的通俗理解

15人阅读 评论(0) 收藏 举报
分类:


对于随机森林的通俗理解

一、决策树

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

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


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

引用别的文章的一个例子


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

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


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


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


二、Gini不纯度

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

他的值是:1-每个标签占总数的比例的平方和。即1mi=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、https://blog.csdn.net/mao_xiao_feng/article/details/52728164 2018.4.17
2、https://zhuanlan.zhihu.com/p/29408863 2018.4.17
3、https://blog.csdn.net/y0367/article/details/51501780 2018.4.17
4、https://www.cnblogs.com/justcxtoworld/p/3447231.html 2018.4.17
5、https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-random-forest/ 2018.4.17
6、https://blog.csdn.net/keepreder/article/details/47277517 2018.4.17
7、https://blog.csdn.net/shisibushiba/article/details/50803092 2018.4.17
8、https://blog.csdn.net/keepreder/article/details/47273297 2018.4.17
9、https://blog.csdn.net/keepreder/article/details/47277517 2018.4.17
10、https://segmentfault.com/a/1190000011835617 2018.4.17
11、https://zhuanlan.zhihu.com/p/21358126 2018.4.17

查看评论

随机森林、Boost和GBDT

随机森林若干决策树组成,每一个决策树很小,只有问题属性中的一小个子集,然后将所以小的决策树组合起来,用投票法决定分类。 * 在数据集上表现良好 * 在当前的很多数据集上,相对其他算法有着很大的优势...
  • siegecat
  • siegecat
  • 2016-09-08 09:15:21
  • 864

随机森林(Random forest,RF)的生成方法以及优缺点

       随机森林(Random Forest)是属于集成学习的一种组合分类算法(确切说是属于bagging),集成学习的核心思想就是将若干个弱(基)分类器组合起来,得到一个分类性能显著优越的强分...
  • zhongjunlang
  • zhongjunlang
  • 2018-03-08 21:18:10
  • 475

通俗的将Xgboost的原理讲明白

向AI转型的程序员都关注了这个号???大数据挖掘DT数据分析  公众号: datadw初看Xgboost,翻了多篇博客发现关于xgboost原理的描述实在难以忍受,缺乏逻辑性,写一篇供讨论。观其大略,...
  • meyh0x5vDTk48P2
  • meyh0x5vDTk48P2
  • 2018-03-24 00:00:00
  • 539

通俗理解URL和URI

这么说吧,对于这两个词的理解,我就举一个例子就行了。 如果说世界上每一个人的名字是不可以重复的,那么一个名字就可以唯一标识一个人(当然身份证号也是这样的意思哈),但是你是找不到这个人的,只能是唯一标识...
  • u010365819
  • u010365819
  • 2017-07-24 14:16:19
  • 175

个人对于堆栈的理解(简单通俗)

最近在做安装包(Inno Setup),也没好好看C++,然后安装包出了点小问题,说是堆溢出,自己也没理解透堆栈这个概念,在这里我就简单的总结一下。   1.堆     在C++ 中,只有程序员自己分...
  • u013059441
  • u013059441
  • 2017-03-08 11:48:31
  • 854

决策树和随机决策森林基本原理和应用实例

原理参考阅读: http://www.cnblogs.com/bourneli/archive/2013/03/15/2961568.html http://www.cnblogs.com/lufa...
  • l281865263
  • l281865263
  • 2016-03-25 20:27:31
  • 3884

关于java接口的通俗理解

这是自己看到的一个关于接口的解释,说的挺通俗的,希望能够帮助到大家理解接口。 接口的作用对于很多新手来说很不容易理解,我给大家举个例子。 接口只是一个规范,所以里面的方法都是空的。 假如我开了一...
  • qq_30492629
  • qq_30492629
  • 2016-03-30 14:49:35
  • 584

如何通俗的理解递归

本文转载出处:http://www.oschina.net/question/274508_50195 首先,递归,你可以想想成循环。for循环也可以看作类似递归的东西。但是for循环和递归有个本...
  • lefter1986
  • lefter1986
  • 2012-11-09 00:04:41
  • 3127

通俗地理解数据库三个范式

通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):  第一范式:1NF是对属性的原子性约...
  • taorui
  • taorui
  • 2008-05-08 20:50:00
  • 1662

通俗理解ActiveMQ

jms是发送消息的java中发送消息的中间件,包括5中数据流: · StreamMessage -- Java原始值的数据流 · MapMessage--一套名称-值对 · TextMessag...
  • MO_JM
  • MO_JM
  • 2017-03-03 10:41:55
  • 411
    个人资料
    持之以恒
    等级:
    访问量: 11万+
    积分: 1411
    排名: 3万+
    最新评论