Python 2.7 TSFRESH python库处理时间太长

Python 2.7 TSFRESH python库处理时间太长,python-2.7,time,time-series,feature-extraction,Python 2.7,Time,Time Series,Feature Extraction,我偶然发现TSfresh库是一种对时间序列数据进行特征化的方法。文档非常好,似乎非常适合我正在进行的项目 我想实现以下代码,这些代码在TFresh文档的快速入门部分共享。这似乎很简单 from tsfresh import extract_relevant_features feature_filtered_direct=extract_relevant_features(result,y,column_id=0,column_sort=1) 我的数据包括400000行传感器数据,其中6个传感

我偶然发现TSfresh库是一种对时间序列数据进行特征化的方法。文档非常好,似乎非常适合我正在进行的项目

我想实现以下代码,这些代码在TFresh文档的快速入门部分共享。这似乎很简单

from tsfresh import extract_relevant_features
feature_filtered_direct=extract_relevant_features(result,y,column_id=0,column_sort=1)
我的数据包括400000行传感器数据,其中6个传感器分别对应15个不同的id。我开始运行代码,17个小时后它仍然没有完成。我认为这可能是一个太大的数据集,无法通过相关的功能提取器运行,因此我将其缩减到3000,然后进一步缩减到300。所有这些操作都没有使代码运行不到一个小时,而我只是在等待了一个小时左右后关闭了它。我也尝试了标准的功能提取器

extracted_features = extract_features(timeseries, column_id="id", column_sort="time")
同时尝试TSfresh在其快速入门部分中提供的示例数据集。其中包括一个与我的原始数据非常相似的数据集,数据点的数量与我减少到的数据点的数量大致相同

有没有人有过这方面的经验?你将如何让它工作得更快?我在Python2.7中使用Anaconda

更新 这似乎与多重处理有关。因为我在windows上,所以使用多进程代码需要

if __name__ == "__main__":
    main()
一旦我加上

if __name__ == "__main__":

    extracted_features = extract_features(timeseries, column_id="id", column_sort="time")

在我的代码中,示例数据起作用。在运行extract_related_features函数和在自己的数据集上运行extract features模块时,我仍然遇到一些问题。它似乎继续缓慢地运行。我感觉它也与多进程冻结有关,但如果没有出现任何错误,就无法判断了。在不到1%的数据集上运行提取功能大约需要30分钟

您使用了哪个版本的tsfresh?哪个操作系统

我们知道一些特征计算器的计算成本很高。我们对此无能为力。在将来,我们将实现一些技巧,如缓存,以进一步提高tsfresh的效率

您是否尝试过使用
最小特征提取设置
仅计算基本特征?它将只包含基本功能,如最大值、最小值、中间值等,但应该运行得更快

 from tsfresh.feature_extraction import MinimalFeatureExtractionSettings
 extracted_features = extract_features(timeseries, column_id="id", column_sort="time", feature_extraction_settings = MinimalFeatureExtractionSettings())

另外,通过
pip-install-git从repo安装最新版本可能是个好主意+https://github.com/blue-yonder/tsfresh
。我们正在积极开发,母版应包含最新和最新版本;)

语法略有变化(请参阅),当前的方法是:

from tsfresh.feature_extraction import EfficientFCParameters, MinimalFCParameters
extract_features(timeseries, column_id="id", column_sort="time", default_fc_parameters=MinimalFCParameters())


自版本0.15.0以来,我们改进了对
apachespark
dask
的绑定。 现在可以在通常的
dask
Spark
计算图中直接使用
tsfresh
特征提取

您可以在
tsfresh.concility.bindings
和文档中找到绑定。例如,对于dask,它看起来像这样(假设
df
dask.DataFrame
,例如我们示例中的机器人故障数据帧)

df=df.melt(id_vars=[“id”,“time”],
value_vars=[“F_x”,“F_y”,“F_z”,“T_x”,“T_y”,“T_z”],
var_name=“kind”,value_name=“value”)
df_grouped=df.groupby([“id”,“kind”])
features=dask_feature_extraction_on_chunk(df_分组,column_id=“id”,column_kind=“kind”,
column\u sort=“time”,column\u value=“value”,
默认_fc_参数=EfficientFCParameters())
#或任何其他参数集
使用
dask
Spark
(或任何类似的工具)可以帮助您处理非常大的数据—无论是内存还是速度(因为您可以将工作分配到多台机器上)。当然,我们仍然像以前一样支持普通分销商()

除此之外,还可以与任务编排系统一起运行
tsfresh
,例如
luigi
。您可以创建一个任务来 *仅读取一个
id
kind
*提取特征 *将结果写入磁盘
让luigi处理剩下的事情。您可能会发现这一点的一个可能实现。

当我在控制台外运行脚本时,会收到一些有趣的错误消息,这些消息在Anaconda中似乎没有显示出来。这些错误消息位于常量循环中,这可能解释了函数执行时间过长(无限长)的原因。生成的RuntineError与冻结支持()尝试在引导完成之前启动新进程有关。不确定这意味着什么我在Windows命令提示符下运行新进程时,在当前进程完成引导阶段之前启动新进程时会遇到相同的运行时错误。我在Windows上的Ubuntu中没有遇到这个错误。我目前在Windows 10上使用的是0.3.0版。我刚刚在大约197000行数据上运行了ExtractFeatures模块,花费了大约830。它的功能选择模块在运行时似乎需要更长的时间。在我的分析中,功能的充分补充是非常有用的。要将此操作扩展到数百万行,将占用相当大的计算能力。我们刚刚发布了版本0.4.0,它包含一个reasonalFeatureExtraction设置对象,该对象将提取除两个熵特征以外的所有熵特征。有了它,我可以在i6800k(4.3 Ghz的6个核)上处理100.000个长度为1000的时间序列,在大约3小时内处理1亿行。此外,我使用parallelization=“per_sample”从11.2版开始,它看起来像是
reasonalfeatureextraction
已被恰当地重命名为
EfficientFCParameters
extract_features(timeseries, column_id="id", column_sort="time", default_fc_parameters=EfficientFCParameters())