文章目录
随机森林和决策森林都是数据集成学习(Ensemble Learning)中的算法,而在集成学习中,主要分为 bagging 算法和 boosting 算法。
本文部分原理及实例来自《统计学习方法》By 李航
Bagging (套袋法)
Bagging的算法过程如下:
1.从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
2.对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
3.对于分类问题:由投票表决产生分类结果;
4.对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)
Boosting(提升法)
Boosting的算法过程如下:
1.对于训练集中的每个样本建立权值 w i wi wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。
2.进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)
Bagging/Boosting的主要区别
1.样本选择:Bagging采用的是Bootstrap随机有放回抽样;而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。
2.样本权重:Bagging使用的是均匀取样,每个样本权重相等;Boosting根据错误率调整样本权重,错误率越大的样本权重越大。
3.预测函数:Bagging所有的预测函数的权重相等;Boosting中误差越小的预测函数其权重越大。
4.并行计算:Bagging各个预测函数可以并行生成;Boosting各个预测函数必须按顺序迭代生成。
下面是将决策树与这些算法框架进行结合所得到的新的算法:
1)Bagging + 决策树 = 随机森林
2)AdaBoost + 决策树 = 提升树
3)Gradient Boosting + 决策树 = GBDT
1.随机森林
随机森林里的随机包含的意思是:
样本随机
特征随机
参数随机
模型随机(ID3 ,C4.5)
随机森林的构建过程大致如下:
1.从原始训练集中使用Bootstraping方法随机有放回采样选出N个样本,共进行K次采样,生成K个训练集
2.对于K个训练集,我们分别训练K个决策树模型
3.对于单个决策树模型,假设训练样本特征的个数为m,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂;
4.每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
5.将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果
算法 API
sklearn.ensemble.RandomForestClassifier(n_estimators=100, criterion='gini', max_depth=None, min_samples_split=2, )
2.极限森林
极限树/极端随机树里的随机包含的意思是:
特征随机
参数随机
模型随机(ID3 ,C4.5)
分裂随机
极限树与随机森林的主要区别:
-
RandomForest应用的是Bagging模型;ExtraTree使用的所有的样本,只是特征是随机选取的,因为分裂是随机的,所以在某种程度上比随机森林得到的结果更加好;
-
随机森林是在一个随机子集内得到最佳分叉属性;而ExtraTree是完全随机的得到分叉值,从而实现对决策树进行分叉的。
算法 API
sklearn.ensemble.ExtraTreesClassifier(n_estimators=100, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1)
3.Adaboost 算法
基本流程
先假设给定一个二分类的训练数据集:
T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) T={(x_1,y_1),(x_2,y_2),...,(x_N,y_N)} T=(x1,y1),(x2,y2),...,(xN,yN)
- 生成一个初始化的训练集数据均匀分布的权值: D 1 = ( w 11 , . . . . , w 1 i , . . . . , w 1 N ) D_1=(w_{11},....,w_{1i},....,w_{1N} ) D1=(w11,....,w1i,....,w1N) w 1 i = 1 N w_{1i}= \frac{1}{N} w1i=N1 其中 i = 1 , 2 , 3... , N i=1,2,3...,N i=1,2,3...,N
- 对于 m = 1 , 2 , 3... , M m=1,2,3...,M m=1,2,3...,M
a)使用第m个权值分布 D m D_m Dm的训练数据集学习,得到基分类器: G m ( x ) : χ → { − 1 , + 1 } G_m(x): \chi \rightarrow \lbrace-1,+1\rbrace Gm(x):χ→{ −1,+1}
b)计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率: e m = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m=\sum_{i=1}^{N} {P(G_m(x_i)\neq y_i)}=\sum_{i=1}^{N} {w_{mi}I(G_m(x_i)\neq y_i)} em=i=1∑NP(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi)
c)计算 G m ( x ) G_m(x) Gm(x)的系数
α = 1 2 l o g 1 − e m e m \alpha=\frac{1}{2}log\frac{1-e_m}{e_m} α=21logem1−em
d)更新训练数据集的权值分布: D m + 1 = ( w m + 1 , 1 , . . . . , w m + 1 , i , . . . . , w m + 1 , N ) D_{m+1}=(w_{m+1,1},....,w_{m+1,i},....,w_{m+1,N} ) Dm+1=(wm+1,1,....,wm+1,i,...