Модель LSTM дает мне 99% R-квадрат, даже если мой набор данных для обучения составляет 5% от общего набора. - PullRequest
0 голосов
/ 06 августа 2020

Я использую модель LSTM для прогнозирования временных рядов. У меня странная проблема, когда мой R-квадрат в основном всегда составляет 99%, даже если мой набор данных для обучения составляет 5% от общего набора данных! Я построил график между предсказанными значениями и тестовыми данными, и он выглядит почти идентично. Как такое вообще возможно?

Мои данные такие после нормализации

date    0   1   2   3   4   5   6   7   8   9
0   2019-01-01 00:00:01+00:00   0.000000    0.000000    0.000   1.000   0.000   0.500000    0.079178    0.076970    0.079109    0.077500
1   2019-01-01 00:00:02+00:00   0.000000    0.000000    0.000   1.000   0.000   0.500000    0.079178    0.076970    0.079109    0.077500
2   2019-01-01 00:00:07+00:00   0.000025    0.000103    0.000   0.492   0.508   0.738780    0.079178    0.076970    0.079109    0.077500
3   2019-01-01 00:00:07+00:00   0.000000    0.000002    0.000   1.000   0.000   0.500000    0.079178    0.076970    0.079109    0.077500
4   2019-01-01 00:00:08+00:00   0.000000    0.000000    0.000   0.000   1.000   0.711130    0.079178    0.076970    0.079109    0.077500
... ... ... ... ... ... ... ... ... ... ... ...
116022  2020-07-28 08:39:59+00:00   0.000000    0.000000    0.000   0.844   0.156   0.786466    0.781738    0.782749    0.781928    0.782748
116023  2020-07-28 08:44:57+00:00   0.000000    0.000000    0.000   1.000   0.000   0.500000    0.781738    0.782749    0.781928    0.782748
116024  2020-07-28 08:47:59+00:00   0.000000    0.000000    0.244   0.756   0.000   0.279403    0.781738    0.782749    0.781928    0.782748
116025  2020-07-28 09:15:26+00:00   0.000000    0.000000    0.000   0.735   0.265   0.965187    0.781738    0.782749    0.781928    0.782748
116026  2020-07-28 09:15:40+00:00   0.000000    0.000000    0.000   0.784   0.216   0.755760    0.781738    0.782749    0.781928    0.782748
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from keras.optimizers import Adam

model = Sequential()
model.add(LSTM(64, input_shape=x_train.shape[1:3], return_sequences=False))
model.add(Dense(1)) 
model.compile(loss='mse', optimizer='adam', metrics=['mse'])

history = model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=1)

train_pred = model.predict(x_train)
y_pred = model.predict(x_test)
print('R2 Score: ', r2_score(y_test, y_pred))
print('MAE: ', mean_absolute_error(y_test, y_pred))

Результаты

R2 Score:  0.9959650143133337
MAE:  0.008859985819425287

1 Ответ

0 голосов
/ 06 августа 2020

Математически, цель R-Squared - дать вам оценку доли дисперсии вашей модели, которая объясняется ее независимыми функциями.

Формула выглядит так следует: [1 - (SSres / SStot)].

Где: SStot означает сумму вашей общей квадратичной ошибки, а SSres означает остаточную сумму квадратов.

Как SSres и SStot являются суммой чего-то, что агрегировано на одинаковом количестве записей 'n' в вашем наборе данных, количество записей, которые у вас есть в вашем наборе данных (обучающий набор данных в вашем случае), может изменить метрику R-Squared c, но не должно Не вносите никаких драматических c изменений в это как в метри c. Можно с уверенностью сказать, что R-Squared как метри c не отражает ничего, что связано с объемом данных, которые у вас есть, поскольку он сводится на нет отклонением между SSres и SStot.

Для результата 99% вы имеете дело в своей модели: это, вероятно, просто означает, что ваши независимые функции имеют довольно высокую прогностическую ценность по сравнению с зависимым значением. Я бы проверил, имеет ли какая-либо из моих переменных X прямое соединение с моей переменной y. (как если бы это арифметическая комбинация c, содержащая в себе значение y). Я также попытался бы получить представление о стандартной стоимости каждой функции, которую я включаю в свою модель. Небольшое стандартное значение может снизить SSres и, следовательно, привести к высокому показателю R-Squared c.

Самое главное: R-Squared = / = Точность !!!!! две метрики имеют очень мало общего друг с другом математически.

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