Featuretools Deep Feature Synthesis无法生成新特征求助排查
问题原因及解决方案
核心问题1:未定义实体间的关联关系
你只将三个数据集加入了EntitySet,但没有建立它们之间的关联(Relationship)。Deep Feature Synthesis的聚合特征(agg_primitives)需要跨实体的关联才能生成——比如从player_data或players表聚合统计到season_stats表。没有关联的话,DFS无法跨表计算聚合特征。
核心问题2:转换原语与数据类型不匹配
默认的trans_primitives依赖特定数据类型的字段:
day/year/month/weekday需要datetime类型的字段haversine需要经纬度数值字段num_words/num_characters需要文本类型的字段
如果你的三个数据集里没有对应类型的字段,这些转换原语不会生成任何新特征。
修复步骤
1. 添加实体关联
根据你的数据集逻辑,通过add_relationship建立表之间的关联。比如假设season_stats的name字段关联到players的name,players的name关联到player_data的name,代码如下:
entity_set = ft.EntitySet("basketball_players") # 添加数据集 entity_set.add_dataframe(dataframe_name="player_data", dataframe=player_data, index='name') entity_set.add_dataframe(dataframe_name="players", dataframe=players, index='name') entity_set.add_dataframe(dataframe_name="season_stats", dataframe=season_stats, index='name') # 添加关联关系 entity_set.add_relationship(ft.Relationship(entity_set["players"]["name"], entity_set["season_stats"]["name"])) entity_set.add_relationship(ft.Relationship(entity_set["player_data"]["name"], entity_set["players"]["name"])) # 重新运行DFS feature_matrix, features = ft.dfs(target_dataframe_name="season_stats", entityset=entity_set, max_depth=3)
2. 匹配转换原语的字段类型
- 检查数据集里是否有datetime、文本或经纬度字段,若没有,要么补充对应数据,要么显式指定通用的转换原语(比如针对数值字段的
"absolute"、"divide"等),示例:
feature_matrix, features = ft.dfs( target_dataframe_name="season_stats", entityset=entity_set, max_depth=3, trans_primitives=["absolute", "divide"] # 显式指定通用转换原语 )
内容的提问来源于stack exchange,提问作者idunskyi
相关产品推荐
相关产品推荐

