質問編集履歴

3

追記

2018/07/13 15:40

投稿

yohehe
yohehe

スコア48

title CHANGED
File without changes
body CHANGED
@@ -77,8 +77,11 @@
77
77
 
78
78
  アドバイスをいただきまして差分データから特徴量と教師データにすることで予測できるようになってきました.
79
79
  ありがとうございます。
80
-
80
+ #差分データ予想
81
81
  ![イメージ説明](4c875a6439cfe8fad4676659d5eb5724.png)
82
82
 
83
+
84
+ 差分データから得られた元データと予測の比較
85
+ ![イメージ説明](951243e6600f8a06dca1ab52ef3fb641.png)
83
- ただ、手法によるためか精度には課題が多いようです。
86
+ ただ、手法によるためか精度には課題が多いようです。進むにつれてかなりずれていきました。
84
87
  精度を上げられるようにするにはどうすべきか、いろいろ調べてみます。

2

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

2018/07/13 15:40

投稿

yohehe
yohehe

スコア48

title CHANGED
File without changes
body CHANGED
@@ -9,8 +9,15 @@
9
9
  df = pd.read_csv('international-airline-passengers.csv',skipfooter=3)
10
10
 
11
11
  data=np.array(data)
12
- data.shape #data.shapeは(144,)です。
13
12
 
13
+ sabun_data=[]
14
+ for i in range(len(data)-1):
15
+ temp_sabun=data[i+1]-data[i]
16
+ sabun_data.append(temp_sabun)
17
+ sabun_data=np.array(sabun_data)
18
+ data=sabun_data
19
+ #data.shapeは(143)です。
20
+
14
21
  #sinwaveを予測するプログラミングを参考にしてます。
15
22
 
16
23
  #5個ずつのデータサイズごとにX,yを作成する。
@@ -62,4 +69,16 @@
62
69
  ![イメージ説明](b03bff8f0b8586cced5866ab90209cc3.png)
63
70
 
64
71
  他のサイトでは、同じdata数でtensorflow,tflearnでグラフに近似したpredictを出せているみたいなのですが、自分のプログラミングの問題がどこにあるのかわからないでおります。SimpleRNNなどもためしてみましたが同じ状況でした。
65
- RNNについて初心者ですが、アドバイスをいただけますと幸いです。よろしくお願いいたします。
72
+ RNNについて初心者ですが、アドバイスをいただけますと幸いです。よろしくお願いいたします。
73
+
74
+ ==========================================================
75
+ 追記
76
+
77
+
78
+ アドバイスをいただきまして差分データから特徴量と教師データにすることで予測できるようになってきました.
79
+ ありがとうございます。
80
+
81
+ ![イメージ説明](4c875a6439cfe8fad4676659d5eb5724.png)
82
+
83
+ ただ、手法によるためか精度には課題が多いようです。
84
+ 精度を上げられるようにするにはどうすべきか、いろいろ調べてみます。

1

プログラムを追記修正

2018/07/13 15:20

投稿

yohehe
yohehe

スコア48

title CHANGED
File without changes
body CHANGED
@@ -5,23 +5,27 @@
5
5
  以下RNN学習のために試しておりますプログラムです。
6
6
 
7
7
  ```python
8
+
9
+ df = pd.read_csv('international-airline-passengers.csv',skipfooter=3)
10
+
8
11
  data=np.array(data)
9
12
  data.shape #data.shapeは(144,)です。
10
13
 
11
14
  #sinwaveを予測するプログラミングを参考にしてます。
15
+
16
+ #5個ずつのデータサイズごとにX,yを作成する。
12
- inputdata=[]
17
+ X_data=[]
13
18
  target=[]
14
- #5個ずつのデータサイズごとにX,yを作成する。
15
- input_len=5
16
19
 
20
+ manabu_len=5
17
- for i in range(0,len(data)-input_len):
21
+ for i in range(0,len(data)-manabu_len):
18
- inputdata.append(data[i:i+input_len])
22
+ X_data.append(data[i:i+manabu_len])
19
- target.append(data[i+input_len])
23
+ target.append(data[i+manabu_len])
20
24
 
21
25
  from sklearn.model_selection import train_test_split
22
- X=np.array(inputdata).reshape(len(data),input_len,1)
26
+ X=np.array(X_data).reshape(len(X_data),manabu_len,1)
23
- y=np.array(target).reshape(len(data),1)
27
+ y=np.array(target).reshape(len(X_data),1)
24
- (train_X,test_X,train_y,test_y)=train_test_split(X,y,test_size=0.2,shuffle=False)
28
+ (train_X,test_X,train_y,test_y)=train_test_split(X,y,test_size=0.2)
25
29
 
26
30
  from keras.layers import LSTM,SimpleRNN
27
31
  from keras.models import Sequential
@@ -32,27 +36,26 @@
32
36
  n_hidden=20
33
37
  n_out=1
34
38
  model=Sequential()
35
- model.add(LSTM(n_hidden,input_shape=(input_len,n_in),kernel_initializer="random_normal"))
39
+ model.add(LSTM(n_hidden,input_shape=(manabu_len,n_in),kernel_initializer="random_normal"))
36
- model.add(Dense(n_out,kernel_initializer="random_normal"))
40
+ model.add(Dense(n_out))
37
41
  model.add(Activation("linear"))
38
42
  model.compile(loss="mean_squared_error",optimizer="Adam")
39
- #Xのサンプルデータが少ないため、batch_size=1に
40
- model.fit(X,y,batch_size=1,epochs=10,validation_data=(test_X,test_y))
43
+ model.fit(X,y,batch_size=20,epochs=100,validation_data=(test_X,test_y))
41
44
 
45
+
42
46
  #modelを参考にして、predictをグラフ化してみる。
47
+
48
+ #予測したデータをpredictに格納してグラフにしてみる。
43
49
  in_=X[:1]
44
- predict=[]
50
+ predicted=[]
45
- #予測したデータをpredictに格納してグラフにしてみる。
46
- for i in range(len(data)-input_len):
51
+ for i in range(len(data)-manabu_len):
47
52
  out_=model.predict(in_)
48
- in_ = np.vstack((in_.reshape(input_len,n_in)[1:], out_)).reshape(1, input_len, n_in)
53
+ in_ = np.vstack( (in_.reshape(manabu_len,n_in)[1:], out_)).reshape(1, manabu_len, n_in)
49
54
  predicted.append(out_.reshape(-1))
50
-
51
55
  plt.plot(data, label="original")
52
- plt.plot(predict, label="predicted")
56
+ plt.plot(predicted, label="predicted")
53
57
  plt.legend()
54
58
  plt.show()
55
-
56
59
  コード
57
60
  ```
58
61