PyTorch Tabular 简介在处理表格数据时梯度提升模型通常优于其他机器学习模型。虽然在文本和图像领域深度学习表现出了非凡的效果但在表格数据上这种优势尚未完全展现。然而近期的深度学习革命已将部分焦点转向了表格数据领域因此专门为表格数据设计的新型架构和模型不断涌现。其中许多模型的表现已经可以与经过良好调优的梯度提升模型相媲美甚至略有超越。PyTorch Tabular 是一个框架/封装库旨在使表格数据的深度学习易于应用并能服务于实际场景和研究。该库的设计核心原则是低阻力的可用性易于定制可扩展且易于部署该框架并非从零开始构建而是建立在 PyTorch 和 PyTorch Lightning 等成熟项目的基础之上。该框架还包含一些前沿的深度学习模型可以使用 pandas 数据帧轻松进行训练。核心特性高层配置驱动 API通过配置驱动的API可以快速使用和迭代。用户只需提供 pandas 数据帧库会自动处理归一化、标准化、类别特征编码以及数据加载器的准备工作。易于扩展BaseModel类提供了一个易于扩展的抽象类用于实现自定义模型同时仍可利用库中封装的其他功能。集成SOTA模型实现了如 Neural Oblivious Decision Ensembles (NODE) 和 TabNet 等前沿网络。具体使用方法可参考文档中的示例。基于 PyTorch Lightning通过使用 PyTorch Lightning 进行训练PyTorch Tabular 继承了其提供的灵活性和可扩展性。为什么选择 PyTorch TabularPyTorch Tabular 旨在降低表格数据深度学习在工业应用和研究中的门槛。目前使用神经网络并不像使用传统的 Sci-kit Learn 机器学习模型那样简单。PyTorch Tabular 致力于将神经网络工作中的“软件工程”部分变得尽可能简单和轻松让用户能专注于模型本身。同时它也希望能将表格数据领域的不同发展统一到一个单一框架中并提供一套能与各种前沿模型协同工作的 API。目前表格深度学习的大多数发展都分散在各个独立的 Github 仓库中。除了 fastai 之外几乎没有框架真正关注过表格数据。这正是 PyTorch Tabular 应运而生的原因。如何使用 PyTorch Tabular安装虽然安装包包含了 PyTorch但最佳且推荐的方式是先从官方网站安装 PyTorch为你的机器选择合适的 CUDA 版本PyTorch 版本需高于 1.3。安装好 PyTorch 后直接使用以下命令安装包含额外依赖用于实验跟踪的 Weights Biases的完整库pipinstallpytorch_tabular[all]如果只需要基础功能则安装pipinstallpytorch_tabularPyTorch Tabular 的源代码可以从 Github 仓库下载。你可以克隆公共仓库gitclone git://github.com/manujosephv/pytorch_tabular获取源代码副本后可以通过以下命令安装python setup.pyinstall配置设置你需要提供四个配置项大部分都有智能默认值它们将驱动后续的整个流程DataConfig定义目标列名称、类别和数值列名称、需要执行的任何转换等。ModelConfig每个模型都有特定的配置。这决定了要训练哪个模型并允许你定义模型的超参数。TrainerConfig通过设置batch_size、epochs、早停等参数来配置训练过程。大部分参数直接来自 PyTorch Lightning并在训练时传递给底层的Trainer对象。OptimizerConfig允许你定义和使用不同的优化器和学习率调度器。支持标准的 PyTorch 优化器和学习率调度器。对于自定义优化器可以在fit方法中使用相应参数进行覆盖。自定义优化器应与 PyTorch 兼容。ExperimentConfig这是一个可选参数。如果设置则用于定义实验跟踪。目前支持两种实验跟踪框架Tensorboard 和 Weights Biases。WB 实验跟踪器具有更多功能例如跟踪跨epoch的梯度和 logits。以下是配置示例data_configDataConfig(target[target],# 目标变量始终应为列表。仅回归支持多目标。多任务分类尚未实现。continuous_colsnum_col_names,categorical_colscat_col_names,)trainer_configTrainerConfig(auto_lr_findTrue,# 运行LRFinder自动推导学习率batch_size1024,max_epochs100,gpus1,# 使用的GPU索引。0表示CPU)optimizer_configOptimizerConfig()model_configCategoryEmbeddingModelConfig(taskclassification,layers1024-512-512,# 每层的节点数activationLeakyReLU,# 层间的激活函数learning_rate1e-3)模型初始化和训练定义好配置后需要使用这些配置初始化模型并调用fit方法。tabular_modelTabularModel(data_configdata_config,model_configmodel_config,optimizer_configoptimizer_config,trainer_configtrainer_config,)tabular_model.fit(traintrain,validationval)完成。模型将按指定的 epoch 数进行训练。已实现的模型列表带类别嵌入的前馈网络一个简单的前馈网络但为类别列添加了嵌入层。这与 fastai 的表格模型非常相似。NODE在 ICLR 2020 上提出的模型据作者称该模型在许多数据集上击败了经过良好调优的梯度提升模型。TabNet出自某研究机构的另一个模型它在多步决策过程中使用稀疏注意力来建模输出。要实现新模型请参阅“如何实现新模型”教程其中涵盖了基础和高级架构。在未见数据上评估模型要使用训练期间相同的指标/损失在新数据上评估模型可以使用evaluate方法。resulttabular_model.evaluate(test)示例输出-------------------------------------------------------------------------- DATALOADER:0 TEST RESULTS {test_accuracy: tensor(0.6924, devicecuda:0), train_accuracy: tensor(0.6051, devicecuda:0), train_loss: tensor(0.6258, devicecuda:0), valid_accuracy: tensor(0.7440, devicecuda:0), valid_loss: tensor(0.5769, devicecuda:0)} --------------------------------------------------------------------------对未见数据进行预测要获取预测结果的数据帧可以使用predict方法。这会将预测结果添加到传入的同一个数据帧中。对于分类问题会同时返回概率和以 0.5 为阈值的最终预测结果。pred_dftabular_model.predict(test)保存和加载模型可以保存模型并在之后加载用于推理。tabular_model.save_model(examples/basic)loaded_modelTabularModel.load_from_checkpoint(examples/basic)resultloaded_model.evaluate(test)代码、文档和贡献方式框架代码可在 GitHub 上获取。文档和教程可在 Read the Docs 上找到。非常欢迎贡献相关指南也已提供。相关工作fastai 是与 PyTorch Tabular 最接近的框架两者都基于 PyTorch。但 PyTorch Tabular 的不同之处在于其模块化和解耦的特性以及它对标准 PyTorch 和 PyTorch Lightning 组件的使用这使得采用新模型和修改代码比使用 fastai 容易得多。参考文献Sergei Popov, Stanislav Morozov, Artem Babenko. “Neural Oblivious Decision Ensembles for Deep Learning on Tabular Data”. arXiv:1909.06312 [cs.LG] (2019)Sercan O. Arik, Tomas Pfister. “TabNet: Attentive Interpretable Tabular Learning”. arXiv:1908.07442 (2019).后续计划作者将继续撰写独立的博客文章介绍 PyTorch Tabular 中目前已实现的不同模型。敬请期待。FINISHED更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手或者 我的个人博客 https://blog.qife122.com/对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享