恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

XGBoost Kaggle实战:从参数调优到特征工程与Stacking融合

  • 首页
  • 资讯中心
  • /
  • XGBoost Kaggle实战:从参数调优到特征工程与Stacking融合

相关资讯

COMSOL电磁超声兰姆波仿真:从EMAT激励到压电接收的完整实战 2026/9/7 20:35:20
Spacewalk插件对yumdownloader的影响与离线拉包实战 2026/9/7 20:30:19
mysql基础(二)插入与自增测试 2026/9/7 20:30:19

最新资讯

价值驱动FDE:企业级AI从模型交付到业务指标落地的实战指南
C++多态机制与虚函数表深度解析
尝试用字节的Traecode分析单细胞类器官数据,结果把电脑跑崩了。。。。
JSON工厂类设计与性能优化实践
【具身智能】π0论文阅读随笔
生物信息学高性能计算实战:从集群配置到云原生优化

今日推荐

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现
UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南
BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

XGBoost Kaggle实战:从参数调优到特征工程与Stacking融合

发布时间:2026/9/7 20:35:20
XGBoost Kaggle实战:从参数调优到特征工程与Stacking融合 1. XGBoost为什么能成为Kaggle赛场的“常青树”先聊个很多新手都会问的问题深度学习都这么猛了为什么Kaggle比赛里XGBoost依然霸榜而且不光是表格数据比赛就连一些多模态比赛里树模型仍然是不可替代的基石。原因其实很朴素Kaggle上绝大多数的比赛数据都是表格型数据而表格数据的本质是“特征稀疏、噪声多、非线性关系复杂、特征间交互多”。深度学习在这种场景下并不占优——它擅长的是局部模式提取比如图像里的纹理、文本里的语义但当特征是几百个没有空间结构的离散列时神经网络很难自动构造出有效的特征组合。XGBoost这类梯度提升树模型则天然适合表格数据它每一棵树都在做特征切分本质上是在自动寻找特征间的交互关系加上正则化、列采样、早停等机制泛化能力相当扎实。还有一点经常被忽视XGBoost对数据预处理的要求极低。你不需要做特征缩放不需要处理缺失值原生支持不需要为类别特征做独热编码虽然通常建议做。这意味着在比赛初期你可以用极短的代码量快速建立第一个baseline把时间留下来思考特征工程和模型融合这是Kaggle赛场上最宝贵的时间分配方式。从2016年XGBoost正式开源到今天它经历了与LightGBM、CatBoost的激烈竞争。LightGBM基于直方图算法训练速度更快CatBoost在类别特征和高鲁棒性上有优势。但XGBoost的稳定性、可调参数的细腻程度、社区生态成熟度依然是综合最推荐的第一个模型。我在实际比赛中的经验是先跑XGBoost拿到一个可靠的baseline再用LightGBM和CatBoost交叉验证最后做模型融合。这个路线在绝大多数表格类比赛中能稳定打进前10%。所以这篇内容我会从实战角度拆解XGBoost在Kaggle比赛中的完整用法参数背后的逻辑、特征工程怎么做才能发挥它的威力、调参的顺序和策略、以及怎么搭配Stacking框架拿到更高的名次。每一部分都是我在真实比赛中踩过坑、验证过有效的方法。2. XGBoost核心参数搞懂这些你才算是会调参2.1 先分清三类参数树结构、正则化、训练策略XGBoost的参数文档很长但真正决定模型性能的其实是三类参数的组合。第一类是控制单棵树复杂度的第二类是控制整体模型复杂度的第三类是控制训练过程的。把这三类分开理解调参的时候才不会乱。树结构参数核心是max_depth和min_child_weight。max_depth控制树的深度默认值是6但实际比赛中我很少直接用6。比如特征数量多、样本量大的时候深度6容易过拟合样本量小但特征交互复杂的时候深度反而要适当加深。min_child_weight是叶子节点最小样本权重和可以理解为“一个叶子节点至少需要多少样本的支持才继续分裂”默认值是1但对于有噪声的数据集我会把它调大到3到7之间能明显抑制过拟合。正则化参数gamma、lambda、alpha。gamma是节点分裂所需的最小损失减少量也就是“分裂一次至少要带来多少信息增益才值得”。默认值0表示不设门槛但在实际比赛中调大gamma是防止过拟合非常有效的手段尤其是树深较大时。lambda是L2正则化系数默认1一般保持默认就行alpha是L1正则化系数默认0在特征很多但大部分是噪声的时候可以开到0.5到1。训练策略参数learning_rate也叫eta、n_estimators或num_round、subsample、colsample_bytree。这里有个经典的组合逻辑学习率越低模型越稳定但需要更多轮次。我在比赛中常用的组合是learning_rate 0.02、n_estimators 3000左右配合早停。subsample是行采样默认1我通常设在0.8左右colsample_bytree是列采样默认1我通常设在0.7到0.9之间。这两个参数相当于给模型加“随机性”让每棵树看到的数据略有不同从而降低方差。2.2 参数之间的联动效应比单个参数值更重要很多人调参喜欢一个个试比如把max_depth从5调到7看分数变化。这样做不是不行但效率很低因为XGBoost的参数之间是联动的单个参数的“最优值”往往依赖其他参数的取值。举一个我实际遇到的例子。有一场比赛我把max_depth从6加到8本地CV分数明显提升但提交到Public LB后分数反而下降了。原因就是过拟合了Public榜。后来我同时把min_child_weight从1调大到5gamma从0调到0.3CV分数虽然略降了0.001但Public LB和Private LB的差距明显缩小最终排名反而更高。这就是参数联动的作用加深树的同时必须增强分裂门槛和叶子节点的样本约束才能让模型在训练集和验证集上的表现差距不那么大。所以我建议的调参顺序是这样的第一步固定learning_rate 0.1用默认参数跑一个baseline记录CV分数第二步调max_depth和min_child_weight两者一起网格搜索范围分别是3到9、1到7第三步调gamma范围0到1步长0.1第四步调subsample和colsample_bytree范围0.5到1第五步把learning_rate降到0.02或0.01按比例增加n_estimators用早停确定最佳轮数。这套流程我在多个比赛中用过基本能稳定找到接近最优的参数组合而且不会浪费太多时间。每个比赛用这套流程大概需要1到2小时相比盲目搜索效率高出很多。import xgboost as xgb from sklearn.model_selection import GridSearchCV param_grid { max_depth: [4, 6, 8], min_child_weight: [1, 3, 5], gamma: [0, 0.2, 0.5], } xgb_model xgb.XGBRegressor( learning_rate0.1, n_estimators300, subsample0.8, colsample_bytree0.8, random_state42 ) grid_search GridSearchCV( estimatorxgb_model, param_gridparam_grid, scoringneg_mean_squared_error, cv5, n_jobs-1, verbose1 ) grid_search.fit(X_train, y_train) print(f最佳参数: {grid_search.best_params_}) print(f最佳CV分数: {grid_search.best_score_})2.3 一个很容易被忽略的参数eval_metric的选择很多人在比赛里直接用默认的RMSE或LogLoss但在特定场景下这个选择会直接影响模型质量。比如在类别极度不平衡的分类问题里默认的logloss会让模型倾向于预测多数类导致少数类的召回率很低。这种情况下我会换成AUC作为评估指标或者在XGBoost里设置scale_pos_weight参数来调整正负样本的权重。回归问题里也有类似情况。如果目标变量存在长尾分布比如房价预测中少数豪宅价格极高直接用RMSE会被异常值带偏。我的做法是先把目标变量做log1p变换再用RMSE评估然后把预测结果变换回来。还有更细的做法如果比赛评估指标是MAE那么XGBoost的objective可以设成reg:absoluteerror让模型直接优化MAE而不是优化RMSE后再去做指标适配。这些细节在比赛后期往往能帮你把排名提升几个名次因为大多数人只会用默认配置而你根据评估指标定制了模型的学习目标。3. 特征工程同样的XGBoost为什么别人分数比你高3.1 树模型的特征工程核心是“给模型提供切分依据”机器学习界有句话叫“Garbage in, garbage out”。在深度学习中模型能自动从原始数据中学习特征但在表格数据上用XGBoost特征工程的质量直接决定模型上限。这不是说XGBoost不能自动学习特征交互树的分裂本质上就在做这件事而是说当你把原始特征以“创造性的方式”组合起来时相当于给模型提供了更高层次的“切分依据”让它在更少的树深度内找到更优的分裂点。有一个经典例子。在某个金融风控比赛里原始特征有借款金额和年收入两个字段。XGBoost默认会分别对这两个字段做分裂但如果我手动构造一个特征负债率 借款金额 / 年收入模型的AUC立刻提升了约0.003。原因很简单负债率是一个更有业务含义的指标它能更直接地反映借款人的还款压力而模型要经过多层分裂才能近似拟合出这个比例关系。特征工程本质上就是“帮模型抄近路”。3.2 我常用的四类特征构造方法第一类统计聚合特征。这是最常见的特征构造方式适用于有分组结构的数据。比如电商比赛里每个用户有多次购买记录我可以按用户ID分组统计购买次数、购买金额均值、最大值、标准差、最近一次购买时间距今的天数等。在XGBoost里这类特征往往能带来非常大的提升因为它把“用户行为习惯”这个信息浓缩成了几个数值。聚合的粒度可以是用户、商品、品牌、品类等多层级形成“用户-商品”交叉聚合信息量更丰富。第二类时间特征拆解。日期字段不要直接塞给模型要拆成年、月、日、星期几、是否节假日、月初/月中/月末等。XGBoost能利用这些拆解后的特征捕捉周期性规律。比如在销售预测比赛中星期几这个特征往往很重要因为周末和工作日的购买行为差异很大。而距离上一个节假日的天数这种特征能帮模型捕捉节假日前后的销量波动。第三类交叉组合特征。对于类别特征两两组合会产生新特征。比如城市和商品类别组合成“城市-商品类别”代表这个城市的用户对某类商品的偏好。组合方法很简单把两个字符串拼成一个新字符串再给它编号。这个方法虽然简单但在很多比赛中效果显著因为XGBoost对类别特征的组合切分能力是有限的预先把组合特征提供给模型相当于帮它做了一层特征交叉。第四类目标编码Target Encoding。用一个类别特征的历史目标变量均值来替换该特征的值比如某个品牌的历史平均销量。这个方法在数据量大时效果极好但有信息泄露风险必须用K折交叉验证的方式在训练集内部计算防止目标泄露。我的习惯是只在验证集和测试集上使用训练集的统计量并且加上平滑系数防止噪声干扰。3.3 特征筛选少而精比多而杂更有效XGBoost自带feature_importances_可以查看每个特征的分裂增益贡献。但这个值只能作为相对参考不能完全依赖它来筛选特征。我的做法是先保留所有构造出来的特征跑一轮XGBoost记录feature importance按重要性降序排列取出前80%贡献的特征用这些特征重新训练模型对比CV分数如果分数持平或略有提升说明被去掉的特征确实是噪声如果分数下降再把部分特征加回来找到最佳平衡点。这个方法比直接“看importance砍特征”更稳因为它考虑了特征之间的冗余性。有些特征单独看重要性不高但和别的特征组合起来有互补作用直接砍掉会损失信息。特征数量方面我的经验是在XGBoost中特征数量在几十到几百之间是最佳区间。超过1000个特征时训练时间急剧上升且过拟合风险增大除非你用较大的正则化参数。所以做特征工程时不要追求“特征越多越好”而是追求“每个特征都有业务含义或统计意义”。4. 从Baseline到Top 10%一套可复用的调参实战流程4.1 建立稳定的验证方案是一切调参的前提很多人忽略了一个最重要的问题你的验证方案准不准如果验证方案不稳定调参就是白调——你根本不知道参数的提升是真实的还是噪声。Kaggle比赛里常见的验证方案有三种随机K折交叉验证适用于样本独立、无时间依赖的数据按时间划分适用于时间序列预测用前期的数据训练后期的数据验证按ID分组划分适用于同一ID有多个样本的数据比如一个用户多条记录必须保证同一ID的样本全部在训练集或全部在验证集否则会信息泄露。我的建议是比赛中至少建立两套验证方案。一套是本地快速验证K折CV用来调参和筛选特征另一套是模拟Public LB的验证比如时间划分用来确认本地CV的提升是否能在LB上复现。如果两套方案结论不一致以更贴近比赛评估方式的方案为准。from sklearn.model_selection import KFold, TimeSeriesSplit # 示例时间序列数据划分 tscv TimeSeriesSplit(n_splits5) for train_idx, valid_idx in tscv.split(X_train): X_tr, X_val X_train.iloc[train_idx], X_train.iloc[valid_idx] y_tr, y_val y_train.iloc[train_idx], y_train.iloc[valid_idx] # 训练模型记录验证分数4.2 快速建立baseline给自己设定“必须超越的底线”在开始调参之前先用一个简单的配置跑出baseline这个baseline的意义是锚定后续所有改进的方向。我会用一个标准化流程只保留原始特征用XGBoost默认参数5折交叉验证记录CV分数和Public LB分数。这个baseline通常能排进前40%甚至前30%原因很简单XGBoost本身已经足够强。之后的所有工作都是在这个基础上往上堆叠。baseline的代码要干净、可复用。我一般会封装成函数输入训练集、验证集、参数配置输出CV分数和预测结果。后续的所有实验都基于这个函数保证实验之间的唯一变量是待验证的改动。import numpy as np import xgboost as xgb from sklearn.metrics import mean_squared_error def run_xgb_cv(X, y, params, n_folds5): kf KFold(n_splitsn_folds, shuffleTrue, random_state42) oof_pred np.zeros(len(X)) for fold, (tr_idx, va_idx) in enumerate(kf.split(X)): X_tr, X_va X.iloc[tr_idx], X.iloc[va_idx] y_tr, y_va y.iloc[tr_idx], y.iloc[va_idx] dtrain xgb.DMatrix(X_tr, labely_tr) dvalid xgb.DMatrix(X_va, labely_va) model xgb.train( params, dtrain, num_boost_round3000, evals[(dvalid, valid)], early_stopping_rounds100, verbose_eval0 ) oof_pred[va_idx] model.predict(dvalid, iteration_range(0, model.best_iteration 1)) score mean_squared_error(y, oof_pred, squaredFalse) return score, oof_pred, model4.3 分阶段调参从粗调到细调这里我给出一份经过多个比赛验证的调参路线图每个阶段的目标和操作都明确写清楚。阶段一调树结构参数先用learning_rate0.1网格搜索max_depth3到9和min_child_weight1到7。这个阶段不需要特别精确找到一个大致最优区间即可。阶段二调正则化参数固定第一阶段结果网格搜索gamma0到1步长0.1同时尝试lambda和alpha的组合。如果CV分数对gamma敏感说明模型过拟合倾向较强如果gamma设为0时CV最高说明模型欠拟合可以考虑适当增大max_depth或减小min_child_weight。阶段三调采样参数搜索subsample0.5到1和colsample_bytree0.5到1。一般来说subsample在0.7到0.9之间colsample_bytree在0.7到1之间效果较好。这两个参数能显著降低过拟合但如果数据集本身较小过大的降采样可能损失信息。阶段四降低学习率放大轮数把learning_rate降到0.02或0.01n_estimators设为原学习率的对应倍数比如原来1000轮现在就3000到5000轮。用早停找到最佳轮数。这个阶段通常能带来稳定的小幅提升CV分数下降0.001到0.003。阶段五用早停确定最终轮数在最终参数组合下用全部训练数据训练设定early_stopping_rounds100或200让模型自己决定最佳轮数。这一步看似简单但很多新手会忽略如果训练轮数不足模型欠拟合如果过足模型过拟合。早停是最省心的方案。4.4 为什么网格搜索不是最佳选择严格来说网格搜索在调参后期效率很低因为参数空间是连续的网格只能覆盖有限个点。更好的选择是贝叶斯优化比如optuna库它能在几十次迭代内找到近似最优参数而网格搜索可能需要几百次尝试。Optuna的关键设置是n_trials我一般设置在50到100之间搜索空间覆盖上面提到的所有参数。每次试验用5折CV评估目标函数是CV分数的负值因为optuna是最小化。运行结束后用最佳参数重新训练模型。import optuna import xgboost as xgb from sklearn.model_selection import cross_val_score def objective(trial): params { max_depth: trial.suggest_int(max_depth, 3, 9), min_child_weight: trial.suggest_int(min_child_weight, 1, 7), gamma: trial.suggest_float(gamma, 0.0, 1.0), subsample: trial.suggest_float(subsample, 0.5, 1.0), colsample_bytree: trial.suggest_float(colsample_bytree, 0.5, 1.0), learning_rate: trial.suggest_float(learning_rate, 0.01, 0.1, logTrue), n_estimators: 3000, random_state: 42, } model xgb.XGBRegressor(**params) score cross_val_score(model, X_train, y_train, cv5, scoringneg_mean_squared_error) return -score.mean() study optuna.create_study(directionminimize) study.optimize(objective, n_trials50) print(f最佳参数: {study.best_params}) print(f最佳CV分数: {study.best_value})Optuna的价值不只是找参数它还能告诉你哪些参数对结果影响大通过param_importances。这在比赛中期很有用——如果发现某些参数影响很小后续调参就不需要再碰它们了。5. Stacking框架让XGBoost成为冠军模型的核心齿轮5.1 单模型有天花板融合模型没有走到前面几步你的单模型XGBoost应该已经能在Public LB上排到前15%到20%左右。这时候想再往前一步单靠调XGBoost已经不太够了——它的性能已经接近上限。接下来的关键是模型融合。模型融合的思路很简单不同模型的错误往往是部分独立的A模型在这个样本上预测偏差大B模型可能预测偏差小把它们的预测结果加权平均综合误差会降低。Kaggle经验丰富的选手都知道Top 3的解决方案几乎没有一个是用单一模型跑出来的基本都用了多模型融合。融合的方式从简单到复杂依次是简单加权平均、排序平均、Stacking堆叠。简单加权平均适合两个或三个模型比如0.7 * XGBoost预测 0.3 * LightGBM预测。排序平均适合不同模型预测值分布差异大的情况用百分位秩代替原始值再平均。Stacking则是一种更系统化的融合方式用多个基模型的预测结果作为新的特征训练一个元模型来学习“如何组合这些预测”。5.2 Stacking的标准流程与避坑要点Stacking的标准流程是这样的将训练集分成K折通常5折对于每个基模型在K折中循环用其中K-1折训练模型对剩下1折做预测同时对整个测试集做预测并取平均把K折的预测结果拼起来得到训练集的“堆叠特征”OOF预测训练集中所有基模型的OOF预测拼成一个新的特征矩阵用这个特征矩阵作为输入训练元模型通常用逻辑回归或简单的线性模型对测试集做同样的预测流程得到测试集的堆叠特征输入元模型得到最终预测。这里有个关键坑元模型不能用太复杂的模型。如果你用XGBoost作为元模型它可能会过拟合堆叠特征中的噪声而逻辑回归或岭回归这类简单模型反而能平稳地学习各基模型的权重。这是Stacking的核心原则基模型负责复杂度元模型负责组合。另一个坑是基模型之间的相关性。如果两个基模型高度相似比如两个参数几乎一样的XGBoost它们的预测高度相关Stacking的收益会很小。所以基模型的选择要注重“多样性”不同的算法XGBoost、LightGBM、CatBoost、随机森林、神经网络、不同的特征子集、不同的随机种子都能增加多样性。我是用一个主模型XGBoost保持稳定性再用LightGBM和CatBoost跑同样的特征加上两个不同随机种子的XGBoost组合起来训练元模型。from sklearn.model_selection import StratifiedKFold from sklearn.linear_model import Ridge import numpy as np def stacking_prediction(base_models, meta_model, X, y, X_test, n_folds5): kf KFold(n_splitsn_folds, shuffleTrue, random_state42) oof_pred np.zeros((len(X), len(base_models))) test_pred np.zeros((len(X_test), len(base_models))) for i, model in enumerate(base_models): oof_temp np.zeros(len(X)) test_temp np.zeros(len(X_test)) for fold, (tr_idx, va_idx) in enumerate(kf.split(X)): X_tr, X_va X.iloc[tr_idx], X.iloc[va_idx] y_tr y.iloc[tr_idx] model_clone model.fit(X_tr, y_tr) oof_temp[va_idx] model_clone.predict(X_va) test_temp model_clone.predict(X_test) / n_folds oof_pred[:, i] oof_temp test_pred[:, i] test_temp meta_model.fit(oof_pred, y) final_pred meta_model.predict(test_pred) return final_pred, oof_pred, test_pred5.3 融合之前先检查预测分布在融合之前先做一件很重要的事检查各模型的预测值分布是否在同一量级。如果XGBoost的预测值范围在0到1之间而LightGBM的预测值范围在0到100之间直接加权平均就没有意义。常见的处理方式有两种一是对每个模型的预测做标准化减均值除标准差再进行加权平均二是用排名转换把每个模型的预测值转换为百分位秩再取平均。后者在评估指标是排序类指标如AUC时尤其有效。另外当评估指标是RMSE这类对预测值敏感的量度时加权平均前最好检查各模型在验证集上的单独分数给分数更优的模型更高的权重。我在比赛中常用的做法是先等权平均作为baseline再用线性回归或贝叶斯优化学习最优权重但权重搜索的集合必须严格限制在验证集上防止过拟合验证集。5.4 XGBoost在Stacking中的“特殊地位”Stacking框架中XGBoost通常被作为第一层的主力基模型。原因有几个一是它的预测精度高单模型就有很强的下限保障二是它与LightGBM、CatBoost的算法原理有差异融合时多样性更明显三是它支持自带缺失值处理和权重列在数据质量参差不齐的比赛中适应性更强。此外XGBoost在Stacking第二层中也常有特殊用法当元模型需要处理少量特征时XGBoost也能胜任但前提是堆叠特征数量很少一般5到10个。6. Kaggle比赛中的常见坑我用XGBoost踩过的雷6.1 过拟合Public LB排名高开低走很多人第一次参赛都会遇到这个问题Public LB排名很靠前Private LB一出来直接跌出几百名。根本原因就是对Public LB过拟合了不断根据Public LB选择模型和参数最终选择的模型实际上是“记住”了Public LB的噪声。预防方法很简单本地CV分数和Public LB分数必须同时关注两者差距越来越大时就要警惕过拟合。另外不要频繁提交模型去试探Public LB。以我的习惯一个阶段内的提交次数不会超过3次剩余的决策都依赖本地CV。6.2 信息泄露特征工程中最隐蔽的错误信息泄露是比赛中最致命又最隐蔽的错误。常见场景包括用全量训练集的均值去做特征编码应只用训练集的统计量对测试集做了归一化但训练集没有时间序列问题中在同一时间点的样本被同时分到训练集和验证集。XGBoost对信息泄露尤其敏感因为树模型会“记住”含泄露特征的分裂点本地CV分数会虚高。避免方式就是在特征工程阶段就建立严格的数据分区意识——所有统计量只在训练折内计算验证集和测试集只用训练折的参数。6.3 训练数据集太大导致上传/处理慢还有一个很实际的坑Kaggle的数据集上传和处理速度有时很慢。尤其是训练数据特别大时提交前处理数据的时间可能超过比赛限制的提交次数限制。解决方法有两个层面一是合理地做特征筛选去掉冗余特征减小数据体积二是把高频使用的中间结果保存为parquet格式比CSV小很多、加载更快。我一般在特征工程完成后就用parquet保存一份处理好的特征后续所有模型都从这份数据读取避免重复计算。import pandas as pd # 保存特征工程结果减少重复计算 X_train_processed.to_parquet(train_processed.parquet) X_test_processed.to_parquet(test_processed.parquet)6.4 回归目标变量的分布问题在回归比赛中目标变量常常是右偏分布长尾。直接用原始值训练XGBoost模型会花费大量“精力”去拟合少数异常大值导致大多数样本预测不准。我的建议是先画出目标变量的分布如果明显右偏就用np.log1p(y)做变换训练完后预测值用np.expm1还原。如果比赛评估指标是RMSLE直接用log变换后的值训练效果几乎必然更好如果评估指标是RMSElog变换后的RMSE换算回原始空间可能不一样需要本地也做对应换算验证。7. 用XGBoost打比赛我最后的几点体会回归到标题这件事用XGBoost赢得Kaggle比赛重点其实不在XGBoost本身而在于你如何使用它。XGBoost是一个功能强大的工具箱但工具再强也要看使用者的方法论。我的核心方法论是验证方案先行、特征工程为重、系统性调参、多元模型融合。这套方法在近十场比赛中反复验证过稳定有效。如果你现在是第一次用XGBoost打比赛我建议你按这个顺序行动先把baseline跑通理解验证方案然后花最多的时间做特征工程再用第4节的调参流程把XGBoost调到最优最后用Stacking框架融合多个模型。每一步都有清晰的目标和验收标准不会迷茫。我个人还有一个习惯每次比赛结束后把Public LB和Private LB的差距、哪些特征最重要、哪些参数对结果影响最大都整理成一份笔记。下次比赛开始前翻一翻能少踩很多坑。比赛不是目的能力成长才是。希望这篇内容能帮你在下一次比赛中少走弯路更快地站上领奖台。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号