参考博客 Adaboost 算法的原理与推导
参考文献:基于RF_AdaBoost 模型的血液种属鉴别算法
Adaboost的原理
AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert
Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
Bagging和Boosting的概念与区别
在集成学习中,主要分为bagging算法和boosting算法。
Bagging的算法:利用不同的训练集产生不同的模型。
Boosting的算法:自动调整样本和分类器的权重以实现提高分类效果的目标。
Bagging的算法过程如下:
- 1.从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
- 2.对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
- 3.对于分类问题:由投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)
Boosting的算法过程如下:
- 1.对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。
- 2.进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)
Random Forest随机森林
Bagging + 决策树 = 随机森林
随机性的引入,使得随机森林有很好的抗噪声能力
- 从原始训练集中使用Bootstraping方法随机有放回采样选出m个样本,共进行n_tree次采样,生成n_tree个训练集
- 对于n_tree个训练集,我们分别训练n_tree个决策树模型
- 对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/基尼指数选择最好的特征进行分裂
- 每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
- 将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测值的均值决定最终预测结果
Rf_Adaboost 算法原理
RF 算法由Leo Breiman 等于2001 年提出,具有稳定性强、分类准确度高的优点,其训练集在Bootstrap 重采样的过程下随机产生,且内部决策树选取属性时也是随机的. Freund 等对Boosting算法进行改良,使算法能够自适应调整样本权重和弱分类器级联权重,形成性能优良的AdaBoost算法.该算法采用加权样本训练下一个弱分类器,同时根据每次迭代中的预测误差调整弱分类器权重,从而将弱分类器按照权重整合成符合实际需求的强分类器。
细推之前,我觉得就是基于决策树的基础上,综合了Bagging和Boosting的两种想法的优点,并且有种神经网络雏形的感觉。
模型对样本进行分类预测的详细流程
-
初始化样本权重u_1,i,m为训练集包含的样本数目
-
弱分类器训练:根据RF 投票决策策略,第t 个分类器的分类结果Gt( x) 为
-
预测误差计算:根据RF 弱分类器的预测误差率对样本权重进行调整,使上一轮误分类样本在下一轮迭代中所占比重更大.因此计算第t个RF弱分类器对于序列G_t(x)的预测误差率e_t
-
弱分类器组合:
-
样本权重调整:
-
强分类函数集成: