簡體   English   中英

即使我的訓練數據集是整個數據集的 5%,LSTM model 也給了我 99% 的 R 平方

[英]LSTM model is giving me 99% R-squared even if my training data set is 5% of the overall set

我正在使用 LSTM model 來執行時間序列預測。 我有一個奇怪的問題,即使我的訓練數據集占總數據集的 5%,我的 R 平方基本上總是 99%。 I plot 預測值和測試數據之間的圖表看起來幾乎相同? 這怎么可能?

規范化后我的數據是這樣的

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

從數學上講, R-Squared的目的是為您估計模型的獨立特征所解釋的模型方差的比例。

公式如下:[1 - (SSres / SStot)]。

其中: SStot 代表總平方誤差之和,SSres 代表殘差平方和。

由於 SSres 和 SStot 都是在數據集上相同數量的“n”條記錄上聚合的總和,因此您在數據集上擁有的記錄數(在您的情況下為訓練數據集)可以改變 R-Squared 指標但不應將其作為指標進行任何重大更改。 可以肯定地說,R-Squared 作為一個指標並沒有反映與您擁有的數據量有關的任何事情,因為它被 SSres 和 SStot 之間的偏差所抵消。

對於 99% 的結果,您正在處理 model:這可能只是意味着您的獨立特征對您的依賴值具有相當高的預測值。 我會檢查我的任何 X 變量是否與我的 y 變量有任何直接聯系。 (好像它是一個包含 y 值的算術組合)。 我還將嘗試了解我在 model 中包含的每個功能的標准。 較小的標准可能會降低 SSres,因此會導致較高的 R-Squared 度量。

最重要的是:R 平方 =/= 准確度。!!!!!! 這兩個指標在數學上幾乎沒有關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM