随机森林算法梳理
1.集成学习的概念
集成学习通过构建并结合多个学习器来完成学习任务,有时也被成为多分类器系统,基于委员会的学习。集成学习是通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化的性能。如何去提高集成学习的性能,最好是个体学习器应该“好而不同”,即个体学习器要有一定准确性,不能太坏,也不能太好。
否则集成可能导致结果变好,不变,或者变坏。
2.个体学习的概念
个体学习器通过由一个现有的学习算法从训练数据产生,例如决策树,神经网络等,此时集成中只包含同种类型的个体学习器。比如说“决策树集成”全是决策树,“神经网络集成”全是神经网络,这样的集成是“同质”的。同质中的个体学习器称“基学习器”,相应的学习算法叫“基学习算法”。
3.boosting 和 bagging
目前集成学习的方法可分为两大类:
boosting 个体学习器存在强依赖关系,必须串行生成的序列化方法。
boosting是将一族弱学习器提升为强学习的算法,这族算法的机制类似:先从初始训练集训练训练一个基学习器,再根据学习器的表现对训练样本分步进行调整,使得先前的即学习器做错的训练样本再后续的样本得到更多的关注,然后基于调整后的样本分布再训练下一个基学习器,如此重复,知道学习器数目达到T次。
代表是adaBoots算法,简单理解就是基学习器的线性组合。
bagging 个体学习器之间没有强依赖的关系,可同时生成的并行化的方法。
bagging的实现是采样出T个含m个训练集的采样集,然后基于每个采样集训练出一个基学习器,再将这些学习器结合。如果是分类任务则使用投票法,如果是回归问题就采用简单平均法。
4.结合策略(平均法,投票法,学习法)
简单平均法则是wi = 1/T
投票法
绝对多数投票法,某标记超过半数,则预测为改标记,否则拒绝预测。
相对多数投票法,预测为最多的标记,如果平票,则随机一个。
加权投票法,再分类器中添加权重,再做相对多数投票法。
学习法
通过另一个学习器来来进行结合
5.随机森林的思想
RF在以决策树为基础器构建bagging集成的基础上,既已不在决策树的训练过程中引入了随机属性的选择。传统的决策树在选择划分属性是在当前结合的属性集合中选择一个最优的,而在RF中,对于基决策树的每个节点,先从该节点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优的用户划分。这里k控制了随机性的引入程度。
6.随机森林的推广
Extremely Randomized Trees
Isolation Forest
7.随机森林的优缺点
优点:随着个体学习器的增加,RF通常会收敛到更低的泛化唔错。随机森林的效果常优于bagging,因为bagging是确定性的决策树,而在划分属性属性时要对节点的所有属性进行考察,而RF使用“随机性”,只考虑一个属性的子集。
缺点:起始性能较差,特别是在集成中只包含一个基学习器时候。
8.sklearn参数
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的权重。
参数参考:https://blog.csdn.net/qq_29750461/article/details/81516008
9.应用场景
分类
回归