在某个时间序列上同时执行ft.dfs(...)
和ft.calculate_feature_matrix(...)
来从很小的数据帧(<1k行)中提取日月和年需要大约800毫秒。当我完全不计算任何功能时,仍然需要大约750毫秒。是什么造成了这种开销,我该如何减少呢?
我已经测试了功能的不同组合,并在一堆小型数据帧上对其进行了测试,并且执行时间相当稳定,为700-800ms。
我也已经在大于100万行的更大数据帧上对其进行了测试。没有任何实际功能(原始)的执行时间与所有日期功能在80-90秒左右的时间相当。看来计算时间取决于行数而不取决于功能?
我正在使用n_jobs = 1来避免并行性的任何怪异。在我看来,featuretools每次都在为轻快的后端做一些配置或设置,这造成了所有开销。
es = ft.EntitySet(id="testing")
es = es.entity_from_dataframe(
entity_id="time_series",
make_index=True,
dataframe=df_series[[
"date",
"flag_1",
"flag_2",
"flag_3",
"flag_4"
]],
variable_types={},
index="id",
time_index="date"
)
print(len(data))
features = ft.dfs(entityset=es, target_entity="sales", agg_primitives=[], trans_primitives=[])
实际输出似乎是正确的,令我惊讶的是FeatureTools将花费800ms的时间在一个小的数据帧上不进行任何计算。解决方案是否只是为了避免使用较小的数据帧并在大型数据帧上使用自定义原语来计算所有内容以减轻开销?还是有一种更聪明/更正确的使用ft.dfs(...)
或ft.compute_feature_matrix
的方式。