【发布时间】:2018-11-04 17:55:07
【问题描述】:
我们如何确定要传递到特征工具中的深度特征合成的原语列表?
【问题讨论】:
标签: featuretools
我们如何确定要传递到特征工具中的深度特征合成的原语列表?
【问题讨论】:
标签: featuretools
有两种主要的方法来解决它
当数据集很大时,DFS 可能需要很长时间才能在个人计算机上运行。对于我们添加的每个原语,该原语将应用于所有有效关系中的所有有效列。
在这种情况下,添加原语比其他方式更仔细会很有帮助。当每个额外的基元都会为最终计算增加显着的时间时,检查基元是否正在创建有意义且重要的特征尤为重要。
在搭建的时候,我们大致按照这些步骤进行
您可以在predict-remaining-useful-life 演示中看到这方面的痕迹。我们只在每个笔记本中显示 3 个原语,这些原语是经过多次迭代后发现的。通过该演示的第二个笔记本,我们将 3 个原语中的一个 'last' 替换为来自 tsfresh 的 'complexity')以生成 302 个特征。 'complexity' 原语为我们的最终模型创建了 5 个最重要的特征中的 3 个,这比我们的原始模型要准确得多。
此方法节省了在完整数据集上使用不必要的原语进行计算的成本。缺点是结果特别主观。在每个级别,您都在选择您喜欢的原语和功能。这会导致个人偏见和轶事证据限制您最终模型的成功。为了避免这种情况,我们需要使用更多的计算资源。
在计算时间允许的情况下,另一种方法是从一个大的特征矩阵开始,然后从它开始工作。在这个范例中,我们将包括我们想要的每一个原语。从那里,我们将:
您可以在predict-next-purchase 演示中看到这种方法的结果。在那里,我们使用默认原语集为 12 列的数据框生成 161 个特征。从这些特征中,我们选择了我们最喜欢的 20 个与完整数据集一起使用。
这需要更多时间,但允许对特征空间进行更多程序化和可重复的探索。由于最终结果中的特征数量如此之多,因此更多的重点放在了特征选择方法上,而在选择基元时则需要较少的注意。
最后,请注意,找到要传递给 Featuretools 的最佳原语列表是从一个非常困难的问题(“选择特征的最佳方法是什么?”)中删除的一步。传递到深度特征合成中,一组 aggregation 和 transform 原语将确定性地生成一组特征。如果您要询问这些功能的最佳子集,您会得到不同的答案,具体取决于您询问的对象。答案将受限于(此处不按特定顺序列出):
【讨论】: