zoukankan      html  css  js  c++  java
  • 对于随机森林的通俗理解

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

    一、决策树

    决策树是机器学习最基本的模型,在不考虑其他复杂情况下,我们可以用一句话来描述决策树:如果得分大于等于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

  • 相关阅读:
    Linux学习笔记21——线程同步的两种方式
    Linux学习笔记20——第一个多线程程序
    Linux学习笔记19——信号2
    Linux学习笔记18——信号1
    Linux学习笔记17——输入输出重定向
    Linux学习笔记16——wait函数
    Linux学习笔记15——GDB 命令详细解释【转】
    Linux学习笔记14——使用fcntl实现文件锁定
    Linux学习笔记13——使用curses函数库
    Linux学习笔记12——Unix中的进程
  • 原文地址:https://www.cnblogs.com/yuluoxingkong/p/8558564.html
Copyright © 2011-2022 走看看