机器学习中特征工程的最佳实践 - mark


特征工程是为表格数据构建出色模型的最重要部分。我重新审视了过去从事的数十个表格 ML 项目,并将我使用的技术提炼为可重复的、强大的流程。这是我发现的:

先从让我们处理 NaN 开始:
选项 #1:用有意义的值填充它们 如果“NaN 销售”意味着只是没有交易,那么用零填充是完全合理的。

选项 #2:让您的模型处理它!许多流行的梯度提升库(如 XGBoost 或 LightGBM)都可以处理 NaN,因此您也可以尝试一下。这通常会提供最佳性能。

选项 #3:回退到默认方法

对于连续特征:
• 用均值填充
• 填充中位数
• 填零

对于分类特征:
• 填充模式
• 用负值填充(对于树模型)
• 频率编码

分类数据categorical data

  • 使用 GBDT/RF?尝试标签编码label encoding。
  • 线性模型/支持向量机/相似模型?尝试虚拟编码dummy encoding。
  • 使用神经网络?尝试标签编码和使用嵌入层embedding layers。

连续数据:
如果您使用的是基于树的模型,您可能不需要做任何事情,除非您是线性提升。

否则,请尝试标准化或规范化。

如果一个变量有一个奇怪的分布,尝试对数或 sqrt 转换,甚至像 Box-Cox。

如何创建特征
这有点不太结构化,更多的是关于拥有大量的想法并在必要时部署它们。

如果您有日期列,请提取所有有用的组成部分,例如星期几、一年中的星期、一天中的小时等。同样,地址可以分解为州、城市、纬度、经度等。

如果您的数据具有时间序列方面,请尝试创建滚动窗口计算(通常均值和标准差就足够了)以及滞后特征。

尝试将分类数据拆分为多个字段,或将多个分类字段合并为一个。

在列之间创建交互项,例如将它们相减或相乘。基于树的模型很难接受这些类型的交互。

是否有产品层次结构数据、日期、城市等组字段?尝试对这些组(均值、中值、stddev 等)创建聚合。这通常是您的大部分机会所在。您可以通过多种方式对分组数据进行切片和切块。

尝试对您的数据运行像 k-means 这样的聚类,并将每一行的聚类标签添加为一个特征。

尝试对您的数据运行 PCA,然后在这些特征上构建模型或将 PCA 特征添加到您的原始数据集。(或任何其他降维技术)

堆叠Stacking当然是特征工程的一种形式!您可以添加来自基线模型的预测(如线性回归)。
RecSys 中的一项常见技术是添加相似性特征,即使是来自像 Word2Vec 这样的神经网络类型的模型。