概要
前々回、前回と、twitterのデータから株価の予測に挑戦してみました。
しかし、残念ながら、その結果はともに惨敗に終わりました。。。。
一部改善は見られたものの、実用的かと言われると微妙なところです。
そこで、ちょっとここで思い切って新しいことに手を出してみることにします。
やってみようと思うこと。
これまでは、Neaural Networkを使ったDeep Learningのフレームワークとして、Chainerを使っていました。
これはこれで結構簡単に使えていたのでいろいろと試していましたが、、、、、
どうやら、最近のシリコンバレーでは、もっぱらTensorFlowが大流行らしいのです。
そのソースは、現地に知り合いがいる人からまた聞きしたので、本当のところは知りません。
ということで、今回は以下をやってみようと思います。
- フレームワークにTensorFlowを使ってみる
- 再帰型ニューラルネットワークである、RNN(Recurrent Neural Network)を使ってみる
- 自分自身の過去のデータを学習することで、未来を予測する
- そのために、今回は株価の予測ではなく、別のデータを使った学習をさせてみます。
RNN(Recurrent Neural Network)とは
はい、ググってください笑
こちらの解説なんかがわかりやすいです。
簡単に言うと、時系列データを学習する際に、自身の過去情報を一部記憶して次の学習に生かすという手法です。
TensorFlowの実行環境を準備
CentOSなどのLinux環境ならば、以下の1行で環境構築完了です。
$ pip3 install matplotlib pandas tflearn tensorflow
素晴らしい!
早速、コードを書いていく。
パラメータチューニングが難しいことは周知の事実ですから、とりあえず適当なパラメタでNeural Networkを組んでみましょう。
net = tflearn.input_data(shape=[None, 2, 1],name="input_layer")
net = tflearn.lstm(net, n_units=6, activation='relu', dropout=0.9, return_seq=True, return_state=False,name="hidden_layer_1")
net = tflearn.lstm(net, n_units=6, activation='relu', dropout=0.9, name="hidden_layer_2")
net = tflearn.fully_connected(net, 1, activation='linear',name="output_layer")
上記で組んでみたNNは、以下のようなモデルになります。
- RNNの実装としてLSTM(Long short-term memory)を採用
- 隠れ層が2層
- 隠れ層のノード数は6個
- 活性化関数にReLU(Rectified Linear Units)を使用。
- dropoutさせる
- dropoutを入れると過学習を防いでくれて精度が高まる
作ったモデルを可視化すると、こんな感じになります。
それでは、このNNでDeep Learningをしてみましょう!
それでは機械学習開始
上記のNNで、学習をさせていきます。
結果を見る前に、そもそも何を学習させるかを明確にしておきましょう。
やってみたこと
世界の国際線旅客数の推移から、これを学習し予測する
結果の解釈の前に
まず、計算が収束しているかどうかを確認しましょう。
うん、問題ないようですね。
結果の解釈
早速、結果からみていただくことにしましょう。
自己回帰のようなイメージで、自分自身から将来を予測しています。
ここでは、自分自身の直前2点から、次の1点を予測するようなモデルにしています。
加えて、RNNというかLSTMは目的変数が0~1だと結果が安定するらしいという情報を得ました。
真偽のほどは自分で確かめていませんが、期間内の最大値が1、最小値が0となるようにしています。
黒破線:実際のデータ
青実線:学習期間のデータによる再現値
赤実線:学習期間外のデータによる予測値
をを、なんかいい感じじゃないですか?
気が付くこと
いくつか気付くことがありますね。
ピークの位置がずれている
これはしょうがないのです。
というのも、自分自身の過去2点から将来を予測するようにしているので、その分ずれているのです。
予測というのは、事前に実施しないと意味がないので、そういう意味では役になっていないのかもしれません。
いい感じの結果になっている!
想像以上に、ピークの高さもうまく再現、そして予測ができているように思います。
これは期待できる・・・・
最後に
これは、株価の予測に期待できますね。
それでは次回は、RNNを使って自分を学習させて、株価の予測に取り組んでみたいと思います。
・・・・・・といっても、学習データを変えるだけですけどね。