SDU项目实训记录4.2——其他模型(集成学习)
完成分配工作后,研究了一下同小组partner负责的部分,找了几种可适用的模型
一、随机森林
1、原理
随机森林在bagging和决策树的基础上实现,在这二者之上进行了改进。随机森林使用的弱学习器为决策树,各个决策树之间没有依赖关系,可以并行生成。普通的决策树在节点上所有的n个样本特征中选择一个最优的来进行决策树的分割,而随机森林则是选择节点上的一部分特征(特征个数小于n,选择的特征个数越少,则模型越为健壮)。然后在随机选择的部分特征中选择一个最优的特征来进行树的分割(双层选择),这样可以进一步增强模型的泛化能力。
2、流程
输入:样本集+弱分类器迭代次数T
输出:强分类器
- 对于t=1,2…,T:
- 对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集
- 用不同的采样集分别训练决策树模型,在训练决策树模型的节点的时候,在节点上所有的样本特征中选择部分样本特征,然后在部分特征中选择一个最优的特征分割决策树。
- 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
3、影响随机森林性能的参数
随机森林模型的优点之一就是其基本不需要调参,但是为了应对在实际情况中遇到难以解决的问题,有必要对影响模型性能的因素有一定的了解。
影响随机森林模型性能的因素主要有三种,分别为:
(1)决策树的个数: 因为存在随机因素,所以决策树的个数越多预测结果越稳定,因此在允许范围之内,决策树的数目越大越好。
(2)递归次数(即决策树的深度): 一般来说,数据少或者特征少的时候可以不必限制此值的大小。如果模型样本量多,特征也多的情况下,则需要在一定程度上限制这个最大深度,具体的取值取决于数据的分布。深度越小,计算量越小,速度越快。
(3)特征属性的个数: 减小特征属性的个数不仅会提升算法速度,也有可能降低测试误差;通常使用的值可以是全部特征值个数的开方,或者取其对数值,也可以逐一尝试特征属性个数的值,直到找到比较理想的数字。
二、Gradient Boosting
1、原理
串行地生成多个弱学习器,每个弱学习器的目标是拟合先前累加模型损失的负梯度, 使得加上该弱学习器后的累加模型损失往先前累加模型损失的负梯度方向减少。因为是往负梯度方向,所以整体模型的损失降低的最快,因此每个弱学习器的训练目标就是拟合先前累加模型损失的负梯度
2、流程
三、AdaBoost
1、原理
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
2、流程
该算法其实是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力。整个过程如下所示:
- 先通过对N个训练样本的学习得到第一个弱分类器;
- 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器;
- 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
- 最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。
由Adaboost算法的描述过程可知,该算法在实现过程中根据训练集的大小初始化样本权值,使其满足均匀分布,在后续操作中通过公式来改变和规范化算法迭代后样本的权值。样本被错误分类导致权值增大,反之权值相应减小,这表示被错分的训练样本集包括一个更高的权重。这就会使在下轮时训练样本集更注重于难以识别的样本,针对被错分样本的进一步学习来得到下一个弱分类器,直到样本被正确分类。在达到规定的迭代次数或者预期的误差率时,则强分类器构建完成。
Adaboost算法中有两种权重,一种是数据的权重,另一种是弱分类器的权重。其中,数据的权重主要用于弱分类器寻找其分类误差最小的决策点,找到之后用这个最小误差计算出该弱分类器的权重(发言权),分类器权重越大说明该弱分类器在最终决策时拥有更大的发言权。
3、优势
Aadboost 算法系统具有较高的检测速率,且不易出现过适应现象。但是该算法在实现过程中为取得更高的检测精度则需要较大的训练样本集,在每次迭代过程中,训练一个弱分类器则对应该样本集中的每一个样本,每个样本具有很多特征,因此从庞大的特征中训练得到最优弱分类器的计算量增大。