特征工程:基于梯度提升的模型的特征编码效果测试
为梯度提升学习选择默认的特征编码策略需要考虑的两个重要因素是训练时间和与特征表示相关的预测性能。Automunge库是处理表格数据常用的库,它可以填充空值,也可以进行分类的编码和归一化等操作,默认的境况下Automunge对分类特征进行二值化处理,并对数值特征进行z-score归一化。本文将通过对一系列不同数据集进行基准测试来验证这些默认值是否是最优化的选项。
长期以来特征工程对深度学习应用的有用性一直被认为是一个已解决的否定问题,因为神经网络本身就是通用函数逼近器(Goodfellow et al., 2016)。但是即使在深度学习的背景下,表格特征也经常使用某种形式的编码进行预处理。Automunge (Teague, 2022a) 这个 python 库最初是为数字和分类特征的基本编码而构建的,例如 z-score 标准化和 one-hot 编码。在迭代开发过程中开始加入了完整的编码选项库,包括一系列数字和分类特征选项,现在也包括自动的规范化、二值化、散列和缺失数据填充场景。尽管这些编码选项可能对于深度学习来说是多余的,但这并不排除它们在其他模型中的效用,包括简单回归、支持向量机、决策树或本文的重点梯度提升模型。
本文目的是展示梯度提升模型下表格数据中的数字和分类特征的各种编码策略之间的基准测试研究的结果。
梯度提升
梯度提升 (Friedman, 2001) 是一种类似于随机森林 (Briemen, 2001) 的决策树学习范式 (Quinlan, 1986),通过递归训练迭代的目标以纠正前一次迭代的性能来提升优化模型。在实践中一般都会使用 XGBoost 库 (Chen & Guestrin, 2016) 和 LightGBM (Ke et al, 2017) 来进行建模。
到目前为止梯度提升还是被认为是 Kaggle 平台上表格模态竞赛的获胜解决方案,甚至在用于基于窗口的回归时,它的效率也在更复杂的应用(如时间序列顺序学习)中得到证明(Elsayed ,2022 ) .最近的表格基准测试论文中也说明,梯度提升可能仍然在大多数情况下胜过复杂的神经架构,如transformers (Gorishniy ,2021)。
传统观点认为,对于表格应用程序梯度提升模型具有比随机森林更好的性能,但在没有超参数调整的情况下会增加过度拟合的概率(Howard & Gugger,2020)。与随机森林相比,梯度提升对调整参数的敏感性更高,并且运行的参数数量更多,所以通常需要比简单的网格或随机搜索更复杂的调整。这样就出现了各种不同的超参数搜索的方法,例如一种可用的折衷方法是通过不同的参数子集进行顺序网格搜索(Jain,2016 ), Optuna 等黑盒优化库(Akiba ,2019 年)可以使用更自动化甚至并行化的方法进行超参数的搜索,这也是行业研究的一个活跃的方向。
特征编码
特征编码是指用于为机器学习准备数据的特征集转换。特征编码准备的常见形式包括数字特征标准化和分类特征的编码,尽管一些学习库(catboost)可能接受字符串表示中的分类特征并进行内部编码,但是手动的进行分类特征的转换还是有必要的。在深度学习出现之前,通常使用提取信息的替代表示来补充特征或以某种方式进行特征的组合来进行特征的扩充,这种特征工程对于梯度提升学习来说还是可以继续使用的。所以本文的这些基准的目的之一是评估实践与直接对数据进行训练相比的好处。
特征编码的一个重要问题就是需要领域知识,例如基于填充数值分布派生的 bin 与基于外部数据库查找提取 bin 来补充特征之间是否有很大的区别?在 Automunge 的情况下,内部编码库的编码基于固有的数字或字符串属性,并且不考虑可以根据相关应用程序域推断出的相邻属性。(日期时间格式的功能例外,它在自动化下自动提取工作日、营业时间、节假日等,并根据不同时间尺度的循环周期对条目进行冗余编码)
数字特征
数值标准化在实践中最常被使用的,例如z-score。在实践中可能发现的其他变化包括mean scaling 和max scaling 。更复杂的约定可以转换除尺度之外的分布形状,例如 box-cox 幂律变换(Box & Cox, 1964) 或Scikit-Learn 的分位数转换器qttf(Pedregosa ,2011),都可以将特征转换成一个更像高斯分布的特性集。数字归一化更常用于线性模型,而不是树的模型,例如在神经网络中,它们的目的是跨特征进行归一化梯度更新,应用于数值特征的标准化类型似乎会影响性能。
分类特征
分类编码通常在实践中使用独热编码进行转换,这种热编码的做法在高基数情况下存在缺陷(分类很多导致生成的特征多并且离散),梯度提升模型中分类标签过多时甚至可能导致训练超过内存限制。Automunge 库试图以两种方式规避这种高基数边缘情况,首先是默认使用二值化编码而不是独热编码,其次是通过区分哈希编码的最高基数集(Teague,2020a),减少唯一条目的数量。
分类二值化是可以理解为将模拟信号转换成数字信号过程中的量化,返回特征中每一个byte位代表是否属于该类
分类表示的第三种常见编码方式是标签编码,他将分类表示为一个连续的数值型变量。
基准基准
本文的基准测试是通过训练时间和模型性能这两个关键性能指标来评估一系列数字和分类编码场景。在配备 AMD 3970X 处理器、128Gb RAM 和两个 Nvidia 3080 GPU 的 Lambda 工作站上进行了约 1.5 周的测试。训练是通过 Optuna 调整的 XGBoost 进行的,具有 5-fold快速交叉验证 (Swersky et al, 2013) 和 如果33 次调整迭代没有改进则停止训练。性能指标是对25% 验证集进行根据 f1 分数评估进行的。
完整文章:
https://www.overfit.cn/post/32b4d95e1c64425084a53f7ce522c188
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-03-23 生物学中的机器学习:使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?