Closed v1docq closed 11 months ago
Создал модуль для решения этой задачи, он лежит тут
Механика довольно проста, но работает как часы:
split()
, в который передаём два аргумента – строить ли на выходе графики (работает на одномерном ряду, пока) и нужно ли бинаризовать таргет (в случае сильного дисбаланса классов).train_test_split
превращается в подвыборки test
train
В принципе, учёл все пожелания, кроме второй предлагаемой стратегии:
Вторая - каждая длина подпоследовательности данной аномалии это отдельный класс аномалии, пример - "Anomaly_1_length_20 sec'.
Мне тут не совсем понятна идея: должно получиться несколько датасетов под каждую (или несколько) аномалию? Ведь если мы оставим длины аномалий как есть, то их не сложить в датасет
Добавил реализацию второй стратегии под названием unique
. Теперь есть возможность разделить временной ряд по словарю аномалий на несколько датасетов, каждый из которых соответствует аномалии уникальной длины и класса. Так выглядит вызов:
unique_ts = np.random.rand(800)
anomaly_unique = {
'class1': '0:10, 20:30',
'class2': '0:20, 50:70'}
splitter_unique = TSSplitter(time_series=unique_ts,
anomaly_dict=anomaly_unique,
strategy='unique')
unique_cls, unique_train, unique_test = splitter_unique.split(binarize=False)
unique_cls
, unique_train
, unique_test
- списки, где количество элементов == количеству найденных уникальных аномалий
Необходимо реализовать интерфейс (возможно в рамках API), который принимает на вход временной ряд и словарь. Ключами словаря являются лейблы аномалий, значения словарь - список который содержит все индексы (в формате [start1:end1,...,start1000:end1000]) конкретной аномалии. На выходе данный интерфейс должен возвращать тренировочный и тестовый наборы данных для решения задачи классификации временных рядов. Важные уточнения: