如何确定用于DFS的原语?

时间:2018-05-25 10:44:12

标签: featuretools

我们如何确定要传递到featuretools中的深层特征合成的基元列表?

1 个答案:

答案 0 :(得分:2)

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

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

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

    在这种情况下,更有效地添加基元是有帮助的。当每个附加基元为最终计算增加显着的时间时,检查基元是否正在创建有意义且重要的特征尤为重要。

    在构建时,我们大致遵循这些步骤

    1. 仅在实体集的一小部分上使用DFS,以便快速查看结果
    2. 目视检查生成的功能,以确保它们有意义,并计算您认为他们正在计算的内容
    3. 检查是否正在生成您想要的任何特定功能
    4. 使用模型并在验证集上为更多行划分特征矩阵,以查看哪些特征看起来很有前途,哪些不合适
    5. 添加和删除基元,重复
    6. 您可以在predict-remaining-useful-life演示中看到此内容的痕迹。我们只在每个笔记本中显示3个基元,这些基元在几次迭代后被发现。通过该演示的第二个笔记本,我们将来自tsfresh'last'的3个原语'complexity'之一进行交易,以生成302个特征。 'complexity'基元为我们的最终模型创建了5个最重要的特征中的3个,这比我们的原始模型更准确。

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

      大做修剪

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

      1. 使用许多基元构建完整的特征矩阵
      2. 测试各种特征选择算法的结果
      3. 目视检查特别好的和特别糟糕的功能,以确保没有错误
      4. 根据结果添加自定义基元
      5. 重复
      6. 您可以在predict-next-purchase演示中查看此方法的结果。在那里,我们使用默认基元集为具有12列的数据帧生成161个特征。从这些功能中,我们选择我们最喜欢的20与完整数据集一起使用。

        这需要更多时间,但允许对特征空间进行更多编程和可重复的探索。由于最终结果中的特征数量如此之多,因此更加强调特征选择方法,而在选择基元时则需要更少的关注。

        最后,请注意找到要传递给Featuretools的最佳基元列表是从一个非常困难的问题中删除的一步 - “选择要素的最佳方式是什么?”通过深度特征合成,一组聚合 transform 原语将确定性地生成一组特征。如果您要求这些功能的最佳子集,您可以根据您的要求获得不同的答案。答案将受到限制(在此处没有特别排列):

        • 正在使用哪些算法进行选择,
        • 对特征的可解释性的渴望,
        • 您要优化的指标和型号。