I want to create complex features like [(a-b)/c or (a-b)/a]
This can be achieved by running feature tools multiple times so that first one creates features like a-b or a+b or a/b and then next run would create more complex features.
As I try to do this using the following code samples:
import featuretools as ft
def multi_level_feature_creation(X, trans_primitives_per_level):
feature_matrix = X
for i,trans_primitives in enumerate(trans_primitives_per_level):
print("Level: ", i)
print("Columns: ", feature_matrix.columns)
es = ft.EntitySet(id = 'dataset')
dataframe_name = "data" + str(i)
es = es.add_dataframe(
dataframe_name=dataframe_name,
dataframe=feature_matrix,
index="index" + str(i)
)
feature_matrix, feature_defs = ft.dfs(entityset = es, target_dataframe_name = dataframe_name,
trans_primitives = trans_primitives)
return feature_matrix, feature_defs
X = df.drop(["target"], axis=1)
y = df["target"]
features_per_level = [
['add_numeric', 'multiply_numeric', 'subtract_numeric', 'divide_numeric', 'multiply_numeric_scalar'],
['add_numeric', 'multiply_numeric', 'subtract_numeric', 'divide_numeric', 'multiply_numeric_scalar'],
# ['add_numeric', 'multiply_numeric', 'subtract_numeric', 'divide_numeric', 'multiply_numeric_scalar']
]
feature_matrix, feature_defs = multi_level_feature_creation(X, features_per_level)
print(type(feature_matrix))
feature_matrix.head()
When I run it with single level it works fine. The issue occurs when running on more than one levels:
ValueError: Cannot add a Woodwork DataFrame to EntitySet without a name
How to handle that?