繁体   English   中英

TSFRESH - 通过对称滑动提取的特征 window

[英]TSFRESH - features extracted by a symmetric sliding window

作为原始数据,我们有测量m_{i,j} ,每 30 秒测量一次( i=0, 30, 60, 90,...720,.. ),用于数据集中的每个主题j

我希望使用TSFRESH (包)来提取时间序列特征,这样对于时间i的兴趣点,特征是基于对称滚动 window 计算的。

我们希望根据i之前 3 小时和i之后 3 小时的上下文测量来计算时间点i,j的特征向量。 因此,721-dim 特征向量表示被 6 小时“上下文”包围的兴趣点,即兴趣点之前的 360 次测量和兴趣点之后的 360 次测量。 对于每个兴趣点,应根据m_{i,j}的 721 个测量值提取特征。

我尝试在roll_time_series()中使用rolling_direction参数,但唯一的选择是在“时间”中向后或向前滚动- 我正在寻找一种在特征计算中同时包含“过去”和“未来”数据的方法。

如果我正确理解您的想法,甚至可以仅通过单面滚动来做到这一点。 让我们尝试一个例子:

您想要预测 8:00 的时间 - 为此您需要从 5:00 到 11:00 的数据。 如果以 6h 的大小和正滚动方向滚动数据,您最终会得到一个数据集,其中也恰好包含这部分数据(5:00 到 11:00)。 通常,它将用于训练 11:00(或 12:00)的值 - 但没有什么能阻止您使用它来预测 8:00 的值。 基本上,这只是重新索引的问题。

(对于负滚动方向实际上也是如此)

“解决方法”解决方案:

使用“ roll_time_series ” function 两次; 一个用于“向后”滚动(设置rolling_direction=1 ),第二个用于“向前”( rolling_direction=-1 ),然后将它们组合成一个。

这将为原始数据集m_{i,j} $ 中的每个时间点提供一个滚动 object 的时间序列,其中包含 360 个“来自过去”的值和 360 个“来自未来”的值(即,时间点位于window 和max_timeshift=360的中心)

注意使用下面的pandas函数: concat(), sort_values(), drop_duplicates() - 这是此解决方案工作所必需的。

import numpy as np
import pandas as pd
from tsfresh.utilities.dataframe_functions import roll_time_series
from tsfresh.feature_extraction import EfficientFCParameters, MinimalFCParameters

rolled_backward = roll_time_series(activity_data,
                                           column_id=id_column,
                                           column_sort=sort_column,
                                           column_kind=None,
                                           rolling_direction=1,
                                           max_timeshift=360)

rolled_farward = roll_time_series(activity_data,
                                           column_id=id_column,
                                           column_sort=sort_column,
                                           column_kind=None,
                                           rolling_direction=-1,
                                           max_timeshift=360)

        # merge into one dataframe, with rolled_farward and rolled_backward window for every time point (sample)
        df = pd.concat([rolled_backward, rolled_farward])

        # important! - sort and drop duplicates
        df.sort_values(by=[id_column, sort_column], inplace=True)
        df.drop_duplicates(subset=[id_column, sort_column, 'activity'], inplace=True, keep='first')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM