【问题标题】:How to decide which primitives to use for DFS?如何决定将哪些原语用于 DFS?
【发布时间】:2018-11-04 17:55:07
【问题描述】:

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

【问题讨论】:

    标签: featuretools


    【解决方案1】:

    有两种主要的方法来解决它

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

    建立

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

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

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

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

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

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

    变大和修剪

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

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

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

    这需要更多时间,但允许对特征空间进行更多程序化和可重复的探索。由于最终结果中的特征数量如此之多,因此更多的重点放在了特征选择方法上,而在选择基元时则需要较少的注意。

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

    • 哪些算法用于选择,
    • 渴望特征的可解释性,
    • 您正在尝试优化哪个指标和模型。

    【讨论】:

      猜你喜欢
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2012-02-26
      相关资源
      最近更新 更多