随机森林算法梳理
1.集成学习(ensemble learning):通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based
learning)等。集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。
-串行生成序列化方法:Boosting
-生成并行化方法:随机森林
2.个体学习器(individual learner):通常由一个现有的学习算法从训练数据产生,例如:C4.5决策树算法,BP神经网络算法;
-基学习器(based learner):同质集成中的个体学习器,所谓“同质”(homogeneous)是指集成中只包含同种类型的个体学习器。相对应的算法是“基学习算法”(based-learning algorithm)
-组件学习器(component learner):异质集成中的个体学习器,所谓“异质”(heterogenous)是指集成中包含不同类型的个体学习器,异质集成中的个体学习器由不同的学习算法生成。也可以直接叫个体学习器。
3.Boosting
是一种将弱学习器提升为强学习器的算法。
这族算法的工作机制:
先从初始训练集训练出一个基学习器,再根据基学习器算法的表现对训练样本的分布进行调整,使得先前基学习器做错的训练样本在后续得到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复,直到基学习器达到事先设置的值T,最终将这个基学习器进行加权结合。
l AdaBoost
4.Bagging
基于自助采样法(bootstrap sampling)—有放回的采样。
算法流程:给予每个样本集训练出一个基学习器,再将这些基学习器进行结合。
对分类任务使用简单投票法;对回归任务进行简单平均,票数相同随机选择。
Bagging的优点:
(1)训练一个bagging集成和直接使用基学习算法训练一个基学习器的复杂度同阶,bagging是一个很高效地集成学习算法。
(2)标准的Adaboost只适合二分类问题,Bagging能不经修改的运用于分类和回归;
(3)每个基学习器只是用来初始训练集的约63.2%样本,剩下的36.8%可以用来进行包外估计,包外估计可以用来辅助剪枝(决策树),也以用来辅助早期停止以减少过拟合风险(神经网络)。
4.随机森林RF
l 思想:以决策树为基学习器+Bagging集成+随机属性选择
l 优点:简单、容易实现、计算开销小、泛化性能可通过个体学习器之间的差异程度的增加而进一步提升。
l 缺点:初始性能较差,特别是集成中只包含一个基学习器时,因为引入属性搅动,个体学习器的性能往往有所降低。
l 推广:
①extra trees
②Random Trees Embedding(TRTE)
③Isolate Forest(IForest)
5.结合策略
(1)平均法
l 简单平均
l 加权平均
加权平均可认为是集成学习的基本出发点,对于不同的基学习器,不同的集成学习方法可以通过不同的方式来确定加权平均法中基学习器的权重,加权平均法中的权重一般是训练样本学习而得,现实任务中的训练样本通常不充分或充满噪声,使得学习处的权重并不可靠,在样本规模较大的集成中,需要学习的权重加多,较容易造成过拟合。一般而言,个体学习器在性能相差较大时宜使用加权平均法,个体学习器在性能相近时宜使用简单平均法。
(2)投票法
l 绝大多数投票法:某标记得票过半数,则预测为该标记,否则拒绝。
l 相对多数投票法:预测为得票最多的标记。
l 加权投票法
注意:不同类型的个体学习器可能会产生不同类型的标记值,不同类型的标记值不能混用。不同的基学习器产生的类概率值不能直接进行比较,需要将类概率转换为类标记输出再进行投票。
(3)学习法
当训练样本较多时,用另一个学习器来进行结合。把个体学习器称为初级学习器,把用于结合的学习器称为次级学习器或者元学习器。
l Stacking
有研究表明,将初级学习器的输出类概率作为次级学习器的输入属性时,采用多响应回归(MLR)作为次级学习算法较好。
6.sklearn参数
(1)sklearn中决策树的参数:
l criterion: ”gini” or “entropy”(default=”gini”)是计算属性的gini(基尼不纯度)还是entropy(信息增益),来选择最合适的节点。
l splitter: ”best” or “random”(default=”best”)随机选择属性还是选择不纯度最大的属性,建议用默认。
l 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.
l max_depth: (default=None)设置树的最大深度,默认为None,这样建树时,会使每一个叶节点只有一个类别,或是达到min_samples_split。
l min_samples_split:根据属性划分节点时,每个划分最少的样本数。
l min_samples_leaf:叶子节点最少的样本数。
l max_leaf_nodes: (default=None)叶子树的最大样本数。
l min_weight_fraction_leaf: (default=0) 叶子节点所需要的最小权值
l verbose:(default=0) 是否显示任务进程
(2)随机森林特有的参数:
l n_estimators=10:决策树的个数,越多越好,但是性能就会越差。
l bootstrap=True:是否有放回的采样。
l oob_score=False:oob(out
of band,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据。
l n_jobs=1:并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,因为boosting的每次迭代之间有影响,所以很难进行并行化),因为可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job。
l warm_start=False:热启动,决定是否使用上次调用该类的结果然后增加新的。
l class_weight=None:各个label的权重。
(3)进行预测可以有几种形式:
l predict_proba(x):给出带有概率值的结果。每个点在所有label的概率和为1.
l predict(x):直接给出预测结果。内部还是调用的predict_proba(),根据概率的结果看哪个类型的预测值最高就是哪个类型。
predict_log_proba(x):和predict_proba基本上一样,只是把结果给做了log()处理。