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

質問編集履歴

6

質問文の追記

2020/10/24 07:36

投稿

stu824
stu824

スコア2

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

コードの変更

2020/10/24 07:36

投稿

stu824
stu824

スコア2

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, val = train_test_split(Pt,test_size=test_rate,shuffle=False)
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
- x_val = val[:-pred_time] #データの下からpred_time分を削ってテストデータに
60
+ x_test = test[:-pred_time] #データの下からpred_time分を削ってテストデータに
61
- t_val = val[pred_time:] #データの上からpred_time分を削って正解データに
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
- x_val = x_val.reshape(-1, 1)
68
+ x_test = x_test .reshape(-1, 1)
69
- t_val = t_val.reshape(-1, 1)
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, x_val, t_train, t_val):
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
- x_val = x_val.astype(np.float32)
79
+ x_test = x_test .astype(np.float32)
80
80
  t_train = t_train.astype(np.float32)
81
- t_val = t_val.astype(np.float32)
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
- x_val = sclr.transform(x_val)
86
+ x_test = sclr.transform(x_test )
87
87
  t_train = sclr.transform(t_train)
88
- t_val = sclr.transform(t_val)
88
+ t_test = sclr.transform(t_test )
89
89
 
90
- return x_train, x_val, t_train, t_val, sclr
90
+ return x_train, x_test , t_train, t_test , sclr
91
91
 
92
92
  #正規化
93
- x_train, x_val, t_train, t_val, sclr = scale(x_train, x_val, t_train, t_val)
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
- x_val = np.reshape(x_val.astype("float32"), (x_val.shape[0],1,x_val.shape[1] ))
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(x_val) #予測値
126
+ pred = model.predict(x_test ) #予測値
127
- obs = t_val #観測値
127
+ obs = t_test #観測値
128
128
 
129
129
 
130
130
  #正規化を戻す

4

質問文の追記

2020/10/24 05:50

投稿

stu824
stu824

スコア2

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

コードの変更

2020/10/24 04:53

投稿

stu824
stu824

スコア2

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/Shunsuke Kiso/Desktop/week_day1.csv' #データファイルの読み込み
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/Shunsuke Kiso/Desktop/5_30_output.csv')
155
+ df.to_csv('C:/Users/temp/Desktop/5_30_output.csv')
156
156
  ```
157
157
  ![30分後を予測](6d7b274ae3e438ed11f19321f0ef4e9b.png)
158
158
  ![半日後を予測](5bce935ae4fb0c36b8e5c659d1d61860.png)

2

コードの変更

2020/10/23 03:41

投稿

stu824
stu824

スコア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/temp/Desktop/week_day1.csv' #データファイルの読み込み
27
+ import_file = 'C:/Users/Shunsuke Kiso/Desktop/week_day1.csv' #データファイルの読み込み
28
28
 
29
29
  #事前の決定
30
30
  test_rate = 0.2 #データの分割割合
31
- pred_time = 30 #何分先を予測するかの決定(データ:1分間隔/1時間先を予測:pred_time = 60)
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=10,
109
+ patience=5,
110
110
  verbose=1)
111
111
 
112
112
  #モデルの学習
113
- history = model.fit(x_train, t_train, epochs=10000, batch_size=256, verbose=1, shuffle=False, validation_data=([x_val],[t_val]), callbacks=[es])
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/temp/Desktop/result/output.csv')
155
+ df.to_csv('C:/Users/Shunsuke Kiso/Desktop/5_30_output.csv')
156
156
  ```
157
- ![30分後を予測](2c2cdfa547040987570f931fe34ec320.png)
157
+ ![30分後を予測](6d7b274ae3e438ed11f19321f0ef4e9b.png)
158
- ![12時間後を予測](0f8aeb15648281f773f8426fdc96dbf0.png)
158
+ ![半日後を予測](5bce935ae4fb0c36b8e5c659d1d61860.png)
159
159
  ![1日後を予測](7f21d79ed531abe56e1dbcc5ea06c19b.png)
160
160
  ### 試したこと
161
161
 

1

画像の修正

2020/10/23 01:09

投稿

stu824
stu824

スコア2

title CHANGED
File without changes
body CHANGED
@@ -156,7 +156,7 @@
156
156
  ```
157
157
  ![30分後を予測](2c2cdfa547040987570f931fe34ec320.png)
158
158
  ![12時間後を予測](0f8aeb15648281f773f8426fdc96dbf0.png)
159
- ![1日後を予測](5963337c751ef75efeeb670dc59e9e28.png)
159
+ ![1日後を予測](7f21d79ed531abe56e1dbcc5ea06c19b.png)
160
160
  ### 試したこと
161
161
 
162
162
  ハイパーパラメータの調整,スケーリングの調整,予測先の変更等を試してみましたが,うまくいきません。