TSFRE SH - элементы, извлекаемые с помощью скользящего окна симметрии c - PullRequest
0 голосов
/ 05 апреля 2020

В качестве необработанных данных у нас есть измерения m_{i,j}, измеренные каждые 30 секунд (i=0, 30, 60, 90,...720,..) для каждого субъекта j в наборе данных.

I wi sh use TSFRE SH (пакет) для извлечения объектов временных рядов, так что для интересующего момента времени i объекты рассчитываются на основе симметрии c скользящего окна.

Мы будем sh вычислять вектор признаков момента времени i,j на основе измерений 3 часов контекста до i и 3 часов после i. Таким образом, вектор признаков 721-dim представляет интересующую точку, окруженную 6-часовым «контекстом», то есть 360 измерений до и 360 измерений после интересующей точки. Для каждой точки интереса функции должны быть извлечены на основе 721 измерения m_{i,j}.

Я пытался использовать rolling_direction параметр в roll_time_series() , но единственными вариантами являются , либо прокрутка назад или вперед по «времени» - я ищу способ , чтобы включить как «прошлые», так и «будущие» данные в расчет объектов.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Если я правильно понимаю вашу идею, это даже возможно сделать только с односторонней прокаткой. Давайте попробуем с одним примером:

Вы хотите прогнозировать на время 8:00 - и вам нужны для этого данные с 5:00 до 11:00. Если вы прокрутите данные размером 6 ч и положительным направлением прокатки, вы получите набор данных, который также включает именно эту часть данных (с 5:00 до 11:00). Обычно он используется для обучения значения в 11:00 (или 12:00), но ничто не мешает вам использовать его для прогнозирования значения в 8:00. По сути, это просто вопрос переиндексации.

(То же самое на самом деле верно для отрицательного направления прокатки)

0 голосов
/ 02 мая 2020

Обходное решение:

Дважды используйте функцию "roll_time_series"; один для « назад » (настройка rolling_direction=1) и второй для « вперед » (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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...