質問編集履歴
8
タイトル
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
正規化された値を
|
1
|
+
正規化された値をLSTMによって予測が行われた後に元の系列の大きさで評価したい
|
test
CHANGED
@@ -30,7 +30,9 @@
|
|
30
30
|
|
31
31
|
#わからないこと
|
32
32
|
|
33
|
-
正規化を元に戻す方法,または手動で正規化を行い, LSTMを実行した後, 予測結果と訓練,テストデータを正規化前に戻して
|
33
|
+
LSTMを実行した後に正規化を元に戻す方法,または手動で正規化を行い, LSTMを実行した後, 予測結果と訓練,テストデータを正規化前に戻して
|
34
|
+
|
35
|
+
RMSEを算出する方法.
|
34
36
|
|
35
37
|
#以下プログラム
|
36
38
|
|
7
本文
test
CHANGED
File without changes
|
test
CHANGED
@@ -271,7 +271,3 @@
|
|
271
271
|
cross rmse2 = 0.11922512266093292
|
272
272
|
|
273
273
|
```
|
274
|
-
|
275
|
-
というような出力結果となります.
|
276
|
-
|
277
|
-
5回LSTMを回すことはできているのですが, 訓練とテストの結果が一致してしまっています. おそらく訓練とテストの分割に問題があるのかと思うのですが, どのように変更すればよいのでしょうか.
|
6
タイトル修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
正規化された値
|
1
|
+
正規化された値を元に戻して評価したい
|
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
#わからないこと
|
32
32
|
|
33
|
-
正規化を元に戻す方法,または手動で正規化を行い,
|
33
|
+
正規化を元に戻す方法,または手動で正規化を行い, LSTMを実行した後, 予測結果と訓練,テストデータを正規化前に戻してRMSEを算出する方法.
|
34
34
|
|
35
35
|
#以下プログラム
|
36
36
|
|
5
タイトルの修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
正規化された値が戻らない
|
test
CHANGED
File without changes
|
4
本文とコードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,13 +16,21 @@
|
|
16
16
|
|
17
17
|
#やりたいこと
|
18
18
|
|
19
|
-
1列目から64列目までを入力して,
|
19
|
+
1列目から64列目までを入力して, 1列目の系列の予測をLSTMを使って行い, RMSEで評価する.
|
20
|
+
|
21
|
+
RMSEは訓練データ, 予測結果ともに正規化から元の系列に戻して計算したい.
|
22
|
+
|
23
|
+
|
20
24
|
|
21
25
|
#発生している問題
|
22
26
|
|
27
|
+
inverse_transformが行えていないのか, 正規化されたままのtrainPredictとinverse_transformを行った後の結果がほぼ同じ値になっている.
|
28
|
+
|
23
|
-
|
29
|
+
そのためRMSEが正規化された状態での計算となり, 非常に小さな値となってしまう.
|
30
|
+
|
24
|
-
|
31
|
+
#わからないこと
|
32
|
+
|
25
|
-
|
33
|
+
正規化を元に戻す方法,または手動で正規化を行い, これを戻す式を64列に対して適応する方法.
|
26
34
|
|
27
35
|
#以下プログラム
|
28
36
|
|
@@ -46,16 +54,6 @@
|
|
46
54
|
|
47
55
|
#LSTM
|
48
56
|
|
49
|
-
from sklearn.model_selection import train_test_split
|
50
|
-
|
51
|
-
from sklearn.metrics import mean_squared_error
|
52
|
-
|
53
|
-
from sklearn.metrics import mean_absolute_error
|
54
|
-
|
55
|
-
import statsmodels.api as sm
|
56
|
-
|
57
|
-
from statsmodels.tsa import stattools
|
58
|
-
|
59
57
|
from keras.models import Sequential
|
60
58
|
|
61
59
|
from keras.models import load_model
|
@@ -66,16 +64,6 @@
|
|
66
64
|
|
67
65
|
from sklearn.preprocessing import MinMaxScaler
|
68
66
|
|
69
|
-
import pandas as pd
|
70
|
-
|
71
|
-
import numpy as np
|
72
|
-
|
73
|
-
import matplotlib.pyplot as plt
|
74
|
-
|
75
|
-
import warnings
|
76
|
-
|
77
|
-
import math
|
78
|
-
|
79
67
|
#正規化
|
80
68
|
|
81
69
|
scaler = MinMaxScaler(feature_range=(0, 1))
|
@@ -84,14 +72,10 @@
|
|
84
72
|
|
85
73
|
dataset_new = pd.DataFrame(dataset_new)
|
86
74
|
|
87
|
-
dataset_new.c
|
75
|
+
dataset_new=dataset_new.loc[:,[64個のカラム, 1列目に目的変数をもってきている]]
|
88
|
-
|
89
|
-
#最後に全体のrmseを算出するための空のリスト
|
90
76
|
|
91
77
|
cross_rmse2=[]
|
92
78
|
|
93
|
-
|
94
|
-
|
95
79
|
for fold, (train_index, test_index) in enumerate(tscv.split(dataset_new)):
|
96
80
|
|
97
81
|
X_train, X_test = dataset_new.iloc[train_index], dataset_new.iloc[test_index]
|
@@ -116,9 +100,7 @@
|
|
116
100
|
|
117
101
|
xset.append(a)
|
118
102
|
|
119
|
-
#予測したいのは64列目(最終列)の系列データ
|
120
|
-
|
121
|
-
dataY.append(dataset_new.iloc[i + look_back,
|
103
|
+
dataY.append(dataset_new.iloc[i + look_back, 0])
|
122
104
|
|
123
105
|
dataX.append(xset)
|
124
106
|
|
@@ -166,6 +148,8 @@
|
|
166
148
|
|
167
149
|
|
168
150
|
|
151
|
+
print(trainPredict[:,0])
|
152
|
+
|
169
153
|
pad_col = np.zeros(dataset_new.shape[1]-1)
|
170
154
|
|
171
155
|
def pad_array(val):
|
@@ -182,15 +166,15 @@
|
|
182
166
|
|
183
167
|
testY = scaler.inverse_transform(pad_array(testY))
|
184
168
|
|
185
|
-
|
169
|
+
#正規化を元に戻す
|
186
|
-
|
170
|
+
|
187
|
-
print(trainPredict[
|
171
|
+
print(trainPredict[:,0])
|
188
|
-
|
172
|
+
|
189
|
-
trainScore = math.sqrt(mean_squared_error(trainY[:,
|
173
|
+
trainScore = math.sqrt(mean_squared_error(trainY[:,0], trainPredict[:,0]))
|
190
174
|
|
191
175
|
print('Train Score: %.2f RMSE' % (trainScore))
|
192
176
|
|
193
|
-
testScore = math.sqrt(mean_squared_error(testY[:,
|
177
|
+
testScore = math.sqrt(mean_squared_error(testY[:,0], testPredict[:,0]))
|
194
178
|
|
195
179
|
print('Test Score: %.2f RMSE' % (testScore))
|
196
180
|
|
@@ -206,105 +190,85 @@
|
|
206
190
|
|
207
191
|
Epoch 1/2
|
208
192
|
|
209
|
-
107/107 - 4s - loss: 0.
|
210
|
-
|
211
|
-
Epoch 2/2
|
212
|
-
|
213
|
-
107/107 - 2s - loss: 0.0
|
214
|
-
|
215
|
-
[
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
Epoch
|
228
|
-
|
229
|
-
110/110 -
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
1
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
Epoch
|
272
|
-
|
273
|
-
11
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
-9
|
278
|
-
|
279
|
-
[
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
Train Score: 0.0
|
284
|
-
|
285
|
-
Test Score: 0.
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
119/119 - 5s - loss: 0.3827 - 5s/epoch - 39ms/step
|
290
|
-
|
291
|
-
Epoch 2/2
|
292
|
-
|
293
|
-
119/119 - 2s - loss: 0.0369 - 2s/epoch - 20ms/step
|
294
|
-
|
295
|
-
[-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
|
296
|
-
|
297
|
-
-92.32716536]
|
298
|
-
|
299
|
-
[-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
|
300
|
-
|
301
|
-
-92.32716536]
|
302
|
-
|
303
|
-
Train Score: 0.00 RMSE
|
304
|
-
|
305
|
-
Test Score: 0.00 RMSE
|
306
|
-
|
307
|
-
cross rmse2 = 0.0
|
193
|
+
107/107 - 4s - loss: 0.1102 - 4s/epoch - 41ms/step
|
194
|
+
|
195
|
+
Epoch 2/2
|
196
|
+
|
197
|
+
107/107 - 2s - loss: 0.0303 - 2s/epoch - 23ms/step
|
198
|
+
|
199
|
+
[0.42974246 0.429881 0.43014005 ... 0.5590104 0.55925095 0.5603747 ] #これは正規化された状態でのtrainPredict
|
200
|
+
|
201
|
+
[0.42974246 0.42988101 0.43014005 ... 0.55901039 0.55925095 0.56037468] #これはinverseを行い正規化を元に戻したtrainPredict
|
202
|
+
|
203
|
+
Train Score: 0.14 RMSE
|
204
|
+
|
205
|
+
Test Score: 0.04 RMSE
|
206
|
+
|
207
|
+
Epoch 1/2
|
208
|
+
|
209
|
+
110/110 - 5s - loss: 0.0276 - 5s/epoch - 41ms/step
|
210
|
+
|
211
|
+
Epoch 2/2
|
212
|
+
|
213
|
+
110/110 - 2s - loss: 0.0097 - 2s/epoch - 22ms/step
|
214
|
+
|
215
|
+
[0.5084579 0.50872 0.50901794 ... 0.84188867 0.8352394 0.83327174]
|
216
|
+
|
217
|
+
[0.5084579 0.50871998 0.50901794 ... 0.84188867 0.83523941 0.83327174]
|
218
|
+
|
219
|
+
Train Score: 0.07 RMSE
|
220
|
+
|
221
|
+
Test Score: 0.14 RMSE
|
222
|
+
|
223
|
+
Epoch 1/2
|
224
|
+
|
225
|
+
113/113 - 5s - loss: 0.0299 - 5s/epoch - 41ms/step
|
226
|
+
|
227
|
+
Epoch 2/2
|
228
|
+
|
229
|
+
113/113 - 3s - loss: 0.0201 - 3s/epoch - 22ms/step
|
230
|
+
|
231
|
+
[0.42214507 0.42244956 0.42274225 ... 0.7995421 0.7988943 0.7994946 ]
|
232
|
+
|
233
|
+
[0.42214507 0.42244956 0.42274225 ... 0.79954213 0.79889429 0.79949462]
|
234
|
+
|
235
|
+
Train Score: 0.13 RMSE
|
236
|
+
|
237
|
+
Test Score: 0.13 RMSE
|
238
|
+
|
239
|
+
Epoch 1/2
|
240
|
+
|
241
|
+
116/116 - 4s - loss: 0.0435 - 4s/epoch - 38ms/step
|
242
|
+
|
243
|
+
Epoch 2/2
|
244
|
+
|
245
|
+
116/116 - 3s - loss: 0.0113 - 3s/epoch - 22ms/step
|
246
|
+
|
247
|
+
[0.45806852 0.458272 0.4584012 ... 0.803413 0.80381125 0.8031619 ]
|
248
|
+
|
249
|
+
[0.45806852 0.45827201 0.4584012 ... 0.80341297 0.80381125 0.80316192]
|
250
|
+
|
251
|
+
Train Score: 0.09 RMSE
|
252
|
+
|
253
|
+
Test Score: 0.14 RMSE
|
254
|
+
|
255
|
+
Epoch 1/2
|
256
|
+
|
257
|
+
119/119 - 5s - loss: 0.0259 - 5s/epoch - 39ms/step
|
258
|
+
|
259
|
+
Epoch 2/2
|
260
|
+
|
261
|
+
119/119 - 3s - loss: 0.0089 - 3s/epoch - 22ms/step
|
262
|
+
|
263
|
+
[0.47482297 0.47502875 0.47521576 ... 0.7998894 0.79979026 0.7996928 ]
|
264
|
+
|
265
|
+
[0.47482297 0.47502875 0.47521576 ... 0.79988939 0.79979026 0.79969281]
|
266
|
+
|
267
|
+
Train Score: 0.08 RMSE
|
268
|
+
|
269
|
+
Test Score: 0.14 RMSE
|
270
|
+
|
271
|
+
cross rmse2 = 0.11922512266093292
|
308
272
|
|
309
273
|
```
|
310
274
|
|
3
タイトルと本文の修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
LSTMを多変量で行いたいが,
|
1
|
+
LSTMを多変量で行いたいが, 正規化の戻し方が分からない
|
test
CHANGED
@@ -22,6 +22,8 @@
|
|
22
22
|
|
23
23
|
訓練とテストの結果が全くの同値となっているためRMSEが0となってしまう.
|
24
24
|
|
25
|
+
これはLSTMで予測した配列の正規化を元に戻すことが出来ていない為と考えられる.
|
26
|
+
|
25
27
|
#以下プログラム
|
26
28
|
|
27
29
|
```python
|
2
タイトルと本文の修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
LSTMを多変量で行
|
1
|
+
LSTMを多変量で行いたいが, 実行結果が失敗している
|
test
CHANGED
@@ -18,6 +18,10 @@
|
|
18
18
|
|
19
19
|
1列目から64列目までを入力して, 64列目の系列の予測をLSTMを使って行い, RMSEで評価する.
|
20
20
|
|
21
|
+
#発生している問題
|
22
|
+
|
23
|
+
訓練とテストの結果が全くの同値となっているためRMSEが0となってしまう.
|
24
|
+
|
21
25
|
#以下プログラム
|
22
26
|
|
23
27
|
```python
|
@@ -176,9 +180,9 @@
|
|
176
180
|
|
177
181
|
testY = scaler.inverse_transform(pad_array(testY))
|
178
182
|
|
179
|
-
print(trainY[0:63])
|
183
|
+
print(trainY[0:,63])
|
180
|
-
|
184
|
+
|
181
|
-
print(trainPredict[0:63])
|
185
|
+
print(trainPredict[0:,63])
|
182
186
|
|
183
187
|
trainScore = math.sqrt(mean_squared_error(trainY[:,63], trainPredict[:,63]))
|
184
188
|
|
1
タイトルの修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
LSTMを多変量で行
|
1
|
+
LSTMを多変量で行ったが, 予測結果が元データと同値になり予測が行えていない
|
test
CHANGED
@@ -198,10 +198,6 @@
|
|
198
198
|
|
199
199
|
```python
|
200
200
|
|
201
|
-
(3910, 468)
|
202
|
-
|
203
|
-
cross rmse = 67.88924394292339
|
204
|
-
|
205
201
|
Epoch 1/2
|
206
202
|
|
207
203
|
107/107 - 4s - loss: 0.3512 - 4s/epoch - 39ms/step
|