从一个非常小的数据帧(<1k 行)中提取日月和年的时间序列ft.dfs(...)
和在某些时间序列上的执行大约需要 800 毫秒。ft.calculate_feature_matrix(...)
当我根本不计算任何特征时,它仍然需要大约 750 毫秒。是什么导致了这种开销,我该如何减少它?
我已经测试了不同的功能组合,并在一堆小数据帧上进行了测试,执行时间非常稳定,在 700-800 毫秒之间。
我还在超过 100 万行的更大数据帧上对其进行了测试。没有任何实际特征(原语)的执行时间与所有日期特征在 80-90 秒左右的执行时间相当。所以看起来计算时间取决于行数而不是特征?
我正在运行 n_jobs=1 以避免并行性的任何怪异。在我看来,featuretools 每次都在为 dask 后端进行一些配置或设置,这导致了所有开销。
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 需要 800 毫秒才能在一个小数据帧上计算任何内容。解决方案是否只是为了避免小数据帧并在大数据帧上使用自定义原语计算所有内容以减轻开销?或者是否有更聪明/更正确的方式来使用ft.dfs(...)
or ft.compute_feature_matrix
。