Обработка несбалансированных данных временных рядов - PullRequest
1 голос
/ 21 июня 2020

Имея данные датчиков временного ряда:

+----+----------+----------+------+
|day |Feature 1 |Feature 2 |target|
+----+----------+----------+------+
|0   |0.2       |0.1       |0.01  |
+----+----------+----------+------+
|... until day 30

Я построил модель LSTM, которая предсказывает целевое значение 30-го дня на основе первых 7 дней.

model = Sequential()
model.add(LSTM(32, activation='tanh', input_shape=(num_samples, num_features))),
model.add(Dense(32, activation='relu')),
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='mse', optimizer="adam", metrics=['mae', 'mse'])

Модель MSE составляет 0,05, но, глядя на данные, я вижу, что в большинстве случаев целевая оценка на 30-й день находится в пределах определенного диапазона c. Так что моя модель в большинстве случаев правильно предсказывает и пропускает, когда есть аномалия (это то, что я пытаюсь уловить).

Я рассмотрел методы обработки несбалансированных данных с проблемами классификации, например, более -выборка, недовыборка и SMOTE. Однако я не смог найти ничего относительно проблемы регрессии временных рядов.

1 Ответ

1 голос
/ 21 июня 2020

Я ничего не знаю о данных датчиков, но разве вы не можете вменять недостающие элементы данных?

import numpy as np
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
SimpleImputer()
X = [[np.nan, 2], [6, np.nan], [7, 6]]
print(X)
print(imp.transform(X))

Результат:

[[nan, 2], [6, nan], [7, 6]]


[[4.         2.        ]
 [6.         3.66666667]
 [7.         6.        ]]

https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...