我偶然看到了TSfresh库,这是一种对时间序列数据进行特性化的方法。文档是伟大的,它似乎是完美的适合我正在进行的项目。
我想实现在TFresh文档的快速启动部分中共享的以下代码。而且看起来很简单。
from tsfresh import extract_relevant_features
feature_filtered_direct=extract_relevant_features(result,y,column_id=0,column_sort=1)
我的数据包括40万行传感器数据,每个传感器有15个不同的id,我开始运行代码,17个小时后,代码仍未完成。我认为这可能是太大的一组数据,无法通过相关的特性提取器运行,所以我把它削减到3000,然后进一步降低到300。这些操作都没有使代码运行不到一个小时,我只是在等待了大约一个小时后才关闭它。我也尝试了标准的特征提取器。
extracted_features = extract_features(timeseries, column_id="id", column_sort="time")
同时尝试TSfresh在其快速启动部分中提供的示例数据集。它包括一个与我的原始数据非常相似的数据集,与我减少到的数据点数量大致相同。
有人对这段代码有经验吗?你要怎么做才能让它工作得更快?我将Anaconda用于python2.7。
更新似乎与多处理相关。因为我在windows上,所以使用多进程代码需要
if __name__ == "__main__":
main()
有一次我
if __name__ == "__main__":
extracted_features = extract_features(timeseries, column_id="id", column_sort="time")
对我的代码来说,示例数据起作用了。在运行extract_relevant_features函数和在自己的数据集中运行提取功能模块时,我仍然有一些问题。它似乎在继续缓慢地运行。我有一种感觉,它与多进程冻结也有关系,但没有任何错误,不可能说出来。在不到1%的数据集中,我需要大约30分钟的时间来提取特征。
发布于 2016-12-18 19:26:45
你用的是哪一种?哪个操作系统?
我们知道某些特征计算器的计算成本很高。我们对此无能为力。在未来,我们将实现一些技巧,如缓存,以进一步提高to的效率。
您试过使用MinimalFeatureExtractionSettings
只计算基本特性吗?它将只包含一些基本功能,如Max、Min、中值等,但应该以更快的速度运行。
from tsfresh.feature_extraction import MinimalFeatureExtractionSettings
extracted_features = extract_features(timeseries, column_id="id", column_sort="time", feature_extraction_settings = MinimalFeatureExtractionSettings())
另外,通过pip install git+https://github.com/blue-yonder/tsfresh
从回购版安装最新版本可能是个好主意。我们正在积极开发它,主人应该包含最新和最新的版本;)
发布于 2019-08-08 12:42:56
语法略有改变(请参阅文档),目前的方法是:
from tsfresh.feature_extraction import EfficientFCParameters, MinimalFCParameters
extract_features(timeseries, column_id="id", column_sort="time", default_fc_parameters=MinimalFCParameters())
或
extract_features(timeseries, column_id="id", column_sort="time", default_fc_parameters=EfficientFCParameters())
发布于 2020-04-14 19:46:27
自0.15.0版本以来,我们改进了Apache Spark
和dask
的绑定。现在可以直接在通常的tsfresh
或Spark
计算图中使用dask
特征提取。
您可以在tsfresh.convenience.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_grouped, column_id="id", column_kind="kind",
column_sort="time", column_value="value",
default_fc_parameters=EfficientFCParameters())
# or any other parameter set
使用dask
或Spark
(或任何类似的东西)都可以帮助您处理非常大的数据--无论是内存还是速度(因为您可以在多台机器上分发工作)。当然,我们仍然像以前一样支持通常的分销商(多古)。
除此之外,还可以与任务编排系统(如tsfresh
)一起运行luigi
。您可以创建一个任务,只为一个id
和kind
*读取数据*提取特性*将结果写入磁盘,并让luigi
处理其余的所有内容。您可能会发现这个在我的博客上的一个可能的实现。
https://stackoverflow.com/questions/41148099
复制相似问题