Python TSFRESH-对称滑动窗口提取的特征
作为原始数据,我们对数据集中的每个受试者每30秒(Python TSFRESH-对称滑动窗口提取的特征,python,pandas,time-series,feature-extraction,tsfresh,Python,Pandas,Time Series,Feature Extraction,Tsfresh,作为原始数据,我们对数据集中的每个受试者每30秒(i=0,30,60,90,…720,…)进行测量 我希望使用TSFRESH(软件包)提取时间序列特征,以便对于时间I的兴趣点,基于对称滚动窗口计算特征。 我们希望基于i之前3小时和i之后3小时的上下文测量来计算时间点i,j的特征向量。 因此,721 dim特征向量表示被6小时“上下文”包围的关注点,即关注点之前的360次测量和之后的360次测量。 对于每个感兴趣的点,应该基于721个m_{i,j}的测量值来提取特征 我曾尝试在滚动时间序列()中使
i=0,30,60,90,…720,…
)进行测量
我希望使用TSFRESH(软件包)提取时间序列特征,以便对于时间I
的兴趣点,基于对称滚动窗口计算特征。
我们希望基于i
之前3小时和i
之后3小时的上下文测量来计算时间点i,j
的特征向量。
因此,721 dim特征向量表示被6小时“上下文”包围的关注点,即关注点之前的360次测量和之后的360次测量。
对于每个感兴趣的点,应该基于721个m_{i,j}
的测量值来提取特征
我曾尝试在
滚动时间序列()
中使用rolling\u direction
参数,但唯一的选项是在“时间”中向前或向后滚动-我正在寻找一种方法在特征计算中同时包含“过去”和“未来”数据。如果我正确理解你的想法,甚至可以只用单面滚动来实现这一点。让我们举一个例子:
你想预测8:00的时间,你需要从5:00到11:00的数据。
如果以6h的大小和正滚动方向滚动数据,则最终将得到一个数据集,该数据集也正好包含这部分数据(5:00到11:00)。通常,它将用于11:00(或12:00)时的值训练-但没有任何东西阻止您使用它来预测8:00时的值。
基本上,这只是重新编制索引的问题
(负滚动方向实际上也是如此)一种“变通”解决方案:
使用“滚动时间序列
”功能两次;一个用于“向后”滚动(设置滚动方向=1
),第二个用于“向前”(滚动方向=-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')