我遇到了TSfresh库,作为一种特色化时间序列数据的方法。文档很棒,似乎非常适合我正在进行的项目。
我想实现以下代码,这些代码在TFresh文档的快速入门部分中共享。这似乎很简单。
from tsfresh import extract_relevant_features
feature_filtered_direct=extract_relevant_features(result,y,column_id=0,column_sort=1)
我的数据包括40万行传感器数据,每个传感器有6个传感器,用于15个不同的ID。我开始运行代码,17个小时后它还没有完成。我认为这可能是一个太大的数据集,无法通过相关的功能提取器运行,所以我将其削减到3000,然后进一步降低到300.这些操作都没有使代码在一小时内运行,我刚刚结束一小时左右的等待后关闭它。我也试过了标准特征提取器
extracted_features = extract_features(timeseries, column_id="id", column_sort="time")
尝试TSfresh在其快速入门部分提供的示例数据集。其中包括一个与我的原始数据非常相似的数据集,与我减少的数据点大致相同。
有没有人对此代码有任何经验?你会如何让它更快地运作?我使用Anaconda for python 2.7。
更新 它似乎与多处理有关。因为我在Windows上,所以使用多进程代码需要受
保护if __name__ == "__main__":
main()
我添加
if __name__ == "__main__":
extracted_features = extract_features(timeseries, column_id="id", column_sort="time")
对于我的代码,示例数据有效。我在运行extract_relevant_features函数和在我自己的数据集上运行提取功能模块时仍遇到一些问题。似乎它继续缓慢运行。我有一种感觉它也与多进程冻结有关,但没有任何错误突然出现它无法分辨。它花了我大约30分钟的时间来提取不到1%的数据集中的功能。
答案 0 :(得分:5)
您使用的是哪个版本的tsfresh?哪个OS?
我们意识到某些特征计算器的高计算成本。我们可以做的事情少得多。在未来,我们将实施一些技巧,如缓存,以进一步提高tsfresh的效率。
您是否尝试使用MinimalFeatureExtractionSettings
仅计算基本功能?它只包含Max,Min,Median等基本功能,但应该运行得更快。
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
从回购安装最新版本。我们正在积极开发它,主人应该包含最新和最新的版本;)。
答案 1 :(得分:2)
语法略有变化(请参见docs),当前方法是:
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())
答案 2 :(得分:0)
从0.15.0版开始,我们改进了Apache Spark
和dask
的绑定。
现在可以在通常的tsfresh
或dask
计算图中直接使用Spark
特征提取。
您可以在tsfresh.convenience.bindings
的文档here中找到绑定。以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
(或类似方法)可能会帮助您处理非常大的数据-既有内存又有速度(因为您可以将工作分配到多台计算机上)。当然,我们仍然像以前一样支持常规的发行商(docu)。
除此之外,还可以将tsfresh
与任务编排系统(例如luigi
)一起运行。您可以创建一个任务来
*仅读取一个id
和kind
的数据
*提取功能
*将结果写到磁盘
然后让luigi
处理所有其余的工作。您可能会找到此here on my blog的可能实现。