当前位置:   article > 正文

matlab 随机森林算法_算法梳理四:随机森林

matlab iforest

9247b418895b2b4f1373dde5b3128d65.png

1. 集成学习概念、个体学习器概念

2. boosting bagging

3. 随机森林思想

4. 个体学习器结合策略

5. 随机森林的推广

6. 优缺点

7. sklearn参数

一、集成学习概念

abc064cf6a7db91e0e077e46ed82faf8.png

集成学习(Ensemble Learning)不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。

随机森林中的“森林”,顾名思义,很多棵树在一起,算法决策结果也不由一棵树决定,而是“森林”里的树一起“投票”决定,博采众长,它是集成学习方法之一。

如果集成中只包含同种类型的个体学习器,比方只包含决策树,则集成是同质的,个体学习器也称为“基学习器”;如果集成中包含不同类型的学习器,比方有决策树,也有神经网络,则集成式异质的。

二、Bagging和Boosting

根据个体学习器的生成方式,集成学习方法可以分为两大类,即个体学习器间存在强依赖关系,必须串行生成的序列化方法,以及个体学习器之间不存在强依赖关系,可同时生成的并行化方法,前者的代表是“boosting”,后者的代表是bagging和随机森林。

Bagging和Boosting的区别:

1、 bagging的训练集是随机的,各训练集是独立的;而boosting训练集的选择不是独立的,每一次选择的训练集都依赖于上一次学习的结果;

2、 bagging的每个预测函数都没有权重;而boosting根据每一次训练的训练误差得到该次预测函数的权重;

3、 bagging的各个预测函数可以并行生成;而boosting只能顺序生成。

3b14d8e637bc9b682f677dc5b95179dd.png

那思考两个问题,集成学习是由很多个弱学习器组成,那

1、弱学习器满足怎样条件才能在集合的时候带来效果的提升?

2、集成学习中,弱学习器如何结合在一起的?

Bagging

07de145b169c66004434c75dddc87ffb.png

给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样经过m次随机采样操作,我们得到含m个样本的采样集,初始样本中的样本有的可能会多次出现,有的可能从未出现,

照这样,我们采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再讲这些基学习器结合,这就是bagging的基本流程,bagging通常对回归任务采用简单投票法,对回归任务使用简单平均法。

三、随机森林思想

随机森林是bagging的一个变体,它进一步在决策树的训练过程中引入了随机属性选择,具体来说,传统决策树在选择划分属性时是在当前节点的属性集合中选择一个最优属性,而在随机森林中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的集合,再从k个属性中选择一个最优属性来划分。k控制了随机属性引入的程度,一般取值为

,其中d为所有属性。

随机森林对Bagging只做了小改动,但是与Bagging中基学习器的“多样性”仅通过样本扰动而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间的差异度的增加而进一步提升。

四、个体学习器结合策略

4.1平均法

对数值性输出

,最常见的结合策略是使用平均法
  • 简单平均法
  • 加权平均法
    其中
    是个体学习器的权重,通常要求
    >=0,

一般而言,在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。

4.2投票法

对分类任务来说,学习器

将从类别标记集合中预测出一个标记,最常见的结合策略是投票法。
  • 绝对多数投票法

如果某个标记得票过半数,则预测为该标记,否则拒绝预测。

  • 相对对数投票法

预测为得票最高的标记,若同时有多个标记获最高票,则从中随机选取一个。

  • 加权投票法

与加权平均法类似,

是个体学习器的权重,通常要求
>=0,

4.3、学习法

当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合,Stacking是学习法的典型代表,这里我们把个体学习器成为初级学习器,用于结合的学习器成为次级学习器或元学习器,Stacking先从初始数据集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。

五、随机森林的推广

5.1、extra trees

extra trees是RF的一个变种, 原理几乎和RF一模一样

5.2、Totally Random Trees Embedding

Totally Random Trees Embedding(以下简称 TRTE)是一种非监督学习的数据转化方法。

5.3、Isolation Forest

Isolation Forest(以下简称IForest)是一种异常点检测的方法。它也使用了类似于RF的方法来检测异常点。

六、随机森林优缺点

6.1、优点

  1. 在测试集上表现良好,由于两个随机性的引入,使得随机森林不容易陷入过拟合(样本随机,特征随机);
  2. 由于树的组合,使得随机森林可以处理非线性数据,本身属于非线性分类(拟合)模型;
  3. 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化;
  4. 并行化方法,训练速度快,可以运用在大规模数据集上;
  5. 可以处理缺省值(单独作为一类),不用额外处理;
  6. 由于有袋外数据(OOB),可以在模型生成过程中取得真实误差的无偏估计,且不损失训练数据量;
  7. 在训练过程中,能够检测到feature间的互相影响,且可以得出feature的重要性,具有一定参考意义;

6.2、缺点

1、随机森林在某些噪音较大的分类或回归问题上会过拟合;

2、对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响。

七、sklearn中随机森林分类树算法参数

class RandomForestClassifier(ForestClassifier):

参数

1、n_estimators : integer, optional (default=10) 随机森林中树的数目2、criterion : string, optional (default="gini") 树分裂的标准,可选的是信息熵或者基尼指数,默认是基尼指数

3、max_depth : integer or None, optional (default=None)

树的分裂深度,如果是“None”,则分裂到每个叶支点为同一类或直到每个叶支点少于“min_samples_split samples”

4、min_samples_split : int, float, optional (default=2)

分割内部节点所需的最少样本数量 int:如果是int值,则就是这个int值 float:如果是float值,则为min_samples_split * n_samples

5、min_samples_leaf : int, float, optional (default=1)

叶子节点上包含的样本最小值 int:就是这个int值 float:min_samples_leaf * n_samples

6、min_weight_fraction_leaf : float, optional (default=0.)

7、 max_features : int, float, string or None, optional (default="auto")

寻求最佳分割时的考虑的特征数量,即特征数达到多大时进行分割。

int:max_features等于这个int值

float:max_features是一个百分比,每(max_features * n_features)特征在每个分割出被考虑。

"auto":max_features等于sqrt(n_features)

"sqrt":同等于"auto"时

"log2":max_features=log2(n_features)

None:max_features = n_features

8、max_leaf_nodes : int or None, optional (default=None)

最大叶子节点数,以最好的优先方式生成树,最好的节点被定义为杂质相对较少,即纯度较高的叶子节点,如果是“None”,则数目不受限制。

9、min_impurity_decrease : float, optional (default=0.)
一个节点将会被分裂,如果分裂之后,杂质度的减少效果高于或等于这个值。

10、min_impurity_split : float,

树增长停止的阀值,如果不纯度高于这个值,则继续分裂,反之则是一个叶支点。

该参数已经被min_impurity_decrease取代。

11、bootstrap : boolean, optional (default=True)

是否采用有放回式的抽样方式

12、oob_score : bool (default=False)

是否使用袋外样本来估计该模型大概的准确率

13、n_jobs : int or None, optional (default=None)

n_jobs用于并行提高效率,任务并行时指定的CPU数量。

14、random_state : int, RandomState instance or None, optional (default=None)

让结果可以复现,再次运行代码时可以得到之前一样的结果

15、verbose : int, optional (default=0)

是否输出一些模型运算过程中的东西(任务进程)。

16、 warm_start : bool, optional (default=False)

是否使用上次的模型结果作为初始化,默认是False,表示不使用

17、 class_weight : dict, list of dicts, "balanced", "balanced_subsample" or None, optional (default=None)

用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重

属性

1、estimators_ : list of DecisionTreeClassifier决策树列表

拟合好的子分类器列表,也就是单个决策树

2、classes_ : array of shape = [n_classes] or a list of such arrays

类别标签列表

3、 n_classes_ : int or list

类别数量

4、n_features_ : int

拟合过程中使用的特征的数量

5、 n_outputs_ : int

拟合过程中输出的数量

6、 feature_importances_ : array of shape = [n_features]

特征重要程度列表

7、 oob_score_ : float

使用oob(袋外)数据集测试得到的得分数

8、 oob_decision_function_ : array of shape = [n_samples, n_classes]

参考:《机器学习》周志华

随机森林参数理解与调优 - u012559520的博客 - CSDN博客​blog.csdn.net 集成学习法之bagging方法和boosting方法 - yip的个人博客 - CSDN博客​blog.csdn.net
3ffe466cbf66ce27fbfec3a77f6c3d87.png
Bagging与随机森林算法原理小结 - 刘建平Pinard - 博客园​www.cnblogs.com
77536aa865be8b5c57d103ff5065cdc7.png
Sklearn参数详解-LR模型 - 云+社区 - 腾讯云​cloud.tencent.com
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/94503
推荐阅读
相关标签
  

闽ICP备14008679号