質問するログイン新規登録

質問編集履歴

8

タイトル

2021/12/10 08:50

投稿

ammtjm
ammtjm

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- 正規化された値を戻して評価したい
1
+ 正規化された値をLSTMよっ予測が行われた後に元の系列の大きさで評価したい
body CHANGED
@@ -14,7 +14,8 @@
14
14
  inverse_transformが行えていないのか, 正規化されたままのtrainPredictとinverse_transformを行った後の結果がほぼ同じ値になっている.
15
15
  そのためRMSEが正規化された状態での計算となり, 非常に小さな値となってしまう.
16
16
  #わからないこと
17
- 正規化を元に戻す方法,または手動で正規化を行い, LSTMを実行した後, 予測結果と訓練,テストデータを正規化前に戻してRMSEを算出する方法.
17
+ LSTMを実行した後に正規化を元に戻す方法,または手動で正規化を行い, LSTMを実行した後, 予測結果と訓練,テストデータを正規化前に戻して
18
+ RMSEを算出する方法.
18
19
  #以下プログラム
19
20
  ```python
20
21
  #データの分割数

7

本文

2021/12/10 08:50

投稿

ammtjm
ammtjm

スコア7

title CHANGED
File without changes
body CHANGED
@@ -134,6 +134,4 @@
134
134
  Train Score: 0.08 RMSE
135
135
  Test Score: 0.14 RMSE
136
136
  cross rmse2 = 0.11922512266093292
137
- ```
137
+ ```
138
- というような出力結果となります.
139
- 5回LSTMを回すことはできているのですが, 訓練とテストの結果が一致してしまっています. おそらく訓練とテストの分割に問題があるのかと思うのですが, どのように変更すればよいのでしょうか.

6

タイトル修正

2021/12/10 08:33

投稿

ammtjm
ammtjm

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- 正規化された値らな
1
+ 正規化された値を元にして評価した
body CHANGED
@@ -14,7 +14,7 @@
14
14
  inverse_transformが行えていないのか, 正規化されたままのtrainPredictとinverse_transformを行った後の結果がほぼ同じ値になっている.
15
15
  そのためRMSEが正規化された状態での計算となり, 非常に小さな値となってしまう.
16
16
  #わからないこと
17
- 正規化を元に戻す方法,または手動で正規化を行い, これ戻す式64列して適応する方法.
17
+ 正規化を元に戻す方法,または手動で正規化を行い, LSTM実行した後, 予測結果と訓練,テストデータ正規化前してRMSEを算出する方法.
18
18
  #以下プログラム
19
19
  ```python
20
20
  #データの分割数

5

タイトルの修正

2021/12/10 08:27

投稿

ammtjm
ammtjm

スコア7

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

4

本文とコードの修正

2021/12/10 07:37

投稿

ammtjm
ammtjm

スコア7

title CHANGED
File without changes
body CHANGED
@@ -7,10 +7,14 @@
7
7
  使用したデータは(3910, 64)のサイズです.
8
8
 
9
9
  #やりたいこと
10
- 1列目から64列目までを入力して, 64列目の系列の予測をLSTMを使って行い, RMSEで評価する.
10
+ 1列目から64列目までを入力して, 1列目の系列の予測をLSTMを使って行い, RMSEで評価する.
11
+ RMSEは訓練データ, 予測結果ともに正規化から元の系列に戻して計算したい.
12
+
11
13
  #発生している問題
14
+ inverse_transformが行えていないのか, 正規化されたままのtrainPredictとinverse_transformを行った後の結果がほぼ同じ値になっている.
12
- 訓練とテスト結果が全くの同値となっているためRMSEが0となってしまう.
15
+ のためRMSEが正規化された状態での計算となり, 非常に小さな値となってしまう.
16
+ #わからないこと
13
- これはLSTMで予測した配列の正規化を元に戻すことが出来てない為と考えられる.
17
+ 正規化を元に戻す方法,または手動で正規化を行, こを戻す式を64列に対して適応す方法.
14
18
  #以下プログラム
15
19
  ```python
16
20
  #データの分割数
@@ -22,29 +26,17 @@
22
26
  tscv = TimeSeriesSplit(n_splits=Fold, test_size=100)
23
27
 
24
28
  #LSTM
25
- from sklearn.model_selection import train_test_split
26
- from sklearn.metrics import mean_squared_error
27
- from sklearn.metrics import mean_absolute_error
28
- import statsmodels.api as sm
29
- from statsmodels.tsa import stattools
30
29
  from keras.models import Sequential
31
30
  from keras.models import load_model
32
31
  from keras.layers import Dense
33
32
  from keras.layers import LSTM
34
33
  from sklearn.preprocessing import MinMaxScaler
35
- import pandas as pd
36
- import numpy as np
37
- import matplotlib.pyplot as plt
38
- import warnings
39
- import math
40
34
  #正規化
41
35
  scaler = MinMaxScaler(feature_range=(0, 1))
42
36
  dataset_new = scaler.fit_transform(dataset_new)
43
37
  dataset_new = pd.DataFrame(dataset_new)
44
- dataset_new.columns =[省略,64個カラム名が入っています]
38
+ dataset_new=dataset_new.loc[:,[64個カラム, 1列目に目的変数をもってきて]]
45
- #最後に全体のrmseを算出するための空のリスト
46
39
  cross_rmse2=[]
47
-
48
40
  for fold, (train_index, test_index) in enumerate(tscv.split(dataset_new)):
49
41
  X_train, X_test = dataset_new.iloc[train_index], dataset_new.iloc[test_index]
50
42
  Y_train, Y_test = interpolate_rssi_dataset.iloc[train_index], interpolate_rssi_dataset.iloc[test_index]
@@ -57,8 +49,7 @@
57
49
  for j in range(dataset_new.shape[1]):
58
50
  a = dataset_new.iloc[i:(i + look_back), j]
59
51
  xset.append(a)
60
- #予測したいのは64列目(最終列)の系列データ
61
- dataY.append(dataset_new.iloc[i + look_back, 63])
52
+ dataY.append(dataset_new.iloc[i + look_back, 0])
62
53
  dataX.append(xset)
63
54
  return np.array(dataX), np.array(dataY)
64
55
 
@@ -82,6 +73,7 @@
82
73
  trainPredict = model.predict(trainX)
83
74
  testPredict = model.predict(testX)
84
75
 
76
+ print(trainPredict[:,0])
85
77
  pad_col = np.zeros(dataset_new.shape[1]-1)
86
78
  def pad_array(val):
87
79
  return np.array([np.insert(pad_col, 0, x) for x in val])
@@ -90,11 +82,11 @@
90
82
  trainY = scaler.inverse_transform(pad_array(trainY))
91
83
  testPredict = scaler.inverse_transform(pad_array(testPredict))
92
84
  testY = scaler.inverse_transform(pad_array(testY))
93
- print(trainY[0:,63])
85
+ #正規化を元に戻す
94
- print(trainPredict[0:,63])
86
+ print(trainPredict[:,0])
95
- trainScore = math.sqrt(mean_squared_error(trainY[:,63], trainPredict[:,63]))
87
+ trainScore = math.sqrt(mean_squared_error(trainY[:,0], trainPredict[:,0]))
96
88
  print('Train Score: %.2f RMSE' % (trainScore))
97
- testScore = math.sqrt(mean_squared_error(testY[:,63], testPredict[:,63]))
89
+ testScore = math.sqrt(mean_squared_error(testY[:,0], testPredict[:,0]))
98
90
  print('Test Score: %.2f RMSE' % (testScore))
99
91
  cross_rmse2.append(testScore)
100
92
  print(f"cross rmse2 =",np.mean(cross_rmse2))
@@ -102,56 +94,46 @@
102
94
  #実行結果
103
95
  ```python
104
96
  Epoch 1/2
105
- 107/107 - 4s - loss: 0.3512 - 4s/epoch - 39ms/step
97
+ 107/107 - 4s - loss: 0.1102 - 4s/epoch - 41ms/step
106
98
  Epoch 2/2
107
- 107/107 - 2s - loss: 0.0229 - 2s/epoch - 20ms/step
99
+ 107/107 - 2s - loss: 0.0303 - 2s/epoch - 23ms/step
108
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
100
+ [0.42974246 0.429881 0.43014005 ... 0.5590104 0.55925095 0.5603747 ] #これは正規化された状態でのtrainPredict
109
- -92.32716536]
110
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
101
+ [0.42974246 0.42988101 0.43014005 ... 0.55901039 0.55925095 0.56037468] #これはinverseを行い正規化を元に戻したtrainPredict
111
- -92.32716536]
112
- Train Score: 0.00 RMSE
102
+ Train Score: 0.14 RMSE
113
- Test Score: 0.00 RMSE
103
+ Test Score: 0.04 RMSE
114
104
  Epoch 1/2
115
- 110/110 - 5s - loss: 0.0174 - 5s/epoch - 42ms/step
105
+ 110/110 - 5s - loss: 0.0276 - 5s/epoch - 41ms/step
116
106
  Epoch 2/2
117
- 110/110 - 2s - loss: 0.0120 - 2s/epoch - 21ms/step
107
+ 110/110 - 2s - loss: 0.0097 - 2s/epoch - 22ms/step
108
+ [0.5084579 0.50872 0.50901794 ... 0.84188867 0.8352394 0.83327174]
118
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
109
+ [0.5084579 0.50871998 0.50901794 ... 0.84188867 0.83523941 0.83327174]
119
- -92.32716536]
120
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
121
- -92.32716536]
122
- Train Score: 0.00 RMSE
110
+ Train Score: 0.07 RMSE
123
- Test Score: 0.00 RMSE
111
+ Test Score: 0.14 RMSE
124
112
  Epoch 1/2
125
- 113/113 - 4s - loss: 0.1963 - 4s/epoch - 39ms/step
113
+ 113/113 - 5s - loss: 0.0299 - 5s/epoch - 41ms/step
126
114
  Epoch 2/2
127
- 113/113 - 2s - loss: 0.0202 - 2s/epoch - 22ms/step
115
+ 113/113 - 3s - loss: 0.0201 - 3s/epoch - 22ms/step
116
+ [0.42214507 0.42244956 0.42274225 ... 0.7995421 0.7988943 0.7994946 ]
128
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
117
+ [0.42214507 0.42244956 0.42274225 ... 0.79954213 0.79889429 0.79949462]
129
- -92.32716536]
130
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
131
- -92.32716536]
132
- Train Score: 0.00 RMSE
118
+ Train Score: 0.13 RMSE
133
- Test Score: 0.00 RMSE
119
+ Test Score: 0.13 RMSE
134
120
  Epoch 1/2
135
- 116/116 - 4s - loss: 0.2338 - 4s/epoch - 37ms/step
121
+ 116/116 - 4s - loss: 0.0435 - 4s/epoch - 38ms/step
136
122
  Epoch 2/2
137
- 116/116 - 2s - loss: 0.0297 - 2s/epoch - 22ms/step
123
+ 116/116 - 3s - loss: 0.0113 - 3s/epoch - 22ms/step
124
+ [0.45806852 0.458272 0.4584012 ... 0.803413 0.80381125 0.8031619 ]
138
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
125
+ [0.45806852 0.45827201 0.4584012 ... 0.80341297 0.80381125 0.80316192]
139
- -92.32716536]
140
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
141
- -92.32716536]
142
- Train Score: 0.00 RMSE
126
+ Train Score: 0.09 RMSE
143
- Test Score: 0.00 RMSE
127
+ Test Score: 0.14 RMSE
144
128
  Epoch 1/2
145
- 119/119 - 5s - loss: 0.3827 - 5s/epoch - 39ms/step
129
+ 119/119 - 5s - loss: 0.0259 - 5s/epoch - 39ms/step
146
130
  Epoch 2/2
147
- 119/119 - 2s - loss: 0.0369 - 2s/epoch - 20ms/step
131
+ 119/119 - 3s - loss: 0.0089 - 3s/epoch - 22ms/step
148
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
132
+ [0.47482297 0.47502875 0.47521576 ... 0.7998894 0.79979026 0.7996928 ]
149
- -92.32716536]
150
- [-92.32716536 -92.32716536 -92.32716536 ... -92.32716536 -92.32716536
133
+ [0.47482297 0.47502875 0.47521576 ... 0.79988939 0.79979026 0.79969281]
151
- -92.32716536]
152
- Train Score: 0.00 RMSE
134
+ Train Score: 0.08 RMSE
153
- Test Score: 0.00 RMSE
135
+ Test Score: 0.14 RMSE
154
- cross rmse2 = 0.0
136
+ cross rmse2 = 0.11922512266093292
155
137
  ```
156
138
  というような出力結果となります.
157
139
  5回LSTMを回すことはできているのですが, 訓練とテストの結果が一致してしまっています. おそらく訓練とテストの分割に問題があるのかと思うのですが, どのように変更すればよいのでしょうか.

3

タイトルと本文の修正

2021/12/10 06:33

投稿

ammtjm
ammtjm

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- LSTMを多変量で行いたいが, 実行結果が失敗
1
+ LSTMを多変量で行いたいが, 正規化の戻方が分からな
body CHANGED
@@ -10,6 +10,7 @@
10
10
  1列目から64列目までを入力して, 64列目の系列の予測をLSTMを使って行い, RMSEで評価する.
11
11
  #発生している問題
12
12
  訓練とテストの結果が全くの同値となっているためRMSEが0となってしまう.
13
+ これはLSTMで予測した配列の正規化を元に戻すことが出来ていない為と考えられる.
13
14
  #以下プログラム
14
15
  ```python
15
16
  #データの分割数

2

タイトルと本文の修正

2021/12/10 02:37

投稿

ammtjm
ammtjm

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- LSTMを多変量で行たが, 予測結果が元データと同値になり予測が行えていない
1
+ LSTMを多変量で行が, 実行結果が失敗してい
body CHANGED
@@ -8,6 +8,8 @@
8
8
 
9
9
  #やりたいこと
10
10
  1列目から64列目までを入力して, 64列目の系列の予測をLSTMを使って行い, RMSEで評価する.
11
+ #発生している問題
12
+ 訓練とテストの結果が全くの同値となっているためRMSEが0となってしまう.
11
13
  #以下プログラム
12
14
  ```python
13
15
  #データの分割数
@@ -87,8 +89,8 @@
87
89
  trainY = scaler.inverse_transform(pad_array(trainY))
88
90
  testPredict = scaler.inverse_transform(pad_array(testPredict))
89
91
  testY = scaler.inverse_transform(pad_array(testY))
90
- print(trainY[0:63])
92
+ print(trainY[0:,63])
91
- print(trainPredict[0:63])
93
+ print(trainPredict[0:,63])
92
94
  trainScore = math.sqrt(mean_squared_error(trainY[:,63], trainPredict[:,63]))
93
95
  print('Train Score: %.2f RMSE' % (trainScore))
94
96
  testScore = math.sqrt(mean_squared_error(testY[:,63], testPredict[:,63]))

1

タイトルの修正

2021/12/09 13:22

投稿

ammtjm
ammtjm

スコア7

title CHANGED
@@ -1,1 +1,1 @@
1
- LSTMを多変量で行が, RMSE0にな
1
+ LSTMを多変量で行たが, 予測結果元データと同値になり予測が行えていない
body CHANGED
@@ -98,8 +98,6 @@
98
98
  ```
99
99
  #実行結果
100
100
  ```python
101
- (3910, 468)
102
- cross rmse = 67.88924394292339
103
101
  Epoch 1/2
104
102
  107/107 - 4s - loss: 0.3512 - 4s/epoch - 39ms/step
105
103
  Epoch 2/2