一 简介

随机森林是一种比较有名的集成学习方法,属于集成学习算法中弱学习器之间不存在依赖的一部分,其因为这个优点可以并行化运行,因此随机森林在一些大赛中往往是首要选择的模型。

随机森立中随机是核心,通过随机的选择样本和选择特征,降低了决策树之间的相关性,随机森立中的随机主要有两层意思,一是随机在原始训练数据中有放回的选取等量的数据作为训练样本,二是在建立决策树时,随机的选特征中选取一部分特征建立决策树。这两种随机使得各个决策树之间的相关性小,进一步提高模型的准确性。

二、算法介绍

假设训练集中n个样本,每个样本有d个特征,需要训练一个包含T棵数的随机森立,具体的算法流程如下所示:

1、对于T棵决策树,分别重复一下操作:

a 使用Bootstrap抽样,从训练集D获得大小为n的训练集D;

b 从d个特征中随机选取m(m

2 如果是回归问题,则最后的输出是 每个树输出的均值;

3 如果是分类问题,则根据投票原则,确定最终的类别。

每棵树的生成都是随机的,至于随机选取的特征数,如何决定随机选取的特征数的大小呢,主要有两种方法,一种是交叉验证,另外一种的经验性设置 m= log_2 d +1。

模型的性能评估

1、分类间隔:分类间隔是指森林中正确分类样本的决策树的比例减去错误分类的决策树的比例,通过平均每个样本的分类间隔得到随机森林的分类间隔。对于分类间隔,当然是越大越好,大的分类间隔说明模型的分类效果比较稳定,泛化效果好。

2、袋外误差:对于每棵树都有一部分样本而没有被抽取到,这样的样本就被称为袋外样本,随机森林对袋外样本的预测错误率被称为袋外误差(Out-Of-Bag Error,OOB)。计算方式如下所示:

(1)对于每个样本,计算把该样本作为袋外样本的分类情况;

(2)以投票的方式确定该样本的分类结果;

(3)将误分类样本个数占总数的比率作为随机森林的袋外误差。

3、变量重要程度刻画

其实变量重要程度刻画不能算是模型性能评估里面,因为有的实际应用中需要查看这么多的特征中到底那一部分特征是相对重要的特征,这个时候变量的重要程度的刻画就显得尤为重要了。其计算方式主要有一下两种方式:

(1)通过计算特征的平均信息增益大小得出;

(2)通过计算每个特征对模型准确率的影响,通过打乱样本中某一特征的特征值顺序,产生新样本,将新样本放入建立好的随机森林模型计算准确率。相对于不重要的特征,即使打乱了顺序也不会对结果产生很大的影响,对于重要的特征,会对结果产生很大的影响的。

应用Python中的sklearn实现随机森林

(一)分类问题

#RandomForest分类

from sklearn.model_selection import cross_val_score

from sklearn.datasets import load_iris

from sklearn.ensemble import RandomForestClassifier

iris = load_iris()

clf = RandomForestClassifier(n_estimators=100)

scores = cross_val_score(clf,iris.data,iris.target)

scores.mean()

RandomForestClassifier函数主要是执行随机森林分类任务的,其主要参数有:

1、框架参数:

n_estimators : 指定随机森林中的分类器的个数,默认为10。一般来说n_estimators 太小容易欠拟合,太大计算量大,故需要参数调优选择一个适中的数值;

oob_score: 是否采用袋外误差来评估模型,默认为 False;

criterion :及CART树划分对特征的评价标准,默认我基尼指数,还可以选择信息增益;

2、决策树参数

max_features :建立决策树时选择的最大特征数目(从原始特征中选取多少特征进行建立决策树),默认为auto,意味着考虑sqrt(n_features)个特征;还可以为整数,即直接指定数目;浮点数,即指定百分比;sqrt与auto相同;log2即指定log2(n_features);如果是None,则为最大特征数n_features;

max_depth :决策树的最大深度,默认是不进行限制的,如果是模型样本量多,特征也多的情况,推荐限制修改这个,常用的可以取值为10-100之间;

min_samples_split :限制子树继续划分的条件,如果某节点的样本数目小于此值,则不会再继续划分,默认为2,样本量非常大的时候,应该增大这个值;

min_samples_leaf :叶子节点的最小样本数目,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝,默认为1,数据量大的时候可以增大这个值;

min_weight_fraction_leaf :叶子节点最小样本权重,这个值限制了叶子节点所有样本权重和最小值,如果小于最小值,则会和兄弟节点被剪枝。默认为0,就是不考虑权重。通常来说,若样本中存在较多的缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时就需要考虑这个值了。

max_leaf_nodes :最大叶子节点数,通过限制最大叶子节点数目来防止过拟合,默认为None,即 不进行限制,如果特征分成很多可以加以限制;

min_impurity_split :节点划分最小不纯度,这个值限制了决策树的增长,如果某节点的不纯度小于这个阈值,则该节点不在生成子节点,即为叶子节点,一般不推荐改动,默认值为1e-7;

min_impurity_decrease :若一个节点被分割,如果这个分割导致大于或等于该值。默认为0;

bootstrap :构建树时是否使用bootstrap采样,默认为True;

n_jobs :设置程序的并行作业数量,默认为1,如果为-1,则作业数目为核心数;

random_state :随机数的设置;

verbose :控制构建树过程中的详细程度。

(二) 回归问题

#RandomForestRegressor

from sklearn.model_selection import cross_val_score

from sklearn.datasets import load_boston

from sklearn.ensemble import RandomForestRegressor

boston = load_boston()

rgm = RandomForestRegressor(n_estimators=100)

scores = cross_val_score(rgm,boston.data,boston.target)

scores.mean()

随机森林回归于随机森林分类问题基本类似,参数也基本相同,可以相互参考,本文只是单单的介绍了随机森立的参数,并没有系统的介绍如何进行参数的调优,参数调优在数据分析和挖掘中也占有一定的地位,学会好的调优方法能够达到事半功倍的效果,后面会有单独的一篇文件介绍参数调优的相关方法的,当然方法主要是基于现有的python库,尽请期待。

主要参考:

python随机森林 交叉验证_随机森林算法详解及Python实现相关推荐

  1. python随机森林 交叉验证_随机森林是否需要交叉验证+特征的重要性

    随机森林不需要交叉验证! 随机森林属于bagging集成算法,采用Bootstrap,理论和实践可以发现Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中.故没有参加 ...

  2. python开课吧官网_开课吧老师详解 学Python真的可以帮助提高办公效率吗

    在工作中你是否有过这样的经历?周围的同事看上去貌似没有做什么事情,每天准时下班;你呢兢兢业业做着本职工作,努力完成领导布置的每一项任务,常常加班到很晚才走.可是最后你身边的那个同事反而深得领导喜爱升职 ...

  3. RRT(Rapidly-Exploring Random Trees)算法详解及python实现

    RRT(Rapidly-Exploring Random Trees)算法详解及python实现 前言 一.原理 二.伪代码 三.代码详解 总结 前言 快速探索随机树(RRT):作为一种随机数据结构, ...

  4. kmeans算法详解和python代码实现

    kmeans算法详解和python代码实现 kmeans算法 无监督学习和监督学习 监督学习: 是通过已知类别的样本分类器的参数,来达到所要求性能的过程 简单来说,就是让计算机去学习我们已经创建好了的 ...

  5. python直线拟合_RANSAC算法详解(附Python拟合直线模型代码)

    之前只是简单了解RANSAC模型,知道它是干什么的.然后今天有个课程设计的报告,上去讲了一下RANSAC,感觉这个东西也没那么复杂,所以今天就总结一些RASAC并用Python实现一下直线拟合. RA ...

  6. AdaBoost算法详解与python实现

    AdaBoost算法详解与python实现 https://tangshusen.me/2018/11/18/adaboost/

  7. 排序算法(五)——堆排序算法详解及Python实现

    本文目录 一.简介 二.算法介绍 三.代码实现 排序算法系列--相关文章 一.简介 堆排序(Heap Sort)算法,属于选择排序类,不稳定排序,时间复杂度O(nlogn). 堆排序由Floyd和Wi ...

  8. Simhash算法详解及python实现

    Simhash算法详解及python实现 GoogleMoses Charikar发表的一篇论文"detecting near-duplicates for web crawling&quo ...

  9. 编辑距离算法详解和python代码

    编辑距离(Levenshtein Distance)算法详解和python代码 最近做NLP用到了编辑距离,网上学习了很多,看到很多博客写的有问题,这里做一个编辑距离的算法介绍,步骤和多种python ...

最新文章

  1. Filezilla-使用ssh连接到服务器-上传下载文件
  2. 联想电脑如何添加无线网络连接服务器,安装英特尔MYWIFI的操作步骤
  3. 一篇搞懂HTTP协议
  4. 州的先生 python界面 代码完整版(注释)
  5. mysql私房菜_老男孩MySQL私房菜深入浅出精品视频第7章备份与恢复基础实践视频课程...
  6. 运用ffmpeg SDK解264码流(来源FFmpeg工程组)
  7. 微服务架构·基础篇[转]
  8. SPSS详细图文教程:手把手教你配对样本t检验,
  9. 蒙版操作—快速蒙版扣图
  10. 淘宝R2去模糊化+聚石塔+奇门
  11. 自动驾驶技术平台分享:百度Apollo开放平台8.0再升级,更简单,更便捷,更高效
  12. win10内存占用率过高怎么办_DNF:WIN10玩DNF卡顿,内存占用过高的解决方法
  13. 灭火器摆放识别检测算法 yolo
  14. 8051单片机Proteus仿真与开发实例-ULN2003A驱动步进电机仿真
  15. MPLAB X IDE开发环境
  16. 关于解决Photoshop CS5打开后出现已停止工作强制退出的问题
  17. Google Earth Engine (GEE)——如何统计指定区域的像素数量和总量
  18. orange's学习--第七章:l处理退格换行
  19. ssm+java计算机毕业设计拼团旅游系统ldv25(程序+lw+源码+远程部署)
  20. 数据分析实战——有哪些让你不得不服气的神逻辑(知乎)

热门文章

  1. Linux消息队列编程(简单应用)
  2. 天池工业蒸汽量预测-模型调参
  3. ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost:3309‘ (10061)
  4. git安装与基本使用(奶妈级)
  5. count(字段),count(*)和count(1)的区别
  6. Burpsuite安装教程
  7. 模糊查询 oracle语句,Oracle特殊符号的模糊查询
  8. 基于虚幻引擎与AppleAR的人脸动画实时迁移项目
  9. 使用hdc命令进行查看或者安装应用的时候报错[Fail]ExecuteCommand need connect-key解决方法
  10. 数字次数统计器----数字出现次数统计器