【机器学习】特征工程的最佳实践

特征工程是为机器学习创建新输入功能的过程,是改进预测模型的最有效方法之一。

提出功能很困难,耗时,需要专业知识。“应用机器学习”基本上是特征工程。~Andrew Ng

通过功能工程,您可以隔离关键信息,突出显示模式并引入领域专业知识。

不出所料,它很容易被卡住,因为功能工程是如此开放。

在本指南中,我们将讨论20个最佳实践和启发式方法,它们将帮助您浏览特征工程。

 

什么是特征工程?

特征工程是一个非正式主题,有许多可能的定义。机器学习工作流程是流动和迭代的,所以没有人“正确答案”。

我们将在第4章:数据科学入门的特征工程(在新窗口中打开)中更详细地解释我们的方法。

简而言之,我们将特征工程定义为  从现有特征创建新特征以提高模型性能。

典型的数据科学过程可能如下所示:

  1. 项目范围/数据收集
  2. 探索性分析
  3. 数据清理
  4. 特征工程
  5. 模型培训(包括调整超参数的交叉验证)
  6. 项目交付/见解

什么是非特征工程?

这意味着我们不考虑将某些步骤作为特征工程:

  • 我们不认为初始数据收集是特征工程。
  • 同样,我们不考虑将目标变量创建为特征工程。
  • 我们不考虑删除重复项,处理缺失值或将错误标记的类修复为特征工程。我们把这些放在数据清理下
  • 我们不认为缩放或规范化是特征工程,因为这些步骤属于交叉验证循环(即在您已经构建了分析基表之后)。
  • 最后,我们不认为特征选择或PCA是特征工程。这些步骤也属于交叉验证循环。

同样,这只是我们的分类。合理的数据科学家可能不同意,这完全没问题。

有了这些免责声明,让我们深入了解最佳实践和启发式方法!

 

指标变量

第一种类型的特征工程涉及使用指示符变量来隔离关键信息。

现在,你们中的一些人可能会想,“难道一个好的算法不应该自己学习关键信息吗?”

好吧,并非总是如此。这取决于您拥有的数据量和竞争信号的强度。您可以通过事先突出显示它来帮助您的算法“专注”重要事项。

  • 来自阈值的指标变量:假设您正在研究美国消费者的酒精偏好,并且您的数据集具有 年龄 特征。您可以为年龄> = 21 创建指标变量,  以区分超过法定饮酒年龄的受试者。
  • 来自多个功能的指标变量:  您正在预测房地产价格,并且您具有n_bedrooms  和n_bathrooms的功能 。如果拥有2张床和2个浴室的房屋作为出租房产获得溢价,您可以创建一个指示变量来标记它们。
  • 特殊事件的指标变量:  您正在为电子商务网站的每周销售建模。您可以为黑色星期五和圣诞节创建两个指标变量。
  • 类组的指标变量:您正在分析网站转换,而您的数据集具有分类功能 traffic_source。您可以 通过使用“Facebook广告”  或 “Google Adwords”的流量来源值标记观察结果  来为paid_traffic创建指标变量 。

互动功能

下一类特征工程涉及突出显示两个或多个特征之间的交互。

您是否听过这句话,“总和大于部分?”嗯,有些功能可以结合起来提供比个人更多的信息。

具体而言,寻找机会获取多个特征的总和,差异,产品或商。

*注意:我们不建议使用自动循环来为您的所有功能创建交互。这导致“特征爆炸”。

  • 两个特征的总和:假设您希望根据初步销售数据预测收入。您具有sales_blue_pens  和sales_black_pens的功能 。如果您只关心整体sales_pens,可以对这些功能进行 总结
  • 两个功能之间的区别:您具有 house_built_date  和 house_purchase_date功能。您可以通过他们的不同来创建功能 house_age_at_purchase
  • 两个功能的产品:您正在运行定价测试,并且您具有功能 价格  和指标变量 转换。您可以使用他们的产品来创建功能 收入
  • 两个功能的商数:您有一个营销活动的数据集,其中包含 n_clicks  和 n_impressions功能。您可以按展示次数划分点击次数以创建  click_through_rate,从而可以比较不同数量的广告系列。

特征表示

下一种类型的特征工程既简单又有影响力。它被称为特征表示。

您的数据并不总是理想的格式。您应该考虑是否通过以不同方式表示相同功能来获取信息。

  • 日期和时间功能:  假设您具有purchase_datetime功能 。提取purchase_day_of_week  和purchase_hour_of_day可能更有用 。您还可以聚合观察以创建诸如purchases_over_last_30_days之类的功能
  • 数字到分类映射:您具有years_in_school功能 。您可以 使用“小学”, “中学”和 “高中”等课程 创建新的功能 等级
  • 对稀疏类进行分组:您具有许多具有低样本计数的类的功能。您可以尝试对类似的类进行分组,然后将剩余的类分组为单个 “其他”  类。
  • 创建虚拟变量:根据您的机器学习实现,您可能需要手动将分类特征转换为虚拟变量。对稀疏类进行分组之后,您应该始终执行此操作  。

外部数据

未充分利用的特征工程类型正在引入外部数据。这可以带来性能方面的一些最大突破。

例如,单向量化对冲基金进行研究的方法是将不同的金融数据流分层。

许多机器学习问题可以从引入外部数据中受益。这里有些例子:

  • 时间序列数据:关于时间序列数据的好处是,您只需要一个特征,某种形式的 日期,来分层来自另一个数据集的特征。
  • 外部API:有很多API可以帮助您创建功能。例如,Microsoft Computer Vision API可以返回图像中的面数。
  • 地理编码:让我们说你有 street_address, city和 state。那么,你可以将  它们地理编码为 纬度  和 经度。这将允许您在另一个数据集的帮助下计算诸如本地人口统计特征(例如,median_income_within_2_miles)之类的功能。
  • 相同数据的其他来源:  您可以通过多少种方式跟踪Facebook广告系列?您可能拥有Facebook自己的跟踪像素,Google Analytics以及可能还有其他第三方软件。每个来源都可以提供其他人不跟踪的信息。此外,数据集之间的任何差异都可能提供信息(例如,一个来源忽略而另一个来源保留的机器人流量)。

错误分析(后建模)

我们将介绍的最终类型的特征工程属于一个称为错误分析的过程。这是  训练您的第一个模型执行的  。

错误分析是一个广义的术语,指的是分析模型中错误分类或高错误的观察结果,并决定您的下一步改进措施。

可能的后续步骤包括收集更多数据,拆分问题或设计解决错误的新功能。要将功能工程使用误差分析,你需要明白  ,为什么  你的模型错过了标记。

就是这样:

  • 从较大的错误开始:错误分析通常是手动过程。你没有时间仔细检查每一个观察结果。我们建议从错误分数较高的那些开始。寻找可以形式化为新功能的模式。
  • 按类别划分:另一种技术是对观察结果进行细分,并比较每个细分中的平均误差。您可以尝试为具有最高错误的段创建指示符变量。
  • 无监督聚类:如果您在查找模式时遇到问题,可以对错误分类的观察值运行无监督聚类算法。我们不建议盲目地将这些群集用作新功能,但它们可以更容易地发现模式。请记住,目标是理解  为什么观察被错误分类。
  • 询问同事或领域专家:这是对其他三种技术的很好补充。如果您已经确定了性能不佳的模式(例如通过分段)但是尚不明白原因,那么询问领域专家会特别有用。

结论

如您所见,功能工程有很多可能性。我们已经介绍了20种最佳实践和启发式方法,但它们并非详尽无遗!

当您开始自己尝试时,请记住这些一般准则:

工程师的好功能......

  • 可以计算用于将来的观察。
  • 通常是直观的解释。
  • 通过领域知识或探索性分析获知。
  • 必须具备预测潜力。不要只是为了它创建功能。
  • 切勿触摸目标变量。这是一个初学者有时陷入的陷阱。无论您是创建指标变量还是交互功能,都不​​要使用目标变量。这就像“作弊”,它会给你带来非常误导的结果。

最后,如果现在感觉压倒一切,请不要担心!通过实践和经验,您自然会在功能工程方面变得更好。

原文链接:https://elitedatascience.com/feature-engineering-best-practices

猜你喜欢

转载自blog.csdn.net/chenvast/article/details/81196568
今日推荐