質問編集履歴

8

タイトル

2021/12/10 08:50

投稿

ammtjm
ammtjm

スコア7

test CHANGED
@@ -1 +1 @@
1
- 正規化された値を戻して評価したい
1
+ 正規化された値をLSTMよっ予測が行われた後に元の系列の大きさで評価したい
test CHANGED
@@ -30,7 +30,9 @@
30
30
 
31
31
  #わからないこと
32
32
 
33
- 正規化を元に戻す方法,または手動で正規化を行い, LSTMを実行した後, 予測結果と訓練,テストデータを正規化前に戻してRMSEを算出する方法.
33
+ LSTMを実行した後に正規化を元に戻す方法,または手動で正規化を行い, LSTMを実行した後, 予測結果と訓練,テストデータを正規化前に戻して
34
+
35
+ RMSEを算出する方法.
34
36
 
35
37
  #以下プログラム
36
38
 

7

本文

2021/12/10 08:50

投稿

ammtjm
ammtjm

スコア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

タイトル修正

2021/12/10 08:33

投稿

ammtjm
ammtjm

スコア7

test CHANGED
@@ -1 +1 @@
1
- 正規化された値らな
1
+ 正規化された値を元にして評価した
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  #わからないこと
32
32
 
33
- 正規化を元に戻す方法,または手動で正規化を行い, これ戻す式64列して適応する方法.
33
+ 正規化を元に戻す方法,または手動で正規化を行い, LSTM実行した後, 予測結果と訓練,テストデータ正規化前してRMSEを算出する方法.
34
34
 
35
35
  #以下プログラム
36
36
 

5

タイトルの修正

2021/12/10 08:27

投稿

ammtjm
ammtjm

スコア7

test CHANGED
@@ -1 +1 @@
1
- LSTMを多変量で行いたいが, 正規化し方が分からない
1
+ 正規化された値が戻らない
test CHANGED
File without changes

4

本文とコードの修正

2021/12/10 07:37

投稿

ammtjm
ammtjm

スコア7

test CHANGED
File without changes
test CHANGED
@@ -16,13 +16,21 @@
16
16
 
17
17
  #やりたいこと
18
18
 
19
- 1列目から64列目までを入力して, 64列目の系列の予測をLSTMを使って行い, RMSEで評価する.
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
- 訓練とテスト結果が全くの同値となっているためRMSEが0となってしまう.
29
+ のためRMSEが正規化された状態での計算となり, 非常に小さな値となってしまう.
30
+
24
-
31
+ #わからないこと
32
+
25
- これはLSTMで予測した配列の正規化を元に戻すことが出来いない為と考えられる.
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.columns =[省略,64個カラム名が入っています]
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, 63])
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
- print(trainY[0:,63])
169
+ #正規化を元に戻す
186
-
170
+
187
- print(trainPredict[0:,63])
171
+ print(trainPredict[:,0])
188
-
172
+
189
- trainScore = math.sqrt(mean_squared_error(trainY[:,63], trainPredict[:,63]))
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[:,63], testPredict[:,63]))
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.3512 - 4s/epoch - 39ms/step
210
-
211
- Epoch 2/2
212
-
213
- 107/107 - 2s - loss: 0.0229 - 2s/epoch - 20ms/step
214
-
215
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
216
-
217
- -92.32716536]
218
-
219
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
220
-
221
- -92.32716536]
222
-
223
- Train Score: 0.00 RMSE
224
-
225
- Test Score: 0.00 RMSE
226
-
227
- Epoch 1/2
228
-
229
- 110/110 - 5s - loss: 0.0174 - 5s/epoch - 42ms/step
230
-
231
- Epoch 2/2
232
-
233
- 110/110 - 2s - loss: 0.0120 - 2s/epoch - 21ms/step
234
-
235
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
236
-
237
- -92.32716536]
238
-
239
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
240
-
241
- -92.32716536]
242
-
243
- Train Score: 0.00 RMSE
244
-
245
- Test Score: 0.00 RMSE
246
-
247
- Epoch 1/2
248
-
249
- 113/113 - 4s - loss: 0.1963 - 4s/epoch - 39ms/step
250
-
251
- Epoch 2/2
252
-
253
- 113/113 - 2s - loss: 0.0202 - 2s/epoch - 22ms/step
254
-
255
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
256
-
257
- -92.32716536]
258
-
259
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
260
-
261
- -92.32716536]
262
-
263
- Train Score: 0.00 RMSE
264
-
265
- Test Score: 0.00 RMSE
266
-
267
- Epoch 1/2
268
-
269
- 116/116 - 4s - loss: 0.2338 - 4s/epoch - 37ms/step
270
-
271
- Epoch 2/2
272
-
273
- 116/116 - 2s - loss: 0.0297 - 2s/epoch - 22ms/step
274
-
275
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
276
-
277
- -92.32716536]
278
-
279
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
280
-
281
- -92.32716536]
282
-
283
- Train Score: 0.00 RMSE
284
-
285
- Test Score: 0.00 RMSE
286
-
287
- Epoch 1/2
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

タイトルと本文の修正

2021/12/10 06:33

投稿

ammtjm
ammtjm

スコア7

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

タイトルと本文の修正

2021/12/10 02:37

投稿

ammtjm
ammtjm

スコア7

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

タイトルの修正

2021/12/09 13:22

投稿

ammtjm
ammtjm

スコア7

test CHANGED
@@ -1 +1 @@
1
- LSTMを多変量で行が, RMSE0にな
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