質問編集履歴

3

追記

2018/07/13 15:40

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -156,12 +156,18 @@
156
156
 
157
157
  ありがとうございます。
158
158
 
159
-
159
+ #差分データ予想
160
160
 
161
161
  ![イメージ説明](4c875a6439cfe8fad4676659d5eb5724.png)
162
162
 
163
163
 
164
164
 
165
+
166
+
167
+ 差分データから得られた元データと予測の比較
168
+
169
+ ![イメージ説明](951243e6600f8a06dca1ab52ef3fb641.png)
170
+
165
- ただ、手法によるためか精度には課題が多いようです。
171
+ ただ、手法によるためか精度には課題が多いようです。進むにつれてかなりずれていきました。
166
172
 
167
173
  精度を上げられるようにするにはどうすべきか、いろいろ調べてみます。

2

アドバイスから追記致しました。

2018/07/13 15:40

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,21 @@
20
20
 
21
21
  data=np.array(data)
22
22
 
23
+
24
+
25
+ sabun_data=[]
26
+
27
+ for i in range(len(data)-1):
28
+
29
+ temp_sabun=data[i+1]-data[i]
30
+
31
+ sabun_data.append(temp_sabun)
32
+
33
+ sabun_data=np.array(sabun_data)
34
+
35
+ data=sabun_data
36
+
23
- data.shape #data.shapeは(144,)です。
37
+ #data.shapeは(143)です。
24
38
 
25
39
 
26
40
 
@@ -127,3 +141,27 @@
127
141
  他のサイトでは、同じdata数でtensorflow,tflearnでグラフに近似したpredictを出せているみたいなのですが、自分のプログラミングの問題がどこにあるのかわからないでおります。SimpleRNNなどもためしてみましたが同じ状況でした。
128
142
 
129
143
  RNNについて初心者ですが、アドバイスをいただけますと幸いです。よろしくお願いいたします。
144
+
145
+
146
+
147
+ ==========================================================
148
+
149
+ 追記
150
+
151
+
152
+
153
+
154
+
155
+ アドバイスをいただきまして差分データから特徴量と教師データにすることで予測できるようになってきました.
156
+
157
+ ありがとうございます。
158
+
159
+
160
+
161
+ ![イメージ説明](4c875a6439cfe8fad4676659d5eb5724.png)
162
+
163
+
164
+
165
+ ただ、手法によるためか精度には課題が多いようです。
166
+
167
+ 精度を上げられるようにするにはどうすべきか、いろいろ調べてみます。

1

プログラムを追記修正

2018/07/13 15:20

投稿

yohehe
yohehe

スコア48

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,12 @@
12
12
 
13
13
  ```python
14
14
 
15
+
16
+
17
+ df = pd.read_csv('international-airline-passengers.csv',skipfooter=3)
18
+
19
+
20
+
15
21
  data=np.array(data)
16
22
 
17
23
  data.shape #data.shapeは(144,)です。
@@ -20,31 +26,33 @@
20
26
 
21
27
  #sinwaveを予測するプログラミングを参考にしてます。
22
28
 
29
+
30
+
31
+ #5個ずつのデータサイズごとにX,yを作成する。
32
+
23
- inputdata=[]
33
+ X_data=[]
24
34
 
25
35
  target=[]
26
36
 
27
- #5個ずつのデータサイズごとにX,yを作成する。
28
-
29
- input_len=5
30
37
 
31
38
 
39
+ manabu_len=5
32
40
 
33
- for i in range(0,len(data)-input_len):
41
+ for i in range(0,len(data)-manabu_len):
34
42
 
35
- inputdata.append(data[i:i+input_len])
43
+ X_data.append(data[i:i+manabu_len])
36
44
 
37
- target.append(data[i+input_len])
45
+ target.append(data[i+manabu_len])
38
46
 
39
47
 
40
48
 
41
49
  from sklearn.model_selection import train_test_split
42
50
 
43
- X=np.array(inputdata).reshape(len(data),input_len,1)
51
+ X=np.array(X_data).reshape(len(X_data),manabu_len,1)
44
52
 
45
- y=np.array(target).reshape(len(data),1)
53
+ y=np.array(target).reshape(len(X_data),1)
46
54
 
47
- (train_X,test_X,train_y,test_y)=train_test_split(X,y,test_size=0.2,shuffle=False)
55
+ (train_X,test_X,train_y,test_y)=train_test_split(X,y,test_size=0.2)
48
56
 
49
57
 
50
58
 
@@ -66,47 +74,45 @@
66
74
 
67
75
  model=Sequential()
68
76
 
69
- model.add(LSTM(n_hidden,input_shape=(input_len,n_in),kernel_initializer="random_normal"))
77
+ model.add(LSTM(n_hidden,input_shape=(manabu_len,n_in),kernel_initializer="random_normal"))
70
78
 
71
- model.add(Dense(n_out,kernel_initializer="random_normal"))
79
+ model.add(Dense(n_out))
72
80
 
73
81
  model.add(Activation("linear"))
74
82
 
75
83
  model.compile(loss="mean_squared_error",optimizer="Adam")
76
84
 
77
- #Xのサンプルデータが少ないため、batch_size=1
85
+ model.fit(X,y,batch_size=20,epochs=100,validation_data=(test_X,test_y))
78
86
 
79
- model.fit(X,y,batch_size=1,epochs=10,validation_data=(test_X,test_y))
87
+
80
88
 
81
89
 
82
90
 
83
91
  #modelを参考にして、predictをグラフ化してみる。
84
92
 
85
- in_=X[:1]
86
93
 
87
- predict=[]
88
94
 
89
95
  #予測したデータをpredictに格納してグラフにしてみる。
90
96
 
97
+ in_=X[:1]
98
+
99
+ predicted=[]
100
+
91
- for i in range(len(data)-input_len):
101
+ for i in range(len(data)-manabu_len):
92
102
 
93
103
  out_=model.predict(in_)
94
104
 
95
- in_ = np.vstack((in_.reshape(input_len,n_in)[1:], out_)).reshape(1, input_len, n_in)
105
+ in_ = np.vstack( (in_.reshape(manabu_len,n_in)[1:], out_)).reshape(1, manabu_len, n_in)
96
106
 
97
107
  predicted.append(out_.reshape(-1))
98
108
 
99
-
100
-
101
109
  plt.plot(data, label="original")
102
110
 
103
- plt.plot(predict, label="predicted")
111
+ plt.plot(predicted, label="predicted")
104
112
 
105
113
  plt.legend()
106
114
 
107
115
  plt.show()
108
-
109
-
110
116
 
111
117
  コード
112
118