机器学习18-XGBoost的推导过程

本文探讨了提升随机森林准确率的方法,包括调整决策树生成策略和优化随机森林的投票过程。通过对分错样本进行加权处理及改进目标函数,提出了增强随机森林性能的有效途径。

一,对随机森林的重新思考

   随机森林的每个决策树由随机样本数,随机样本特征,通过信息熵的度量来确定,可以说各个决策树之间是相互独立的,每个树只是在某个分类方向上具有优势(弱分类器),将具有优势的这些树组成森林,即可生成随机森林,从而达到分类的目的。但是如果我想对随机森林进一步提升准确率,应该采取什么策略呢?有以下2个方向:

   1,决策树。

    假定当前得到m-1颗决策树,可以根据样本与决策信息影响第m颗决策树的生成。很显然的将分错的样本权值增大,将分对的样本权值减小能在训练样本上能得到较高的准率

   图m=1中,绿线左边3个红点,右边2个蓝点分错,将这5个点加权再分,以此类推分下去,可以得到很好的分类器。


   2,各个决策树组成随机森林后,最后的投票过程不采用少数服从多数规则,投票过程在建立决策树时就确立。


二,算法框架


   假定样本的噪声符合高斯分布,典型的损失函数就定义为预测值与实际值的误差平方,则目标函数的最优解就是所有样本损失最小的函数



此时F(x)是一簇基函数f(x)的加权和


则算法转化为求一簇基函数的最小损失值,根据策略1,我们应该根据前m-1个决策树来决定生成怎样的第m颗决策树,不妨第一颗决策树就是一个常数函数f1(x)= c



接下来的工作便是怎么确定权值,怎么根据m-1颗树确定第m颗树


三,目标函数



:第i个样本根据前t-1颗树确定的测试值


:第i个样本根据第 t 颗树确定的值

:第 t 颗树的正则项


根据Taylor展开式,在x处2阶展开,忽略高阶无穷小。




将目标函数Taylor展开


值得注意的是,L是给定的,y的真实值是知道的,预测值是根据前t-1颗树知道的,则gi和hi是可算的。


四,重新定义决策树


一个xi的样本进入决策树分类是由最终的的叶子权值决定,即黑色实心圆,而中间的空心圆只是决定的 xi 样本落入到哪一个叶子。

q(x)表示样本x落入的叶子

Wq(x)表示样本x落入叶子的权值,即样本X经过决策树所对应的权值



所以一颗决策树的核心是:“树结构”与“叶权值”


举例





五,正则项的定义

决策树的复杂度可参考叶节点数和叶权值



举例



六,目标函数的计算


定义



对W求偏导


代入目标函数



举例

XGBoost公式做的事情


### LSTM与XGBoost混合模型 #### 方法概述 为了提高预测性能并充分利用不同机器学习技术的优势,可以创建一种融合LSTM(长短时记忆网络)和XGBoost(极端梯度提升树)的方法来处理时间序列数据或其他复杂模式识别任务。这种集成方式能够结合两者优点——即LSTM对于捕捉长时间依赖关系的能力以及XGBoost强大的特征选择能力和高效的计算效率。 #### 构建流程 ##### 数据预处理阶段 在应用任何高级算法之前,先要对原始输入做必要的清理工作,比如缺失值填补、异常检测移除等操作;接着按照一定规则划分训练集/验证集/测试集三部分用于后续评估过程中的交叉检验[^1]。 ##### 特征工程环节 针对具体应用场景选取合适的指标作为自变量加入到最终的样本集中去辅助目标函数的学习效果改进。这里既可以考虑传统统计量也可以引入领域专业知识指导下的新合成维度[^2]。 ##### 单独训练两个子模块 分别采用上述提到的技术单独建立各自的基线版本: - **LSTM**:通过调整隐藏单元数目、堆叠多层结构等方式探索最佳架构配置方案; - **XGBoost**:借助贝叶斯优化策略自动搜索空间内较佳的一组超参设定从而获得更鲁棒的结果表现形式。 ##### 组合策略设计 当各自完成一轮完整的迭代更新之后,则进入到最关键的一步—怎样把二者有机结合起来形成新的整体解决方案?常见的做法有如下几种思路可供参考借鉴: - **级联式连接法**:将前者的输出视为后者额外增加的一个输入通道参与进来共同作用于最后一轮决策判断之中; - **加权平均法则**:基于某种权重分配机制综合考量两方贡献程度得出一个折衷解向量表示待测实例类别归属倾向性大小; - **投票表决制**:类似于KNN最近邻分类器那样收集来自多方意见后再依据多数原则裁定最终答案标签所属哪一类目群组里边。 #### 实现示例 下面给出一段Python伪代码片段展示如何实现这一想法的具体步骤: ```python from keras.models import Sequential, Model from keras.layers import Dense, Dropout, LSTM, Input import xgboost as xgb from sklearn.model_selection import train_test_split from bayes_opt import BayesianOptimization def create_lstm_model(input_shape): model = Sequential() model.add(LSTM(50, input_shape=input_shape)) model.add(Dropout(0.2)) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') return model def optimize_xgb(params): reg_alpha = params['reg_alpha'] max_depth = int(params['max_depth']) dtrain = xgb.DMatrix(X_train, label=y_train) cv_result = xgb.cv( {'objective': 'binary:logistic', 'eval_metric': 'auc', 'silent': 1, 'reg_alpha': reg_alpha, 'max_depth': max_depth}, dtrain=dtrain, num_boost_round=100, nfold=5, early_stopping_rounds=10) return -cv_result.iloc[-1].values[0] # 假设已经准备好 X 和 y X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42) lstm_input = Input(shape=(timesteps, features)) lstm_output = create_lstm_model((timesteps, features))(lstm_input) xgb_bo = BayesianOptimization(optimize_xgb, { 'reg_alpha': (0.01, 0.9), 'max_depth': (3, 7) }) xgb_bo.maximize(init_points=5, n_iter=10) best_params = xgb_bo.res['max']['max_params'] dval = xgb.DMatrix(X_val, label=y_val) bst = xgb.train(best_params, dtrain=xgb.DMatrix(X_train, label=y_train), evals=[(dval,'validation')], verbose_eval=False) ensemble_predictions = lstm_output * bst.predict(dval).reshape(-1, 1) / sum(bst.predict(dval)) model = Model(inputs=lstm_input, outputs=ensemble_predictions) ``` #### 优势分析 - 能够有效弥补单一方法存在的局限性和不足之处,在某些特定条件下可以获得更好的泛化能力; - 利用了两种完全不同类型的算法定位问题本质的不同侧面,有助于挖掘潜在规律背后深层次的信息关联特性; - 对抗过拟合现象具有一定的缓解效应,尤其是在面对高维稀疏型数据集的时候尤为明显. #### 缺点讨论 - 训练成本相对较高,因为涉及到多次循环调用外部库接口执行耗时较长的任务; - 参数调试难度加大,由于增加了更多可变因素使得整个系统的稳定性和可控性有所下降; - 解释起来更加困难,即使得到了满意的成绩也难以直观理解内部运作机理到底是什么样的逻辑链条支撑起了这样的结论推导过程.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值