【问题标题】:TSFRESH - features extracted by a symmetric sliding windowTSFRESH - 由对称滑动窗口提取的特征
【发布时间】:2020-07-17 08:13:50
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python pandas time-series feature-extraction tsfresh


    【解决方案1】:

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

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

    (负滚动方向也一样)

    【讨论】:

      【解决方案2】:

      “解决方法”解决方案:

      使用“roll_time_series”函数两次;一个用于“backward”滚动(设置rolling_direction=1),第二个用于“forward”(rolling_direction=-1),然后将它们合并为一个。

      这将为原始数据集m_{i,j}$ 中的每个时间点提供一个时间序列滚动对象,该对象具有“来自过去”的 360 个值和“来自未来”的 360 个值(即,时间点位于窗口中心和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')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-09
        • 2014-07-05
        • 1970-01-01
        • 2017-09-27
        • 2018-05-12
        • 1970-01-01
        • 2016-02-15
        • 2020-09-16
        相关资源
        最近更新 更多