ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AutoGluon 实战:用 AutoMM 深度表格模型与树模型集成预测加州房价(Kaggle 竞赛复现指南)

AutoGluon 实战:用 AutoMM 深度表格模型与树模型集成预测加州房价(Kaggle 竞赛复现指南) AutoGluon 实战用 AutoMM 深度表格模型与树模型集成预测加州房价Kaggle 竞赛复现指南【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon本文以 AutoGluon 仓库中的 Kaggle 加州房价预测实战示例examples/automm/kaggle_california_house_price/README.md为核心系统讲解如何将 AutoMMAutoGluon-Multimodal内置的深度表格模型FT-Transformer / MLP通过AG_AUTOMM桥接进 AutoGluon-Tabular并与 LightGBM、CatBoost 等树模型组成加权集成、5 折 Bagging 与 5 折 Stacking 三种集成方案。读完本文你将掌握一个表格 文本混合特征回归任务的完整竞赛工作流包括数据下载与预处理、AutoMM 双模式超参数配置、三种集成模式的选择依据以及提交文件的生成逻辑。任务背景为什么要用多模态思路做表格回归加州房价预测Kaggle: California House Price Competition是一个典型的混合型回归任务目标是依据房屋信息预测成交价Sold Price。从仓库示例描述看数据特征不仅包含卧室数量、居住面积等数值字段还包含**位置、附近学校、卖家描述seller summary**等类别型与文本型信息。测试集中的房屋在训练集之后售出属于时序切分场景对模型的泛化能力提出了更高要求。正因如此示例没有把数据当作纯表格来处理而是同时启用AutoMM 中的深度表格模型处理数值与类别特征HuggingFace 文本骨干网络处理卖家描述等文本列融合模块fusion_mlp / fusion_transformer把各模态表示融合后预测房价。这正是 AutoGluon 的独特之处MultiModalPredictor天然支持数值 类别 文本 图片的混合输入因此即使是一个 Kaggle 房价竞赛也能以多模态方式建模并把深度模型与经典树模型在同一框架内做自动集成。数据准备与下载示例脚本默认从本地目录california-house-prices读取数据包含train.csv、test.csv与sample_submission.csv。数据需先从 Kaggle 下载并解压需 Kaggle CLI 与账号认证kaggle competitions download -c california-house-prices unzip california-house-prices.zip -d california-house-prices若数据已下载到其他路径可通过--data_path参数指定python3 example_kaggle_house.py --data_path /path/to/california-house-prices五种实验模式从单模型到深度集成仓库 README.md 给出了五种可复现的实验命令覆盖单个深度模型 → 深度模型自集成 → 深度模型 树模型混合集成的完整路径# Single MultiModalPredictor (MLP) python3 example_kaggle_house.py --automm-mode mlp --mode single 21 | tee -a logs/automm_single_mlp.txt # Single MultiModalPredictor (FT-Transformer For Tabular) python3 example_kaggle_house.py --automm-mode ft-transformer --mode single 21 | tee -a logs/automm_single_ft.txt # MultiModalPredictor 5-Fold Bagging python3 example_kaggle_house.py --automm-mode ft-transformer --mode automm_bag5 21 | tee -a logs/automm_ft_bag5.txt # MultiModalPredictor other Tree Models (Weighted Ensemble) python3 example_kaggle_house.py --automm-mode ft-transformer --mode weighted 21 | tee -a logs/automm_ft_weighted.txt # MultiModalPredictor other Tree Models (5-fold Stack Ensemble) python3 example_kaggle_house.py --automm-mode ft-transformer --mode stack5 21 | tee -a logs/automm_ft_stack5.txt各模式的含义与实现要点对应脚本 example_kaggle_house.py 中的分支逻辑模式使用的 Predictor集成策略实现要点singleMultiModalPredictor无单个模型直接用predictor.fit(train_df, hyperparametersautomm_hyperparameters)训练single_bag5TabularPredictorAutoMM 模型 5 折 Baggingnum_bag_folds5, num_stack_levels0超参数中只保留AG_AUTOMMweightedTabularPredictor加权集成含树模型num_bag_foldsNone, num_stack_levelsNonestack5TabularPredictor5 折 Stacking 集成num_bag_folds5, num_stack_levels1automm_bag5TabularPredictor同single_bag5命令行别名脚本内与single_bag5共用同一分支注意README 中--mode automm_bag5与脚本 argparse 的合法取值stack5 / weighted / single / single_bag5略有出入实际运行时可使用脚本支持的single_bag5效果一致。命令行参数逐项解读脚本顶部定义了完整的参数体系理解它们才能灵活调整实验parser.add_argument(--mode, choices[stack5, weighted, single, single_bag5], defaultweighted, helpstack5 means 5-fold stacking. weighted means weighted ensemble. single means use a single model. single_bag5 means 5-fold bagging via the AutoMM model.) parser.add_argument(--automm-mode, choices[ft-transformer, mlp], defaultft-transformer, helpFusion model in AutoMM.) parser.add_argument(--text-backbone, defaultgoogle/electra-small-discriminator) parser.add_argument(--cat-as-text, defaultFalse) parser.add_argument(--data_path, typestr, defaultcalifornia-house-prices) parser.add_argument(--seed, typeint, default123) parser.add_argument(--exp_path, defaultNone) parser.add_argument(--with_tax_values, default1, typeint)参数默认值作用--modeweighted集成策略single/single_bag5/weighted/stack5--automm-modeft-transformerAutoMM 融合模型类型ft-transformer或mlp--text-backbonegoogle/electra-small-discriminator文本骨干网络HuggingFace checkpoint--cat-as-textFalse是否将类别特征转为文本送入文本模型对应data.categorical.convert_to_text--data_pathcalifornia-house-prices数据目录--seed123随机种子同时设置 torch / numpy / random--exp_path自动生成输出目录默认形如automm_kaggle_house_{mode}_{automm_mode}_cat_to_text{cat_as_text}_{text_backbone}--with_tax_values1是否保留房产税相关特征0 则删除特征工程与标签处理preprocess函数见 example_kaggle_house.py完成了五步关键处理其中对数变换对右偏的价格类特征至关重要def preprocess(df, with_tax_valuesTrue, log_scale_lotTrue, log_scale_listed_priceTrue, has_labelTrue): new_df df.copy() new_df.drop(Id, axis1, inplaceTrue) # 清理学校名称后缀如 Xxx Elementary School - Xxx new_df[Elementary School] new_df[Elementary School].apply( lambda ele: str(ele)[:-len( Elementary School)] if str(ele).endswith(Elementary School) else ele) if log_scale_lot: new_df[Lot] np.log(new_df[Lot] 1) if log_scale_listed_price: log_listed_price np.log(new_df[Listed Price]).clip(0, None) new_df[Listed Price] log_listed_price if with_tax_values: new_df[Tax assessed value] np.log(new_df[Tax assessed value] 1) new_df[Annual tax amount] np.log(new_df[Annual tax amount] 1) else: new_df.drop(Tax assessed value, axis1, inplaceTrue) new_df.drop(Annual tax amount, axis1, inplaceTrue) if has_label: new_df[Sold Price] np.log(new_df[Sold Price]) return new_df要点说明删除Id纯标识列对预测无信息量学校名称清洗去除冗余后缀使类别更紧凑降低类别基数1再取对数处理可能为 0 的数值如无地块面积避免log(0)标签对数化np.log(Sold Price)把右偏的房价压缩为正态分布配合eval_metricr2训练回归模型推理后再用np.exp(...)还原为真实价格用于提交。标签列与评估指标在脚本中固定为label_column Sold Price eval_metric r2AutoMM 双模式FT-Transformer 与 MLP 的模型组合get_automm_hyperparameters根据--automm-mode组装 AutoMM 的超参数核心是通过model.names声明参与训练的模块列表if mode ft-transformer: hparams {model.names: [ft_transformer, hf_text, fusion_transformer], model.hf_text.checkpoint_name: text_backbone, data.categorical.convert_to_text: cat_as_text} elif mode mlp: hparams {model.names: [categorical_mlp, numerical_mlp, hf_text, fusion_mlp], model.hf_text.checkpoint_name: text_backbone, data.categorical.convert_to_text: cat_as_text}FT-Transformer 模式由三部分构成模块名与常量可对照 constants.py 中的FT_TRANSFORMERft_transformer处理数值 类别特征的深度表格模型hf_textHuggingFace 文本骨干默认google/electra-small-discriminator处理卖家描述等文本列fusion_transformer基于 Transformer 的跨模态融合头汇总表格与文本表示。FT-Transformer 的默认配置可在 configs/model/default.yaml 中查看data_types明确声明它只消费categorical与numerical两类特征ft_transformer: data_types: [categorical, numerical] embedding_arch: [linear] token_dim: 192 hidden_size: 192 num_blocks: 3 attention_num_heads: 8 attention_dropout: 0.2 residual_dropout: 0.0 ffn_dropout: 0.1 ffn_hidden_size: 192 ffn_activation: geglu head_activation: relu normalization: layer_norm merge: concat pooling_mode: cls更多可调参数的含义可参考配套的深度表格模型示例 tabular_dl/README.md例如num_blocksTransformer backbone 中 block 的数量token_dim类别/数值 tokenizer 输出的 token 维度hidden_sizeFT-Transformer 主干的嵌入维度ffn_hidden_size/ffn_dropout/ffn_activationFFN 层维度、dropout 率与激活函数支持relu、gelu、reglu、leaky_reluattention_dropout注意力层的 dropout 率embedding_arch数值特征嵌入层结构列表。示例中给出的调参写法hyperparameters { model.names: [ft_transformer], model.ft_transformer.num_blocks: 5, model.ft_transformer.ffn_dropout: 0.0, }MLP 模式将ft_transformer替换为两个专用 MLPcategorical_mlp编码类别特征numerical_mlp编码数值特征hf_text文本骨干不变fusion_mlpMLP 型融合头。MLP 模式参数量更小、训练更快适合快速基线验证FT-Transformer 模式表达力更强通常能取得更好精度在 tabular_dl/README.md 的 11 个公开表格基准数据集上AutoMM FT-Transformer 在多数数据集上达到或接近论文 SOTA 水平该表同时给出各数据集的rmse/acc指标、样本数与特征规模可作为复现参考。类别转文本--cat-as-textdata.categorical.convert_to_text控制是否把类别特征拼接成文本让hf_text一并学习。默认配置见 configs/data/default.yaml其中还提供了convert_to_text_template取值direct/list/text/latex预设库 utils/presets.py 中的convert_categorical_to_textpreset 即使用latex模板将类别组织为文本。对加州房价这类含位置、学校等语义化类别字段的任务开启该选项往往能利用预训练语言模型的知识带来增益代价是训练时间上升。桥接机制AG_AUTOMM如何接入 AutoGluon-Tabular混合集成阶段脚本把 AutoMM 的超参数放入tabular_hyperparameters以AG_AUTOMM作为模型键tabular_hyperparameters { GBM: [ {}, {extra_trees: True, ag_args: {name_suffix: XT}}, ], CAT: {}, AG_AUTOMM: automm_hyperparameters, }GBM训练两份 LightGBM一份默认配置一份启用extra_treesTrue后缀XTCAT为 CatBoostAG_AUTOMM则是 AutoMM 深度模型的注册名。AG_AUTOMM的底层实现在 tabular/src/autogluon/tabular/models/automm/automm_model.py其关键事实ag_key AG_AUTOMMag_name MultiModalPredictor是AbstractModel的子类包装器GPU 强制要求gpu_required True、minimum_num_gpus 1即该模型必须搭配 GPU 训练支持binary/multiclass/regression三类问题本示例属于回归在_construct_column_types中根据特征元数据把列映射为image_path/text/categorical/numerical四类交给MultiModalPredictor默认fold_fitting_strategysequential_local即做 Bagging/Stacking 时各折按顺序在本地训练避免并行 GPU 冲突_fit内部会新建一个MultiModalPredictor(label..., problem_type..., eval_metric..., ...)并调用其fit同时将 Tabular 侧的verbosity、num_gpus、seed、time_limit透传下去。从源码结构可以推断任何 Tabular 的集成机制Bagging、Stacking、加权集成、分层采样都会把AG_AUTOMM当作普通成员模型参与进来而模型内部则完整复用 AutoMM 的多模态训练管线。三种集成策略选择依据与参数语义脚本中按--mode设置集成参数后统一调用TabularPredictor.fitif args.mode single_bag5: tabular_hyperparameters {AG_AUTOMM: automm_hyperparameters} num_bag_folds, num_stack_levels 5, 0 elif args.mode weighted: num_bag_folds, num_stack_levels None, None elif args.mode stack5: num_bag_folds, num_stack_levels 5, 1weighted加权集成num_bag_foldsNone, num_stack_levelsNone各模型独立训练后AutoGluon 在验证集上用加权含贪心选择组合预测。速度最快适合快速上线。single_bag5AutoMM 5 折 Bagging仅保留AG_AUTOMM5 折交叉验证训练 5 个子模型并平均预测可显著降低深度模型方差是提升单模型稳定性的首选。stack55 折 Stackingnum_bag_folds5, num_stack_levels1树模型与 AutoMM 都做 5 折 Bagging再用一层 stacker 模型学习它们的 OOF 预测通常精度最高但训练时间最长。训练完成后脚本会把leaderboard()结果导出为leaderboard.csv方便对比各成员模型与集成模型的r2分数leaderboard predictor.leaderboard() leaderboard.to_csv(os.path.join(args.exp_path, leaderboard.csv))推理与提交文件生成无论哪种模式最终提交逻辑一致对测试集预测后做np.exp逆变换还原真实价格并写入sample_submission.csv的Sold Price列predictions np.exp(predictor.predict(test_df)) submission_df[Sold Price] predictions submission_df.to_csv(os.path.join(args.exp_path, submission.csv), indexNone)注意测试集预处理时has_labelFalse因此不会对Sold Price取对数np.exp严格对应训练时的np.log变换保证预测值回到原始量纲。进阶阅读深度表格模型的完整复现基准若想深入理解 FT-Transformer 在纯表格数据上的表现可参考 examples/automm/tabular_dl 目录运行入口example_tabular.py支持--dataset_namead / ca / co / ep / he / hi / ja / mi / ya / ye / al 共 11 个数据集、--dataset_dir、--exp_dir、--gpu_id、--lr、--end_lr、--seed等参数run_all.sh一键复现论文基准以lr1E-4、seed0遍历 11 个数据集其结果表记录了每个数据集的样本数、数值/类别特征数、类别数及 AutoMM FT-Transformer 的指标可作为本示例调参的参照系。该目录中的tabular_hyperparameters与加州房价示例结构一致GBM CAT XGB AG_AUTOMM并展示了 AutoMM 的完整超参模板env.batch_size、optim.max_epochs、optim.lr_schedulepolynomial_decay、optim.patience等适合在房价任务上进一步微调复用。【免费下载链接】autogluonFast and Accurate ML in 3 Lines of Code项目地址: https://gitcode.com/GitHub_Trending/au/autogluon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进