我们如何确定要传递到featuretools中的深度特征合成的基元列表?
发布于 2018-06-16 06:57:10
有两种主要的方法可以做到这一点
积聚
当数据集很大时,DFS可能需要很长时间才能在个人计算机上运行。对于我们添加的每个基元,该基元将应用于所有有效关系中的所有有效列。
在这种情况下,比起其他方式,更仔细地添加原语是很有帮助的。特别重要的是,当每个额外的基元为最终计算增加了显着的时间量时,检查基元是否正在创建有意义和重要的功能。
在构建时,我们大致遵循以下步骤
您可以在predict-remaining-useful-life演示中看到这方面的痕迹。我们只在几次迭代后发现的每个笔记本中显示了3个基元。在演示的第二个笔记本中,我们用我们的3个原语'last'
中的一个来交换tsfresh的'complexity'
)来生成302个特征。'complexity'
原语为我们的最终模型创建了5个最重要的特征中的3个,这比我们的原始模型更准确。
这种方法节省了在整个数据集上使用不必要的基元进行计算的成本。缺点是,结果是特别主观的。在每个级别上,您都在选择您喜欢的原语和特性。这导致了个人偏见和轶事证据限制了你最终模型的成功。为了避免这种情况,我们需要使用更多的计算资源。
变大和修剪
在计算时间允许的情况下,另一种方法是从一个大的特征矩阵开始,然后在此基础上工作。在这个范例中,我们将包含我们想要的每一个原语。从那里开始,我们将:
使用许多primitives
您可以在predict-next-purchase演示中看到此方法的结果。在这里,我们使用默认原语集为具有12列的数据帧生成161个特征。从这些特征中,我们选择我们最喜欢的20个来使用完整的数据集。
这需要更多的时间,但允许对特征空间进行更具程序性和可重复性的探索。由于最终结果中的特征数量如此之多,因此更多地强调特征选择方法,而在选择基元时需要更少的关注。
最后,请注意,找到要传递给Featuretools的原语的最佳列表是一个非常困难的问题--“选择功能的最佳方式是什么?”通过深入的特征合成,一组聚合和转换原语将确定地生成一组特征。如果你问这些特性的最佳子集,你会得到不同的答案,这取决于你问的是谁。答案将受到以下条件的限制(此处没有列出特定的顺序):
https://stackoverflow.com/questions/50527392
复制相似问题