質問編集履歴
6
質問文の追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -20,9 +20,11 @@
|
|
20
20
|
損失関数を小さくするような学習をしてほしいと考えています。
|
21
21
|
|
22
22
|
|
23
|
+
再追記
|
24
|
+
使用している交通量のデータは,
|
25
|
+
100日間1分間隔(144000行)で記録された時系列のデータになります。
|
23
26
|
|
24
27
|
|
25
|
-
|
26
28
|
### 該当のソースコード
|
27
29
|
|
28
30
|
```Python
|
5
コードの変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -51,50 +51,50 @@
|
|
51
51
|
#データの分割
|
52
52
|
from sklearn.model_selection import train_test_split
|
53
53
|
date_1, date_2 = train_test_split(date, test_size=test_rate, shuffle=False)
|
54
|
-
train,
|
54
|
+
train, test = train_test_split(Pt,test_size=test_rate,shuffle=False)
|
55
55
|
|
56
56
|
|
57
57
|
#教師ありデータに変換
|
58
58
|
x_train = train[:-pred_time] #データの下からpred_time分を削って学習データに
|
59
59
|
t_train = train[pred_time:] #データの上からpred_time分を削って正解データに
|
60
|
-
|
60
|
+
x_test = test[:-pred_time] #データの下からpred_time分を削ってテストデータに
|
61
|
-
|
61
|
+
t_test = test[pred_time:] #データの上からpred_time分を削って正解データに
|
62
62
|
|
63
63
|
|
64
64
|
|
65
65
|
#2次元配列へ変換
|
66
66
|
x_train = x_train.reshape(-1, 1)
|
67
67
|
t_train = t_train.reshape(-1, 1)
|
68
|
-
|
68
|
+
x_test = x_test .reshape(-1, 1)
|
69
|
-
|
69
|
+
t_test = t_test .reshape(-1, 1)
|
70
70
|
|
71
71
|
|
72
72
|
#0-1への正規化の定義
|
73
73
|
from sklearn.preprocessing import MinMaxScaler
|
74
74
|
|
75
|
-
def scale(x_train,
|
75
|
+
def scale(x_train, x_test , t_train, t_test ):
|
76
76
|
|
77
77
|
# change type
|
78
78
|
x_train = x_train.astype(np.float32)
|
79
|
-
|
79
|
+
x_test = x_test .astype(np.float32)
|
80
80
|
t_train = t_train.astype(np.float32)
|
81
|
-
|
81
|
+
t_test = t_test .astype(np.float32)
|
82
82
|
|
83
83
|
# scale inputs
|
84
84
|
sclr = MinMaxScaler()
|
85
85
|
x_train = sclr.fit_transform(x_train)
|
86
|
-
|
86
|
+
x_test = sclr.transform(x_test )
|
87
87
|
t_train = sclr.transform(t_train)
|
88
|
-
|
88
|
+
t_test = sclr.transform(t_test )
|
89
89
|
|
90
|
-
return x_train,
|
90
|
+
return x_train, x_test , t_train, t_test , sclr
|
91
91
|
|
92
92
|
#正規化
|
93
|
-
x_train,
|
93
|
+
x_train, x_test , t_train, t_test , sclr = scale(x_train, x_test , t_train, t_test )
|
94
94
|
|
95
95
|
#成形(change shape)
|
96
96
|
x_train = np.reshape(x_train.astype("float32"), (x_train.shape[0],1,x_train.shape[1] ))
|
97
|
-
|
97
|
+
x_test = np.reshape(x_test .astype("float32"), (x_test .shape[0],1,x_test .shape[1] ))
|
98
98
|
|
99
99
|
|
100
100
|
#各種インポート
|
@@ -123,8 +123,8 @@
|
|
123
123
|
|
124
124
|
|
125
125
|
#予測
|
126
|
-
pred = model.predict(
|
126
|
+
pred = model.predict(x_test ) #予測値
|
127
|
-
obs =
|
127
|
+
obs = t_test #観測値
|
128
128
|
|
129
129
|
|
130
130
|
#正規化を戻す
|
4
質問文の追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,6 +9,15 @@
|
|
9
9
|
1日先のデータでの予測結果は(下記図3枚目)逆に精度が高すぎるといった結果になりました。
|
10
10
|
私の作成したプログラムが正しく意図した将来を予測できているのか判断がつきません。
|
11
11
|
|
12
|
+
追記
|
13
|
+
下記図に関して,
|
14
|
+
青線が予測値
|
15
|
+
オレンジ線が観測値
|
16
|
+
になります。
|
17
|
+
また,ソースコードにおける「pred_time」が予測したい時間先になっており,
|
18
|
+
pred_time=30で,正解データが30分先の値であることを意味しています。
|
19
|
+
この意味として,ある1時点のデータを学習データ,その時点から30分後の時点のデータを正解データとして
|
20
|
+
損失関数を小さくするような学習をしてほしいと考えています。
|
12
21
|
|
13
22
|
|
14
23
|
|
3
コードの変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
import pandas as pd
|
25
25
|
import matplotlib.pyplot as plt
|
26
26
|
|
27
|
-
import_file = 'C:/Users/
|
27
|
+
import_file = 'C:/Users/temp/Desktop/week_day1.csv' #データファイルの読み込み
|
28
28
|
|
29
29
|
#事前の決定
|
30
30
|
test_rate = 0.2 #データの分割割合
|
@@ -152,7 +152,7 @@
|
|
152
152
|
|
153
153
|
|
154
154
|
#csvに書き出し
|
155
|
-
df.to_csv('C:/Users/
|
155
|
+
df.to_csv('C:/Users/temp/Desktop/5_30_output.csv')
|
156
156
|
```
|
157
157
|

|
158
158
|

|
2
コードの変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
作成したモデルが意図した予測を行っているかがわかりません。
|
4
4
|
モデルでは,30分先の交通量を予測するようにしているのですが,
|
5
5
|
問題点として,
|
6
|
-
(1)明らかに精度が高い
|
6
|
+
(1)明らかに精度が高い(本当に意図した時間先を予測しているのか?)
|
7
7
|
(2)予測したい時間を変えたとき明らかに不自然な予測結果が得られる
|
8
8
|
特に12時間先のデータを用いて予測した際は予測結果(下記図2枚目)が不自然になり,
|
9
9
|
1日先のデータでの予測結果は(下記図3枚目)逆に精度が高すぎるといった結果になりました。
|
@@ -24,11 +24,11 @@
|
|
24
24
|
import pandas as pd
|
25
25
|
import matplotlib.pyplot as plt
|
26
26
|
|
27
|
-
import_file = 'C:/Users/
|
27
|
+
import_file = 'C:/Users/Shunsuke Kiso/Desktop/week_day1.csv' #データファイルの読み込み
|
28
28
|
|
29
29
|
#事前の決定
|
30
30
|
test_rate = 0.2 #データの分割割合
|
31
|
-
pred_time =
|
31
|
+
pred_time = 720 #何分先を予測するかの決定(データ:1分間隔/1時間先を予測:pred_time = 60)
|
32
32
|
time = 1440
|
33
33
|
|
34
34
|
#データのインポート
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
#必要なデータの抽出
|
38
38
|
date = df.iloc[:,0].values #データの1列目を抽出
|
39
|
-
Pt = df.iloc[:, 3].values #データの4列目を抽出
|
39
|
+
Pt = df.iloc[:, 3:4].values #データの4列目を抽出
|
40
40
|
|
41
41
|
|
42
42
|
#データの分割
|
@@ -106,11 +106,11 @@
|
|
106
106
|
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error'])
|
107
107
|
|
108
108
|
es = EarlyStopping(monitor='val_loss',
|
109
|
-
patience=
|
109
|
+
patience=5,
|
110
110
|
verbose=1)
|
111
111
|
|
112
112
|
#モデルの学習
|
113
|
-
history = model.fit(x_train, t_train, epochs=
|
113
|
+
history = model.fit(x_train, t_train, epochs=10, batch_size=256, verbose=1, shuffle=False, validation_split = 0.1, callbacks=[es])
|
114
114
|
|
115
115
|
|
116
116
|
#予測
|
@@ -152,10 +152,10 @@
|
|
152
152
|
|
153
153
|
|
154
154
|
#csvに書き出し
|
155
|
-
df.to_csv('C:/Users/
|
155
|
+
df.to_csv('C:/Users/Shunsuke Kiso/Desktop/5_30_output.csv')
|
156
156
|
```
|
157
|
-

|
158
|
-

|
159
159
|

|
160
160
|
### 試したこと
|
161
161
|
|
1
画像の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -156,7 +156,7 @@
|
|
156
156
|
```
|
157
157
|

|
158
158
|

|
159
|
-

|
160
160
|
### 試したこと
|
161
161
|
|
162
162
|
ハイパーパラメータの調整,スケーリングの調整,予測先の変更等を試してみましたが,うまくいきません。
|