zoukankan      html  css  js  c++  java
  • 机器学习:随机森林

       

    引言

       

    随机森林在机器学习实战中没有讲到,我是从伯克利大学的一个叫breiman的主页中看到相关的资料,这个breiman好像是随机森林算法的提出者,网址如下

       

    http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm

       

    随机森林算法简介

       

    随机森林说白了就是很多个决策树组成在一起,就形成了森林,关键在于如何创建森林里的每一棵树,随机森林用到的方法bootstrap法,通俗的讲就是有放回的抽取样本

       

    这里有个理论依据在这,说明有放回的抽取方法大概有三分之一的样本不会被抽取到,在此我简单说一下这个原因

       

    三分之一的样本不会被抽取到的原因

       

       

    当N足够大时, 将收敛于1/e0.368,这表明原始样本集D中接近37%的样本不会出现在bootstrap样本中,这些数据称为袋外(Out-Of-Bag,OOB)数据,使用这些数据来估计模型的性能称为OOB估计

       

    构建决策树

       

    除了随机抽取样本外,构建一个决策树还需要随机抽取样本的特征,比如样本总共有100维特征,我们随机抽取其中的10维特征构建决策树

       

    如果我们想构建200棵决策树的随机森林,我们就要这样随机抽取200次,每次抽取10维特征构建一个决策树

       

    而用于构建决策树的样本也需要用之前说的那种bootstrap法有放回的随机抽取,简单说一下用于构建一个决策树的样本集生成的过程

       

    bootstrap法抽取样本过程

       

    随机抽取1个样本,然后让回,然后再随机抽取1个样本,这样抽取N次,可以得到N个样本的数据集,用这N个样本的数据集,按照之前随机选取的10维特征,遍历这10维特征,对数据集进行划分,得到一棵决策树

       

    如果要构建200棵树,就需要随机抽取20010维特征,随机抽取200N个样本集

       

    随机森林分类

       

    得到了200棵树的随机森林如何用作分类呢,随机森林中用的OOB数据测试随机森林的分类结果,之前说到bootstrap方法会造成大概三分之一的数据不会被采样的,这部分数据就被称之为OOB数据,将这部分数据放入森林中,每一棵树会对相应的数据得到一个分类结果,那么最后的结果会根据投票来确定

       

    为什么不用交叉验证的方法二用OOB的方法

       

    有一个问题就是这种OOB的方法跟交叉验证中随机抽取样本有什么区别,比如十折交叉验证中就是把数据集平均分为10份儿,随机选取其中的9份儿用作训练,1份儿用作测试,重复十次,取平均值,那么OOB这种有放回的重采样,和交叉验证有什么区别呢

       

    一个很重要的区别根据作者的说法在于计算量,用交叉验证(CV)估计组合分类器的泛化误差时,可能导致很大的计算量,从而降低算法的运行效率,而采用OOB数据估计组合分类器的泛化误差时,可以在构建各决策树的同时计算出OOB误

    差率,最终只需增加少量的计算就可以得到。相对于交叉验证,00B估计是高效的,且其结果近似于交叉验证的结果

       

  • 相关阅读:
    iframe标签用法详解
    Redis 数据备份与恢复,安全,性能测试,客户端连接,管道技术,分区(四)
    Redis 有序集合(sorted set),发布订阅,事务,脚本,连接,服务器(三)
    Redis 命令,键(key),字符串(String),哈希(Hash),列表(List),集合(Set)(二)
    Redis 安装,配置,简介,数据类型(一)
    Python2.x与3​​.x版本区别
    Python主流框架
    python面向对象( item系列,__enter__ 和__exit__,__call__方法,元类)
    Json对象与Json字符串互转(4种转换方式)
    JSON.parse和eval的区别
  • 原文地址:https://www.cnblogs.com/keedor/p/4463927.html
Copyright © 2011-2022 走看看