定义:

随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。可回归可分类。
所以随机森林是基于多颗决策树的一种集成学习算法,常见的决策树算法主要有以下几种:
1. ID3:使用信息增益g(D,A)进行特征选择
2. C4.5:信息增益率 =g(D,A)/H(A)
3. CART:基尼系数
一个特征的信息增益(或信息增益率,或基尼系数)越大,表明特征对样本的熵的减少能力更强,这个特征使得数据由不确定性到确定性的能力越强。


Bagging和Boosting的概念与区别

随机森林属于集成学习(Ensemble Learning)中的bagging算法。在集成学习中,主要分为bagging算法和boosting算法。我们先看看这两种方法的特点和区别。

Bagging(套袋法)

bagging的算法过程如下:

  • 从原始样本集中使用Bootstraping方法(自助法,是一种有放回的抽样方法)随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)

  • 对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)

  • 对于分类问题:由投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)

Boosting(提升法)

boosting的算法过程如下:

  • 对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。

  • 进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)

Bagging,Boosting的主要区别
  • 样本选择上:Bagging采用的是Bootstrap随机有放回抽样;而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。

  • 样本权重:Bagging使用的是均匀取样,每个样本权重相等;Boosting根据错误率调整样本权重,错误率越大的样本权重越大。

  • 预测函数:Bagging所有的预测函数的权重相等;Boosting中误差越小的预测函数其权重越大。

  • 并行计算:Bagging各个预测函数可以并行生成;Boosting各个预测函数必须按顺序迭代生成。

下面是将决策树与这些算法框架进行结合所得到的新的算法:

1)Bagging + 决策树 = 随机森林

2)AdaBoost + 决策树 = 提升树

3)Gradient Boosting + 决策树 = GBDT


创建流程及举例

举例:
考虑一个简单例子:在二分类任务中,假定三个分类器在三个测试样本上的表现如下图,其中√表示分类正确,×表示分类错误,集成学习的结果通过投票法产生,即“少数服从多数”。如上图,在(a)中,每个分类器都只有66.6%的精度,但集成学习却达到了100%;在(b)中,三个分类器没有差别,集成之后性能没有提高;在(c)中,每个分类器的精度都只有33.3%,集成学习的结果变得更糟。这个简单地例子显示出:要获得好的集成,个体学习器应“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太差,并且要有“多样性”,即学习器间具有差异。

构建:
所以综上:
随机森林用于分类时,即采用n个决策树分类,将分类结果用简单投票法得到最终分类,提高分类准确率。

简单来说,随机森林就是对决策树的集成,但有两点不同:

(1)采样的差异性:从含m个样本的数据集中有放回的采样,得到含m个样本的采样集,用于训练。这样能保证每个决策树的训练样本不完全一样。

(2)特征选取的差异性:每个决策树的n个分类特征是在所有特征中随机选择的(n是一个需要我们自己调整的参数)

决策树相当于一个大师,通过自己在数据集中学到的知识对于新的数据进行分类。但是俗话说得好,一个诸葛亮,玩不过三个臭皮匠。随机森林就是希望构建多个臭皮匠,希望最终的分类效果能够超过单个大师的一种算法。
那随机森林具体如何构建呢?有两个方面:数据的随机性选取,以及待选特征的随机选取。

1.数据的随机选取:

首先,从原始的数据集中采取有放回的抽样,构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。第二,利用子数据集来构建子决策树,将这个数据放到每个子决策树中,每个子决策树输出一个结果。最后,如果有了新的数据需要通过随机森林得到分类结果,就可以通过对子决策树的判断结果的投票,得到随机森林的输出结果了。如下图,假设随机森林中有3棵子决策树,2棵子树的分类结果是A类,1棵子树的分类结果是B类,那么随机森林的分类结果就是A类。

2.待选特征的随机选取

与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。这样能够使得随机森林中的决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

下图中,蓝色的方块代表所有可以被选择的特征,也就是目前的待选特征。黄色的方块是分裂特征。左边是一棵决策树的特征选取过程,通过在待选特征中选取最优的分裂特征(ID3算法,C4.5算法,CART算法等等),完成分裂。右边是一个随机森林中的子树的特征选取过程。

所以随机森林需要调整的参数有:

(1) 决策树的个数

(2) 特征属性的个数

(3) 递归次数(即决策树的深度)

python代码实现

基于scikit-learn第三方机器学习库的实现:

from sklearn.model_selection 

输出结果:

0.9794087938210.9996078431370.999898989899

性能对比:ExtraTree分类器集合 > 随机森林 > 决策树

代码实现流程:

(1) 导入文件并将所有特征转换为float形式

(2) 将数据集分成n份,方便交叉验证

(3) 构造数据子集(随机采样),并在指定特征个数(假设m个,手动调参)下选取最优特征

(4) 构造决策树

(5) 创建随机森林(多个决策树的结合)

(6) 输入测试集并进行测试,输出预测结果

网上代码:

import csv

输出结果准确率大致在0.64左右。代码中数据集下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/undocumented/connectionist-bench/sonar/


性能及优缺点

优点:

    1.很多的数据集上表现良好;

    2.能处理高维度数据,并且不用做特征选择;

    3.训练完后,能够给出那些feature比较重要;

    4.训练速度快,容易并行化计算。
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

缺点:

    1.在噪音较大的分类或回归问题上会出现过拟合现象;

    2.对于不同级别属性的数据,级别划分较多的属性会对随机森林有较大影响,则RF在这种数据上产出的数值是不可信的。
  • 1

  • 2

  • 3


参考:1. 决策树算法及python实现2. 随机森林算法学习(RandomForest)3. 随机森林的原理分析及Python代码实现4. 随机森林_百度百科

基于python的随机森林回归实现_python实现随机森林相关推荐

  1. 基于python的随机森林回归实现_PYTHON | 随机森林实战(代码+详解)

    大家好,我是菜鸟君,之前跟大家聊过R语言的随机森林建模,指路 R语言 | 随机森林建模实战(代码+详解),作为刚过完1024节日的码农算法工程师来说,怎么可能只会用一种语言呢?今天就来说说Python ...

  2. python随机森林变量重要性_Python中随机森林的实现与解释

    使用像Scikit-Learn这样的库,现在很容易在Python中实现数百种机器学习算法.这很容易,我们通常不需要任何关于模型如何工作的潜在知识来使用它.虽然不需要了解所有细节,但了解机器学习模型是如 ...

  3. python生成随机的测验试卷_python生成随机的测验试卷文件

    假如你是一位地理老师,班上有 35 名学生,你希望进行美国各州首府的一个小测验.不妙的是,班里有几个坏蛋,你无法确信学生不会作弊.你希望随机调整问题的次序,这样每份试卷都是独一无二的,这让任何人都不能 ...

  4. 基于python的随机森林回归实现_Python机器学习实践:随机森林算法训练及调参-附代码...

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 博客园 作者 | 战争热诚 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法 ...

  5. python随机森林特征重要性_Python中随机森林回归的特征重要性

    当涉及到决策树时,特征重要性不是一个黑匣子.来自DecisionTreeRegressor的文档:The importance of a feature is computed as the (nor ...

  6. python随机森林变量重要性_python中随机森林如何优化

    2.声纳数据集案例研究 在本节中,我们将把随机森林算法应用到声纳数据集. 该示例假定数据集的CSV副本位于当前工作目录中,文件名为sonar.all-data.csv. 首先加载数据集,将字符串值转换 ...

  7. python 随机森林调参_python的随机森林模型调参

    一.一般的模型调参原则 1.调参前提:模型调参其实是没有定论,需要根据不同的数据集和不同的模型去调.但是有一些调参的思想是有规律可循的,首先我们可以知道,模型不准确只有两种情况:一是过拟合,而是欠拟合 ...

  8. python随机种子怎么用_python设置随机种子实例讲解

    python设置随机种子实例讲解 对于原生的random模块 import random random.seed(1) 如果不设置,则python根据系统时间自己定一个. 也可以自己根据时间定一个随机 ...

  9. python随机红包怎么发_python生成随机红包的实例写法

    假设红包金额为money,数量是num,并且红包金额money>=num*0.01 原理如下,从1~money*100的数的集合中,随机抽取num-1个数,然后对这些数进行排序,在排序后的集合前 ...

最新文章

  1. 智慧屏到底是不是鸿蒙,荣耀智慧屏究竟是电视还是“新物种”?
  2. esp32 micropython spiffs_二十一,ESP32 SPIFFS:读取一个文件
  3. 一秒钟世界上会发生多少事_1秒钟世界上会发生多少事?答案超乎你的想象……...
  4. Ajax+asp.net无刷新验证用户名
  5. python收集数据程序_用一行Python代码进行数据收集探索!Python真牛逼!
  6. 任务完成:我从CNC2018 GetAJob挑战中学到的东西
  7. echarts源码:图标类插件开发
  8. java并发临界资源管理
  9. ictclas bug修复
  10. 2d shader unity 阴影_UNITY崩坏3角色渲染实践
  11. 离开,是一个新的开始
  12. [分享]如何开机后直接进入桌面
  13. 自适应滤波器之块自适应滤波器
  14. 零基础简单易用的EmberJS框架
  15. 基于WaveNet网络的英语语音识别
  16. opencv task3------答题卡识别
  17. CE6 CPU 使用率
  18. Web前端之jQuery 一
  19. 【虚拟试衣论文】Generating High-Resolution Fashion Model Images Wearing Custom Outfits
  20. 谷歌优化有什么好处?外贸独立站如何提高谷歌优化排名?

热门文章

  1. 使用 rem 设置文字大小(文字响应式)
  2. 生物信息学——RNA的剪切过程
  3. Would It affect RAC clusterware and database If we adjust OS time/Clock?
  4. Pulseaudio之load-module加载module-always-sink(十四)
  5. H264/H265/YUV码流分析工具推荐(一)
  6. 通过堡垒机登陆服务器脚本
  7. android MemeoryFile和Parcel操作文件描述符fd
  8. 树莓派---MAC下安装AndroidThings
  9. Android系统信息获取 之十三:Linux内核版本信息获取
  10. vue-meta-info动态设置meta标签