转换基元的深度特征合成深度 |功能工具

问题描述

我正在尝试使用 featuretools 库在一个简单的数据集上创建新功能,但是,每当我尝试使用更大的 max_depth 时,都没有任何反应......这是我目前的代码

# imports
import featuretools as ft

# creating the EntitySet
es = ft.EntitySet()
es.entity_from_dataframe(entity_id='data',dataframe=data,make_index=True,index='index')

# Run deep feature synthesis with transformation primitives
feature_matrix,feature_defs = ft.dfs(entityset=es,target_entity='data',max_depth=3,trans_primitives=['add_numeric','multiply_numeric'])

当我查看创建的特征时,我得到了基本的东西 f1*f2f1+f2,但我想要更复杂的工程特征,如 f2*(f1+f2)f1+(f2+f1)。我认为增加 max_depth 会做到这一点,但显然不是。
如果有的话,我怎么能做到这一点?

解决方法

很遗憾,featuretools 并不容易支持这个用例,因为它似乎很常见。我发现最好的方法是使用 dfs 函数创建您想要的一阶特征,然后手动添加您想要的二阶特征。

例如,下面的 MWE(使用 iris 数据集)使用 AddNumeric 执行 dfs 原语,然后仅使用原始特征(和避免相同的基本特征在转换后的特征中多次出现)。

DivideNumeric

这种方法的好处是它为您提供了更细粒度的控制来自定义您想要的方式,并避免创建您不想要的不必要特征的计算成本。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...