作为原始数据,我们有测量m_{i,j},对数据集中的每个主题j每30秒测量一次(i=0, 30, 60, 90,...720,..)。
我希望使用TSFRESH (包)提取时间序列特征,这样对于时间i的兴趣点,特征是基于对称滚动窗口.计算的。
我们希望基于i,j前3小时和i后3小时的测量来计算时间点i的特征向量。因此,721-dim特征向量表示一个被6个小时“上下文”包围的感兴趣点,即感兴趣点之前的360次测量和感兴趣点之后的360次测量。对于每一个感兴趣的点,应该根据m_{i,j}的721个测量值来提取特征。
我尝试在roll_time_series()中使用roll_time_series() param,但唯一的选项是在“time”中回滚或向前滚动--我正在寻找一种方法,在特性计算中包含“过去”和“未来”数据。
发布于 2020-05-02 18:04:50
“解决办法”:
两次使用"roll_time_series“函数;一个用于”向后滚动“(设置rolling_direction=1),第二个用于"forward”(rolling_direction=-1),然后将它们组合为一个。
这将为原始数据集m_{i,j}$中的每个时间点提供一个时间序列滚动对象,其值为“来自过去”和“来自未来”的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')发布于 2020-04-13 19:52:48
如果我正确地理解了你的想法,它甚至有可能做到这一点,只有单向滚动。让我们举一个例子:
你想预测时间是8:00 --你需要从5:00到11:00的数据。如果您滚动数据的大小为6h和正滚动方向,您将得到一个数据集,其中也包括数据的这一部分(5:00至11:00)。通常,它将用于在11:00 (或12:00)对值进行训练,但没有什么可以阻止您使用它来预测8:00的值。基本上,这只是一个重新编制索引的问题。
(负滚动方向也是如此)
https://stackoverflow.com/questions/61041024
复制相似问题