首页 > 解决方案 > 如何决定将哪些原语用于 DFS?

问题描述

我们如何决定要传递到特征工具中的深度特征合成的原语列表?

标签: featuretools

解决方案


有两种总体方法可以解决这个问题

  1. 如果您在计算上受到限制,请从几个基元开始并构建最终的基元集。
  2. 如果数据集很小(相对于所讨论的计算机),我们可以选择许多原语开始,然后依靠超参数优化和特征选择来修剪得到的特征矩阵。

建起来

当数据集很大时,DFS 可能需要很长时间才能在个人计算机上运行。对于我们添加的每个原语,该原语将应用于所有有效关系中的所有有效列。

在这种情况下,比其他方式更仔细地添加基元会很有帮助。当每个额外的基元为最终计算增加显着的时间时,检查基元是否正在创建有意义和重要的特征尤其重要。

在搭建的时候,我们大致按照这些步骤

  1. 仅在实体集的一小部分上使用 DFS,以便您可以快速查看结果
  2. 目视检查生成的特征以确保它们有意义并且正在计算您认为它们正在计算的内容
  3. 检查是否正在生成您想要的任何特定功能
  4. 使用模型并在验证集上对具有更多行的特征矩阵进行评分,以查看哪些特征看起来很有希望,哪些没有
  5. 添加和删​​除基元,重复

你可以在predict-remaining-useful-life演示中看到这个痕迹。我们只在每个笔记本中显示 3 个原语,这些原语是经过多次迭代后发现的。通过该演示的第二个笔记本,我们将 3 个原语中的一个替换'last''complexity'from tsfresh ) 以生成 302 个特征。该'complexity'原语为我们的最终模型创建了 5 个最重要的特征中的 3 个,这比我们的原始模型要准确得多。

这种方法节省了在整个数据集上使用不必要的原语进行计算的成本。缺点是结果特别主观。在每个级别,您都在选择您喜欢的原语和功能。这会导致个人偏见和轶事证据限制您最终模型的成功。为了避免这种情况,我们需要使用更多的计算资源。

变大和修剪

在计算时间允许的情况下,另一种方法是从一个大的特征矩阵开始并从它开始工作。在这个范例中,我们将包括我们想要的每一个原语。从那里,我们将:

  1. 构建具有许多基元的全特征矩阵
  2. 测试各种特征选择算法的结果
  3. 目视检查特别好的和特别差的特征,以确保没有任何问题
  4. 根据结果​​添加自定义原语
  5. 重复

您可以在predict-next-purchase演示中看到这种方法的结果。在那里,我们使用默认的原语集为具有 12 列的数据框生成 161 个特征。从这些特征中,我们选择了我们最喜欢的 20 个与完整数据集一起使用。

这需要更多时间,但允许对特征空间进行更多程序化和可重复的探索。因为最终结果中的特征数量如此之多,所以更多地强调特征选择方法,而在选择基元时需要较少的注意。

最后,请注意,找到一个最佳的原语列表以传递给 Featuretools 是从一个非常困难的问题(“选择特征的最佳方式是什么?”)中删除的一步。传递到深度特征合成中,一组聚合转换原语将确定性地生成一组特征。如果您要询问这些功能的最佳子集,您会得到不同的答案,具体取决于您询问的对象。答案将受限于(此处不按特定顺序列出):

  • 哪些算法被用于选择,
  • 对特征的可解释性的渴望,
  • 您要优化的指标和模型。

推荐阅读