12-集成学习概述
集成学习是机器学习中的一种思想它通过多个模型的组合形成一个精度更高的模型参与组合的模型称为弱学习器基学习器。训练时使用训练集依次训练出这些弱学习器对未知的样本进行预测时使用这些弱学习器联合进行预测。1. 思想1.1 Bagging 思想有放回抽样每个弱学习器训练集应该有交集防止“有偏”这样才有意义平权投票多数表决进行预测弱学习器并行训练如随机森林1.2 Boosting 思想不抽样全部样本参与训练加权投票串行每个弱学习器重点关注前一个学习器不足的地方进行训练前一个预测对了这一个权重就降低反之提高每增加一个弱学习器整体能力就会得到提升。如Adaboost, GBDT, XGBoost, LightGBM2. 随机森林基于Bagging思想每个弱学习器为1个决策树默认Cart树有放回地产生训练样本随机挑选n个特征nN平权投票多数表决2.1 APIfrom sklearn.ensembel import RandomForestClassifier参数解释n_estimators森林决策树数量默认 100越大效果越好但训练 / 预测速度变慢达到临界值后提升有限。max_depth树最大深度None 则无限生长数值越小约束越强抑制过拟合。min_samples_split内部节点再划分所需最小样本数默认 2少于该数不再分裂。min_samples_leaf叶节点最少样本数默认 1值越大树越简单。max_leaf_nodes限制叶子节点总数替代 max_depth 控制复杂度。max_features每棵树分裂时可选特征数量sqrt默认分类√总特征log2log2 总特征小数占总特征比例整数直接取对应个数特征。bootstrap是否有放回抽样构建每棵树样本默认 TrueFalse 则整份数据集训练每棵树。oob_score是否计算袋外样本得分默认 False开启可不用交叉验证评估模型。criterion分裂评判标准gini默认基尼系数entropy信息熵log_loss对数损失。n_jobs并行线程数-1 代表使用全部 CPU 核心加速训练预测。random_state随机种子固定后每次训练结果可复现。class_weight处理正负样本不均衡balanced/balanced_subsample自动调整类别权重。min_weight_fraction_leaf叶节点最小权重占比带样本权重时使用。max_samplesbootstrapTrue 时每棵树抽取样本比例0~1 之间。3. AdaboostAdaptive Boosting自适应提升基于 Boosting思想实现的一种集成学习算法核心思想是通过逐步提高那些被前一步分类错误的样本的权重来训练一个强分类器。3.1 算法推导1. 初始化训练数据权重相等训练第 1 个学习器如果有 100 个样本则每个样本的初始化权重为1/100根据预测结果找一个错误率最小的分裂点计算、更新样本权重、模型权重2. 根据新权重的样本集 训练第 2 个学习器根据预测结果找一个错误率最小的分裂点计算、更新样本权重、模型权重3. 迭代训练在前一个学习器的基础上根据新的样本权重训练当前学习器直到训练出 m 个弱学习器4. m 个弱学习器集成预测公式α 为模型的权重输出结果大于 0 则归为正类小于 0 则归为负类。5 模型权重计算公式为模型权重表示第 t 个弱学习器的错误率6. 样本权重计算公式其中为归一化值(所有样本权重总和) 为样本权重为模型权重例已知训练数据见下面表格假设弱分类器由 x 产生预测结果使该分类器在训练数据集上的分类误差率最低试用 Adaboost 算法学习一个强分类器。序号12345678910x0123456789y111-1-1-1111-11. 初始化10个样本的权重w均为0.1序号12345678910x特征0123456789y标签111-1-1-1111-1w权重0.10.10.10.10.10.10.10.10.10.12. 构建第1个弱学习器1寻找最优分裂点约定时时对x排序取相邻点的均值分裂点为s{0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5}当s0.5时x0.51个分类正确0个分类错误x0.54个分类正确5个分类错误。故整体错误率为当s1.5时x1.50个分类错误x1.54个分类错误。错误率0.4当s2.5时x2.50个分类错误x2.53个分类错误。错误率0.3当s3.5时x3.51个分类错误x3.53个分类错误。错误率0.4以此类推……最终选择错误率最低的分裂点s2.5错误率为0.32计算模型权重3更新样本权重分类正确的样本序号为{1,2,3,4,5,6,10}使用正确样本变化权重系数分类错误的样本序号为{7,8,9}使用错误样本变化权重系数样本{1,2,3,4,5,6,10}的权重为样本{7,8,9}的权重为归一化样本{1,2,3,4,5,6,10}的权重更新为样本{7,8,9}的权重更新为序号12345678910x特征0123456789y标签111-1-1-1111-1w权重0.0710.0710.0710.0710.0710.0710.1670.1670.1670.0713. 继续构建第2个基学习器重复上述步骤4. 继续构建第3个基学习器重复上述步骤5. 最终强学习器当x3时最终归为-1即。4. GBDT4.1 BDTBoosting Decision Tree提升决策树Boosting思想前向分步训练每一棵新树用来拟合上一轮模型的残差不断修正预测误差最终所有树结果累加得到预测值残差真实值-预测值回归问题使用平方损失直接拟合残差已知特征x目标y连续型即回归问题。建模思想最终预测为F(x)初始化计算残差GBDT这一步是计算负梯度用决策树集合残差特征x目标寻找最优分裂点平方损失最小得到第1轮结果预测值再次计算残差再次用决策树集合残差特征x目标寻找最优分裂点平方损失最小得到第2轮结果预测值以此类推迭代结果F(x)不断逼近真实值y4.2 GBDTGradient Boosting Decision Tree梯度提升决策树属于Boosting思想基学习器一般选用CART 回归树依次训练多棵决策树每一棵树拟合前一轮模型损失函数的负梯度伪残差不断修正误差最终预测结果 所有树预测值累加伪残差损失函数负梯度损失函数求导后的负值目标就是求损失函数最小值所以令梯度0损失函数为平方损失时损失函数负梯度等价于真实残差等价于BDT损失函数为其他损失时它只是残差的近似并非标签与预测值之差因此称为伪残差串行训练不能并行生成树XGB、LightGBM 做了优化对异常值较敏感输出是连续值做分类时需要配合 sigmoid/logistic 变换from sklearn.ensemble import GradientBoostingClassifier estimator GradientBoostingClassifier()5. XGBoostXGBoostExtreme Gradient Boosting极端梯度提升是GBDT梯度提升决策树的工程优化升级版属于 Boosting 集成学习算法串行训练一组决策树每一棵树学习前面所有树的预测残差最终累加所有树输出得到预测结果广泛用于风控、推荐、数据挖掘竞赛。5.1 核心优势数学层面损失函数采用二阶泰勒展开同时使用一阶、二阶梯度信息优化精度高于仅使用一阶导数的原生 GBDT内置正则化目标函数加入叶子数量惩罚与叶子权重 L2 正则天然抑制过拟合缺失值自动处理训练阶段自动学习缺失样本最优分支方向减少特征预处理工作量并行加速能力树依旧串行生成但单棵树寻找最优分割点时支持多特征并行计算工程优化预排序、分块存储、缓存访问优化训练速度更快支持行采样、列采样进一步降低过拟合。5.2 建构思想1. 基础框架Boosting 串行迭代预测值由多棵决策树累加得到其中为前 t-1 棵树总和为第 t 棵新增树。实际训练必须加入学习率学习率取值(0,1]也叫收缩系数缩小单棵树的更新幅度避免单棵树修正过猛给后续树留下拟合空间显著缓解过拟合。2. 损失函数设计其中样本的预测损失树复杂度正则项叶子权重 L2 正则系数新增叶子节点惩罚系数当前第 t 棵树拥有叶子节点总数第 j 个叶子节点的输出分值叶子权重。设置越大想要分裂就必须获得更大的收益更容易剪枝限制树生长抑制过拟合。L2 正则分母项平滑最优叶子权重降低模型对极端梯度样本的敏感程度。叶子内所有样本一阶梯度之和叶子内所有样本二阶梯度之和。3. 二阶泰勒近似简化损失将损失函数做二阶泰勒展开消去常数项后仅依靠每个样本的一阶梯度、二阶梯度进行优化通用适配任意可导损失函数。二阶泰勒展开公式4. 树分裂策略遍历特征候选分割点计算分裂增益其中左子树所有样本一阶梯度之和左子树所有样本二阶梯度之和右子树所有样本一阶梯度之和右子树所有样本二阶梯度之和Gain 分裂之后模型损失下降量 − 分裂带来的复杂度惩罚 1/2 [左代价右代价-父节点代价] - 每多生成1个叶子节点的固定惩罚增益 0 才进行分裂增益≤0 停止分裂控制树复杂度。5. 迭代终止条件达到预设最大树数量 / 新增树带来的增益低于阈值 / 验证集效果不再提升终止训练。5.3 数学计算举例例特征x、标签y回归任务MSE 损失x0123456789y5.565.575.916.446.587.058.098.338.809.00损失函数一阶导数梯度二阶导数海森初始预测设定超参第1棵树t1x0123456789y5.565.575.916.446.587.058.098.338.809.000000000000-5.56-5.57-5.91-6.44-6.58-7.05-8.09-8.33-8.8-91111111111候选分割点{0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5}逐个计算Gain演示分割阈值 4.5x4.5左x4.5右左集合Lx{0, 1, 2, 3, 4}右集合Rx{5, 6, 7, 8, 9}带入Gain不能分裂。经计算该环节中所有候选点都Gain0均不分裂第1颗树仅1个叶子节点即为根节点j1。叶子内所有样本一阶、二阶梯度之和叶子最优权重更新预测值x0123456789y5.565.575.916.446.587.058.098.338.809.000000000000-5.56-5.57-5.91-6.44-6.58-7.05-8.09-8.33-8.8-911111111116.486.486.486.486.486.486.486.486.486.48第2棵树t2x0123456789y5.565.575.916.446.587.058.098.338.809.006.486.486.486.486.486.486.486.486.486.480.920.910.570.04-0.1-0.57-1.61-1.85-2.32-2.5212345678910再次尝试分割阈值x4.5左集合Lx{0, 1, 2, 3, 4}右集合Rx{5, 6, 7, 8, 9}带入Gain可以分裂。经计算该环节中x4.5即为最优分裂点假设该分裂后不再分裂每一次分裂都不需要立刻算叶子权重只有当节点确定不再分裂最终叶子时才会使用该节点的最优权重j{1,2}。更新预测值以此类推迭代循环直到达到设置树数量 / 验证损失不再下降。案例汇总随机森林-泰坦尼克号顾客生存预测Adaboost-红葡萄酒品质分类预测GBDT-泰坦尼克号顾客生存预测XGBoost-红葡萄酒品质分类预测