个体学习器通常由一个现有的学习算法训练数据所产生,例如逻辑回归、决策树等。
通过训练若干个个体学习器,通过一定的结合策略,最终形成一个强学习器:
一般常说的集成学习的方法都是指的同质个体学习器,同质个体学习器使用最多的模型是CART决策树和神经网络。
同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类:
从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视,然后基于调整权重后的训练集来训练弱学习器2,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
对于数值型输出,最常见的结合策略是使用平均法。
●简单平均法
●加权平均法
加权平均法是简单平均法的特例,被广泛运用于集成学习。但加权平均算法也存在一定的缺陷,因为加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。尤其当集成规模较大时,要学习的权重较多,就容易导致过拟合。
如何选择平均法?
一般而言,在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。
对于分类问题,最常见的结合策略就是投票法。
●绝对多数投票法,提供了“拒绝预测”的选项
●相对多数投票法
●加权投票法
●一票否决
●贝叶斯投票机制
需要注意的是,若基学习器不同,其类概率值不能直接进行比较,通常需要将其转化为类标记输出,然后在投票。
当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。Stacking是学习法的典型代表。我们将个体学习器称为初级学习器,结合学习器称为次级学习器。
将初级学习器输出的类别概率输入次级学习器作为属性,用多响应线性回归(MLR)作为次级学习算法效果较好,在MLR中使用不同属性集更佳。
随机森林是bagging的进阶版,其在bagging的样本随机采样基础上,又加上了属性的随机选择。
在随机森林中,先从树结点的属性集合中随机选择一个包含部分属性的子集,然后再从这个子集中选择一个最优属性用于划分。
由于随机森林在实际应用中的良好特性,基于随机森林,衍生出变种算法,其衍生算法可以用于分类回归,特征转换,异常点检测等。总结衍生算法如下:
extra trees一般不采用随机采样,每个决策树采用原始训练集。extra trees在选择特征划分的时候随机的选择一个特征值来划分决策树,而不是选择最优特征划分。但由于其生成的决策树的规模一般会大于随机森林所生成的决策树,所以有时extra trees的泛化能力比随机森林更好。
TRTE在数据转化的过程也使用了类似于RF的方法,建立T个决策树来拟合数据。当决策树建立完毕以后,数据集里的每个数据在T个决策树中叶子节点的位置也定下来了。然后用一种非监督学习的数据转化方法,将属性位于不同决策树的节点位置映射到高维,从而让映射到高维的数据更好的运用于分类回归模型。
一种异常点检测的方法。
对于在T个决策树的样本集,IForest也会对训练集进行随机采样,但是采样个数远远小于训练集个数,因为其目的是异常点检测,只需要部分的样本一般就可以将异常点区别出来了。
对于每一个决策树的建立, IForest采用随机选择一个划分特征,对划分特征随机选择一个划分阈值。另外,IForest一般会选择一个比较小的最大决策树深度max_depth,也是因为异常点检测一般不需要这么大规模的决策树。
1、自带out-of-bag (oob)错误评估功能。每个基学习器只使用了训练集中约63.2%的样本,剩下约36.8%的样本可用做验证集来对其泛化性能进行‘包外估计’。所以不用对其进行交叉验证或者使用一个独立的测试集获得无偏估计。
2、不需要太多的数据预处理工作,实现比较简单,且目前在很多现实任务中展现出强大的性能
3、隐含地创造了多个联合特征,并能够解决非线性问题。
4、和决策树模型,GBDT模型相比,随机森林模型不容易过拟合。
5、在创建随机森林的时候,对generlization error使用的是无偏估计,模型泛化能力强,且集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。
6、可以并行化训练树,训练速度快
7、 对于不平衡的数据集来说,它可以通过调整class_weight参数来平衡误差。
8、可以处理高维数据集,因为其特征子集是随机选择的
1、随机森林在某些噪音较大的分类或回归问题上会发生过拟合现象
2、对于取值划分较多的属性容易对随机森林的决策产生更大的影响,从而影响拟合的模型的效果。
3、不适合小样本,只适合大样本。
class sklearn.ensemble.RandomForestClassifier
(n_estimators=10, crite-rion=’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, bootstrap=True,
oob_score=False, n_jobs=1, ran-dom_state=None, verbose=0,
warm_start=False, class_weight=None)
n_estimators :是森林里树的数量,通常数量越大,效果越好,但是计算时间也会随之增加。
此外要注意,当树的数量超过一个临界值之后,算法的效果并不会很显著地变好。
criterion: ”gini” or “entropy”(default=”gini”)是计算属性的gini
(基尼不纯度)还是entropy(信息增益),来选择最合适的节点。
max_depth: (default=None)设置树的最大深度,默认为None,这样建树时,
会使每一个叶节点只有一个类别,或是达到min_samples_split。
min_samples_split:根据属性划分节点时,每个划分最少的样本数。
min_samples_leaf:叶子节点最少的样本数。
min_weight_fraction_leaf: (default=0) 叶子节点所需要的最小权值
max_features: 是分割节点时考虑的特征的随机子集的大小。 这个值越低,
方差减小得越多,但是偏差的增大也越多。
当为整数时,即最大特征数;当为小数时,训练集特征数*小数;
if “auto”, then max_features=sqrt(n_features).
If “sqrt”, thenmax_features=sqrt(n_features).
If “log2”, thenmax_features=log2(n_features).
If None, then max_features=n_features.
max_leaf_nodes: (default=None)叶子树的最大样本数。
bootstrap=True:是否有放回的采样。
oob_score=False:oob(out of band,带外)数据,即:
在某次决策树训练中没有被bootstrap选中的数据。
多单个模型的参数训练,我们知道可以用cross validation(cv)来进行,
但是特别消耗时间,而且对于随机森林这种情况也没有大的必要,
所以就用这个数据对决策树模型进行验证,
算是一个简单的交叉验证。性能消耗小,但是效果不错。
n_jobs=1:并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,
因为boosting的每次迭代之间有影响,所以很难进行并行化),
因为可以并行从而提高性能。
1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job。
random_state : int, RandomState instance or None, optional (default=None) 整数,
RandomState实例,或者为None,可选(默认值为None)
verbose : int, optional (default=0) 整数,可选的(默认值为0)
warm_start=False:热启动,决定是否使用上次调用该类的结果然后增加新的。
class_weight=None:各个label的权重。
参考Sklearn库中的随机森林参数
随机森林用于分类回归,特征转换,异常点检测等,适用于数据维数相对较低(几十维),且需要达到一定准确率的场景。
随机森林在多数数据集上都有不错的表现,相对来说,出现预测效果很差的情况较少。可以作为模型的baseline作为参考。
https://www.cnblogs.com/pinard/p/6131423.html
https://blog.csdn.net/mengdiefeixumyname/article/details/85806894