matlab随机森林算法_随机森林算法介绍(理论)
⼀、集成学习和个体学习器的概念
集成学习:通过构建并结合多个学习器来完成任务,有时也被称为多分类器系统、基于委员会的学习等。
个体学习器:也就是常见的学习算法,如逻辑回归,神经⽹络等,根据个体学习器间的强弱依赖关系,可以分类两类集成学习算法。⼀类是具有强依赖性,个体学习器必须串⾏⽣成的序列化⽅法,代表算法是Boosting。另⼀类的具有弱依赖性,个体学习器可同时⽣成的并⾏化⽅法,代表算法是Bagging和"随机森林"。
下图显⽰出集成学习的⼀般结构:
先产⽣⼀组"个体学习器",再⽤某种策略将他们结合起来。个体学习器通常由⼀个现有的学习算法从训练数据产⽣,例如C4.5决策树算法、BP神经⽹络算法等,此时集成中只包含同种类型的个体学习器,例如"决策树集成"中全是决策树,"神经⽹络集成"中全是神经⽹络,这样的集成叫同质集成,同质集成中的个体学习器也叫"基学习器",相应的学习算法叫"基学习算法"。集成也可包含不同类型的个体学习器,例如同时包含决策树和神经⽹络,这样的集成叫异质集成,异质集成中的个体学习器由不同的学习算法⽣成,这时的个体学习器叫做组间学习器或者直接叫个体学习器。
集成学习通过将多个学习器进⾏结合,常可获得⽐单⼀学习器显著优越的泛化性能。这对"弱学习器"尤为明显,因此集成学习的很多理论都是针对弱学习器进⾏的,⽽基学习器有时也被称为弱学习器,但要注意的是,虽然理论上来说使⽤弱学习器集成⾜以获得好的性能,但在实践中处于种种考虑,例如希望使⽤较少的个体学习器,或是重⽤关于常见学习器的⼀些经验等,⼈们往往会使⽤⽐较强的学习器。
弱学习器常指泛化性能略优于随机猜测的学习器
原则
1. 集成学习的结果通过投票法产⽣,即"少数服从多数"。
2. 个体学习器要有⼀定的准确性,⾄少不差于若学习器,即"学习器不能太坏"。
3. 个体学习器要有多样性,即学习器间有差异。
⼆、Boosting
Boosting是⼀族可将弱学习器提升为强学习器的算法。这族算法的⼯作机制类似:先从初始训练集训练出⼀个基学习器,再根据基学习器的表现对训练样本分布进⾏调整,使得先前基学习器做错的训练
样本在后续受到更多关注,然后基于调整后的样本分布来训练下⼀个基学习器;如此重复进⾏,直⾄基学习器数⽬达到事先指定的值T,最终将这T个基学习器进⾏加权结合。
Boosting算法要求基学习器能对特定的数据分布进⾏学习,这可通过"重赋权法"实施,即在训练过程的每⼀轮中,根据样本分布为每个训练样本重新赋予⼀个权重。对⽆法接受带权样本的基学习算法,则可通过"重采样法"(re-sampling)来处理,即在每⼀轮学习中,根据样本分布对训练集重新进⾏采样,再⽤重采样⽽得的样本集对基学习器进⾏训练。⼀般⽽⾔,这两种做法没有显著的优劣差别。需注意的
是,Boosting算法在训练的每⼀轮都要检查当前⽣成的基学习器是否满⾜基本条件,即检查当前基分类器是否⽐随机猜测的好,⼀旦条件不满⾜,则当前基学习器即被抛弃,且学习过程停⽌。在此种情形下,初始设置的学习轮数T也许还远未达到,可能导致最终集成中只包含很少的基学习器⽽性能不佳。若采⽤"重采样法",则可获得“重启动”机会以避免训练过程中过早停⽌,即在抛弃不满⾜条件的当前基学习器之后,可根据当前分布重新对训练样本进⾏采样,再基于新的采样结果重新训练出基学习器,从⽽使得学习过程可以持续到预设的T轮完成。
从偏差-⽅差分解的⾓度看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。
三、Bagging
由前⾯介绍可知,想要得到泛化能⼒强的集成,集成中的个体学习器应尽可能相互独⽴;虽然"独⽴"在现实任务中⽆法做到,但可以设法使基学习器尽可能具有较⼤的差异。给定⼀个训练数据集,⼀种可能的做法是对训练样本进⾏采样,产⽣出若⼲不同的⼦集,再从每个数据⼦集中训练出⼀个基学习器。这样,由于训练数据不同,我们获得的基学习器可望具有较⼤的差异。然⽽,为获得好的集成,我们还希望个体学习器不能太差。如果采样出的每个⼦集都完全不同,则每个基学习器只⽤到了⼀⼩部分训练数据,甚⾄不⾜以进⾏有效学习,这显然⽆法确保产⽣出⽐较好的基学习器。为了解决这个问题,我们可以考虑使⽤相互有交叠的采样⼦集。
Bagging是并⾏式集成学习⽅法最著名的代表。它直接基于⾃助采样法(bootstrap sampling),给定包含m个样本的数据集,我们先随机取出⼀个样本放⼊采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过m次随机采样操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集⾥多次出现,有的则从未出现。
Bagging 照这样,我们可采样出T个含m个样本的采样集,然后基于每个采样集训练出⼀个基学习器,再将这些基学习器进⾏结合,这就是Bagging 的基本流程。在对预测输出进⾏结合时,Bagging通常对分类任务使⽤简单投票法,对回归任务使⽤简单平均法。若分类预测时出现两个的基本流程
类收到同样票数的情形,则最简单的做法是随机选择⼀个,也可进⼀步考察学习器投票的置信度来确定最终胜利者。
为处理多分类或者回归任务。Adaboost需进⾏修改,与标准AdaBoost只适⽤于⼆分类任务不同,Bagging能不经修改的⽤于多分类、回归等任务。⽽且⾃助采样过程还给Bagging带来另⼀个优点:由于每个基学习器只使⽤了初始训练集中部分样本(63.2%),剩下的样本(36.8%)的样本可⽤作验证集来对泛化性能进⾏"包外估计"(out-of-bag estimate)。
⾃助法:我们希望评估的是⽤D训练出的模型。但在留出法和交叉验证法中,由于保留了⼀部分样本⽤于测试,因此实际估计的模型所使⽤的训练集⽐D⼩,这必然会引⼊⼀些因训练样本规模不同⽽导致的估计偏差。留⼀法受训练样本规模变化的影响较⼩,但计算复杂度⼜太⾼。"⾃助法"是⼀个好的解决办法,它直接以⾃助采样法为基础。给定包含m个样本的数据集D,我们对他进⾏采样产⽣数据集D1:每次随机从D中挑选⼀个样本,将其拷贝放⼊D1,然后再将该样本放回初始数据集D中,使得该样本在下次采样时扔有可能被采到;这个过程重复执⾏m次后,我们就得到了包含m个样本的数据集D1,这就是⾃助采样的结果。显然,D中有⼀部分样本会出现多次,⽽另⼀部分样本不出现。样本在m次采样中始终不被采样的概率是
,取极限得到0.368。即通过采样法,初始数据集D中约有36.8%的样本未出现在采样数据集D1中。于
是我们可将D1⽤作训练集,DD1⽤作测试集。这样,实际评估的模型与期望评估的模型都是⽤m个训练样本,⽽我们扔有1/3的,没在训练集出现的样本⽤
于测试。这样的测试结果也叫"包外估计"。
事实上,包外估计还可⽤来在决策树时辅助剪枝;估计决策树中各节点的后验概率以辅助对零训练样本结点的处理;在基学习器是神经⽹络时,可⽤来辅助早起停⽌以减⼩基学习器是神经⽹络的过拟合风险。
从偏差-⽅差⾓度分析,Bagging主要关注降低⽅差,因此它在不剪枝决策树、神经⽹络等易受样本扰动的学习器上效⽤更为明显。
4、结合策略
学习器结合可能会从三个⽅⾯带来好处:⾸先,从统计的⽅⾯来看,由于学习任务的假设空间往往很⼤,可能有多个假设在训练集上达到同等性能,此时若使⽤单学习器可能因误选⽽导致泛化性能不佳,结合多个学习器则会减少这⼀风险;第⼆,从计算⽅⾯来看,学习算法往往会陷⼊局部极⼩,有的局部极⼩点所对应的泛化性能可能糟糕,⽽通过多次运⾏之后进⾏结合,可降低糟糕局部极⼩点的风险;第三,从表⽰的⽅⾯来看,某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间
中,此时若使⽤单学习器则肯定⽆效,⽽通过结合多个学习器,由于相应的假设空间扩⼤,有可能学得更好的近似。
平均法:对于数值型输出,最常见的结合策略是使⽤平均法。⼀是简单平均法
⒈平均法
,⼆是加权平均法
,T是学习器个数,
是个体学习器
的权重,通常
。加权平均法的权重⼀般是从训练数据中学习⽽得,例如估计出个体学习器的误差,然后令权重⼤⼩与误差⼤⼩成反⽐。现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。尤其是对规模⽐较⼤的集成来说,要学习的权重⽐较多,较容易导致过拟合。因此,实验和应⽤均显⽰出,加权平均法未必⼀定由于简单平均法。⼀般⽽⾔,在个体学习器性能相差较⼤时宜使⽤加权平均法,⽽在
个体学习器性能相近时宜使⽤简单平均法。
投票法:即少数服从多数。聚合每个分类器的预测,然后将得票最多的结果作为预测类型,这种⼤多数投票分类器被称为硬投票分类器。
⒉投票法
学习法:当训练数据很多时,⼀种更为强⼤的结合策略是使⽤“学习法”,即通过另⼀个学习器来进⾏结合。Stacking是学习法的典型3.学习法
代表。这⾥我们把个体学习器称为初级学习器,⽤于结合的学习器称为次级学习器。
stacking是⼀种分层模型集成框架。以两层为例,第⼀层由多个基学习器组成,其输⼊为原始训练集,第⼆层的模型则是以第⼀层基学习器的输出作为训练集进⾏再训练,从⽽得到完整的stacking模型。
五、随机森林
理解了bagging算法,随机森林(Random Forest)就好理解了。它是Bagging算法的进化版。⾸先,RF使⽤了CART决策树作为弱学习器。第⼆,在使⽤决策树的基础上,RF对决策树的建⽴做了改进,对于普通的决策树,我们会在节点上所有的n个样本特征中选择⼀个最优的特征来做决策树的左右⼦树划
matlab学好了有什么用分,但是RF通过随机选择节点上的⼀部分样本特征,这个数字⼩于n,为m,然后在这些随机选择的m个样本特征中,选择⼀个最优的特征来做决策树的左右⼦树划分。这样进⼀步增强了模型的泛化能⼒。   
  如果m=n,则此时RF的CART决策树和普通的CART决策树没有区别。m越⼩,则模型约健壮,当然此时对于训练集的拟合程度会变差。也就是说m越⼩,模型的⽅差会减⼩,但是偏倚会增⼤。在实际案例中,⼀般会通过交叉验证调参获取⼀个合适的m的值。除了上⾯两点,RF和普通的bagging算法没有什么不同。
六、随机森林的推⼴
由于RF在实际应⽤中的良好特性,基于RF,有很多变种算法,应⽤也很⼴泛,不光可以⽤于分类回归,还可以⽤于特征转换,异常点检测等。下⾯对于这些RF家族的算法中有代表性的做⼀个总结。
⒈extra trees
extra trees是RF的⼀个变种, 原理⼏乎和RF⼀模⼀样,仅有区别有:
1) 对于每个决策树的训练集,RF采⽤的是随机采样bootstrap来选择采样集作为每个决策树的训练集,⽽extra trees⼀般不采⽤随机采样,即每个决策树采⽤原始训练集。
2) 在选定了划分特征后,RF的决策树会基于基尼系数,均⽅差之类的原则,选择⼀个最优的特征值划分点,这和传统的决策树相同。但是extra trees⽐较的激进,他会随机的选择⼀个特征值来划分决策树。
  从第⼆点可以看出,由于随机选择了特征值的划分点位,⽽不是最优点位,这样会导致⽣成的决策树的规模⼀般会⼤于RF所⽣成的决策树。也就是说,模型的⽅差相对于RF进⼀步减少,但是偏倚相对于RF进⼀步增⼤。在某些时候,extra trees的泛化能⼒⽐RF更好。
2. Totally Random Trees Embedding
  Totally Random Trees Embedding(以下简称 TRTE)是⼀种⾮监督学习的数据转化⽅法。它将低维的数据集映射到⾼维,从⽽让映射到⾼维的数据更好的运⽤于分类回归模型。我们知道,在⽀持向量机中运⽤了核⽅法来将低维的数据集映射到⾼维,此处TRTE提供了另外⼀种⽅法。
  TRTE在数据转化的过程也使⽤了类似于RF的⽅法,建⽴T个决策树来拟合数据。当决策树建⽴完毕以后,数据集⾥的每个数据在T个决策树中叶⼦节点的位置也定下来了。⽐如我们有3颗决策树,每个决策树有5个叶⼦节点,某个数据特征xx划分到第⼀个决策树的第2个叶⼦节点,第⼆个决策树的第3个叶⼦节点,第三个决策树的第5个叶⼦节点。则x映射后的特征编码为(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15维的⾼维特征。这⾥特征维度之间加上空格是为了强调三颗决策树各⾃的⼦编码。映射到⾼维特
征后,可以继续使⽤监督学习的各种分类回归算法了。
七、随机森林优缺点
作为⼀个可以⾼度并⾏化的算法,RF在⼤数据时⼤有可为。
RF的主要优点有:
⒈训练可以⾼度并⾏化,对于⼤数据的⼤样本训练速度有优势。
2.由于可以随机选择决策树节点划分特征,这样在样本特征维度很⾼的时候,仍然能⾼效的训练模型。
3.在训练后,可以给出各个特征对于输出的重要性。
4.由于采⽤了随机抽样,训练出来的模型的⽅差⼩,泛化能⼒强。
5.相对于Boosting系列的Adaboost和GBDT,RF实现⽐较简单。
6.对部分特征缺失不敏感。
RF的主要缺点:
1.在某些噪⾳⽐较⼤的样本集上,RF模型容易陷⼊过拟合。
2.取值划分⽐较多的特征容易对RF的决策产⽣更⼤的影响,从⽽影响拟合的模型的效果。
⼋、sklearn参数
RF的分类器是RandomForestClassifier,回归器是RandomForestRegressor。RF需要调的参数包括两部分,第⼀部分是Bagging框架的参数,第⼆部分是CART决策树的参数。
n_estimators=10, criterion='gini',
max_depth=None,min_samples_split=2,
min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features='auto', max_leaf_nodes=None,
min_impurity_split=1e-07,bootstrap=True,
oob_score=False, n_jobs=1,
random_state=None, verbose=0,
warm_start=False, class_weight=None)
Bagging框架的参数解释:
n_ estimators:弱学习器的最⼤迭代次数,或者说最⼤的弱学习器的个数。⼀般来说n_estimators太⼩,容易过拟合,太⼤⼜容易⽋ n_
拟合,⼀般选择⼀个适中的数值。默认是100.实际调参的过程中,我们常常将n_estimators和下⾯介绍的参数learning_rate⼀起考虑。oob_score:即是否采⽤袋外样本来评估模型的好坏。默认设置False。个⼈推荐设置为True,因为袋外分数反应了⼀个模型拟合后的泛化能⼒。criterion:即CART决策树做划分时对特征的评价标准。分类模型和回归模型的损失函数不⼀样。分类RF对应的CART分类树默认是基尼系数,另⼀个可选择的标准是信息增益。回归RF对应的CART回归树默认是均⽅差mse,另⼀个可以选择的标准时绝对值mae。⼀般来说选择默认的标准就已经很好了。
RF重要的框架参数⽐较少,主要关注的是n_estimators,即RF最⼤的决策树个数。
RF决策树参数
RF的决策树参数,它要调参的参数基本和GBDT相同,如下:
max_features:RF划分时考虑的最⼤特征,可以使⽤很多种类型的值,默认是"auto",意味着划分时最多考虑
个特征;如果是"log2"意味着划分时最多考虑
个特征;如果是"sqrt"或者"auto"意味着划分时最多可考虑
个特征。如果是整数,代表⽼驴的特征绝对数。如果是浮点数,代表⽼驴特征百分⽐,即考虑取整后的特征数。其中N为样本总特征数。⼀般我们默认的"auto"就可以了,如果特征数⾮常多,我们可以灵活使⽤刚才描述的其他取值来控制划分时考虑的最⼤特征数,
以控制决策树的⽣成时间。
max_depth: 决策树最⼤深度。默认可以不输⼊,如果不输⼊的话,决策树在建⽴⼦树的时候不会限制⼦树的深度。⼀般来说,数据max_depth
少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最⼤深度,具体的取值取决于数据的分
min_samples_split: 内部节点再划分所需最⼩样本数。这个值限制了⼦树继续划分的条件,如布。常⽤的可以取值10-100之间。 min_samples_split
果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进⾏划分。 默认是2.如果样本量不⼤,不需要管这个
min_samples_leaf: 叶⼦节点最少样本数。这个值限制了叶⼦节点最少的样本值。如果样本量数量级⾮常⼤,则推荐增⼤这个值。 min_samples_leaf
数,如果某叶⼦节点数⽬⼩于样本数,则会和兄弟节点⼀起被剪枝。 默认是1,可以输⼊最少的样本数的整数,或者最少样本数占样本总数的百分⽐。如果样本量不⼤,不需要管这个值。如果样本量数量级⾮常⼤,则推荐增⼤这个值。
min_weight_fraction_leaf:叶⼦节点最⼩的样本权重和。这个值限制了叶⼦节点所有样本权重和的最⼩值,如果⼩于这个值,则min_weight_fraction_leaf
会和兄弟节点⼀起被剪枝。 默认是0,就是不考虑权重问题。⼀般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别
max_leaf_nodes: 最⼤叶⼦节点数。通过限制最⼤叶⼦节点数,可以偏差很⼤,就会引⼊样本权重,这时我们就要注意这个值了。 max_leaf_nodes
防⽌过拟合,默认是"None”,即不限制最⼤的叶⼦节点数。如果加了限制,算法会建⽴在最⼤叶⼦节
点数内最优的决策树。如果特
min_impurity_split:征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。 min_impurity_split:节点划分最⼩不纯度。这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均⽅差)⼩于这个阈值,则该节点不再⽣成⼦节点。即为叶⼦节点 。⼀般不推荐改动默认值1e-7。
上⾯决策树参数中最重要的包括最⼤特征数max_features, 最⼤深度max_depth, 内部节点再划分所需最⼩样本数min_samples_split 和叶⼦节点最少样本数min_samples_leaf。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。