質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

405閲覧

python tensorflow keras などの訓練データについて

junnnn

総合スコア17

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

2クリップ

投稿2017/12/02 16:29

編集2017/12/04 13:44

学びたいこと : 正しい学習データの作成方法が知りたいです。

お世話になります。
tensorflowやkerasについて勉強してしています。基本な NNやDNN,他にCNN,RNNの理論など分かっています。
最も分かったのは、それらの実装方法のみです。
実装方法などが分かったのですが、肝心な訓練データやテストデータの作成方法がわかりません。
本で載っている訓練データやテストデータは殆どが画像の分類のデータが多く、画像以外のデータで分類がしたいのですが、そのデータの分類が上手く出来ないでいます。
単純にDNNで分類と評価ができるプログラムを書いたのですが、結果がいまいちです。訓練データが悪いのか、それとも学習率や隠れ層の設計が悪いのかが分かりません。
どうか、お助けください。
下記の画像は、2013年〜2015年の株価の1分足を30分足にし、train_X に0〜のデータを与えて、train_y には1〜のデータを与えました。
train_yはtrain_xの次の株価の価格が入っている事になります(株価データはOPEN,HIGH,LOW,CLOSEの順番となっている)。
イメージ説明
イメージ説明
イメージ説明

補足
テストデータは訓練データと同様に2016年の株価データをtest_xとtest_yに格納しています。
本文では分類と言っていますが、分類ではなく株価の予測です。(失礼しました)
今回の質問ですが、今までに学んだDNNやCNN、RNNでどの様な値が出されるのが目的です。
なので単純に訓練データを与え、学習し、テストデータを与えた時にどうなるのかが知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yag1kaz

2017/12/04 02:10

データの作成方法が知りたいのであれば、テストデータをどのように作成したのかを記載してはいかがでしょうか?訓練データの作成した方法についての記載はありますが、テストデータを作成した方法についての記載がなく、テストデータのcsvを外部から持ってきているようにみえるため、答えづらいと感じます。
junnnn

2017/12/04 13:24

説明不足ですみません、もう少し説明を追加していきます。
yag1kaz

2017/12/05 00:39

追記ありがとうございます。株価ではなくドル円の為替レートだったのですね。もしタイトルが修正可能なら修正したほうがいいかもしれません。(質問したことがないので、修正可能かどうかが確信ありません。)
yag1kaz

2017/12/05 00:57 編集

ちなみに画像データではなく、コードを貼り付けると回答が付きやすくなります。Jupyterの場合、Fileからpy形式でExportすることで、貼りやすくなります。Pythonの場合、インデント(字下げ)が重要なのでコード部分をバックスラッシュ三つで挟み込むのをわすれないようにして投稿して下さい。
guest

回答2

0

ベストアンサー

「DNNで分類と評価ができるプログラム」をつくることが目標でしょうか?
それとも「日経平均ドル円(12/5修正teratailでは取り消し線が機能しないのですね。。。~~で囲まれた部分は取り消しです。)の予測をするプログラムの作成」が目標でしょうか?

日経平均ドル円(12/5修正)の予測をするのは、選択したテーマの難易度が高く結果がでにくいので、練習用のテーマとして答えが出るとわかっているものを改めて選択されたほうがよいかもしれない、と思います。

ちなみに、金融商品の未来価格予測には、時系列の動向を反映できると比較的ましな結果がでることが分かっており、例えばRNNやLTSM等を使うことが推奨されています。
研究が進みつつある分野ではありますが、難易度はちょっと高めです。

追記(12/5)
データの作成の仕方が興味のターゲットだという事ですので、追記された質問内容を元に確認しましたが、INPUTデータの作り方に致命的な間違いはありません。

(この段落をさらに追記しました。)もうすこし、踏み込んで説明すると、「ドル円の4本値(Open/Close/High/Low)を与えられて、明日の4本値を予測するDNNを作る」という前提において、作成した入力、出力、訓練、テストのデータのフォーマットに間違いはありません。(それで本当に予測できるかどうかは別問題です)

mkgreiさんの回答にあるように差分データを使用したり、対数変化率を使用したり、長期間のデータをINPUTに使用したり、(為替固有ですが)OPEN/CLOSEが異なるのは、週末GAPのみなので、CLOSEのみをデータに使用する、ということはありますが、FIT/PREDICT系の作法において作成データはあっています。

繰り返しになりますが、作成データに問題が無くても、結果が伴うかどうかは別問題です。(予測可能な分析テーマではないという可能性があるためです)

分析精度の向上を図るなら、ハイパーパラメータや利用する関数、最適化手法などはデータサイエンティストや学者さんがいろいろと試行錯誤されている領域なので、そちらを調査して未踏領域に踏み込んでみる事をお勧めします。

次のSTEPに進む前に、基礎知識として、参考になるであろうリンクを以下に掲載します。

DNNによる為替レート予測(回答者解釈の邦題)
上と同じものをteratailとSlideshareの連携書式にてリンク[slideshare id=44584016&doc=finalpresentationhayashi-150212021625-conversion-gate01]

為替変動の定式化

投稿2017/12/04 02:20

編集2017/12/05 04:05
yag1kaz

総合スコア253

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2017/12/04 03:03

重要な指摘ですね。 このままでも学習データの前処理等々が必要だと思われます。 値そのものよりも、前日からの差のほうが学習しやすい気がします。 金融データはそもそも学習できる部分が少ないというのが難点ですね。 更にXに他のファンダメンタルズを加えたとしてもそれほど学習精度が上がらないのが一般的かと思います。
junnnn

2017/12/04 13:55

御回答と修正の依頼有難うございます。 分類ではなく予測ですね。単純に、設計したNNにどの様に株価のデータや音声データ、etcを与えればいいのかというのが今の疑問で、そのなかで、一番知りたいのが株価の訓練データの与えかたです。RNNやLTSM、特にLSTMで株価の予測するのが賢いのは分かりますが、基本の訓練データとテストデータの与え方が今の所、悩まされています。
mkgrei

2017/12/04 14:07

ですので、せめて前日からの差分を与えるのが合理的だと申し上げているわけです。
mkgrei

2017/12/05 02:19

追記ありがとうございます。 移動平均も重要な特徴量になりますね。 ノイズを消すという強いモチベーションがあるものの、予測値の変化がダンピングがかかったようになるので、乱高下している時に真逆な予想を出すという記憶が蘇りました。 トレンド予想は精度が高めに出やすくありますが、学習がうまくいっているのか、予測しようとしているデータの性質がたまたま良いのか、切り分けることが難しそうですね。 数日間の株価だけを見て、未来の株価を予測できる神業はそうそうできるものではないような気がします。 もう一つ気になることがあるとすれば、学習時のデータを分割してvalidationするべきです。そうすれば、少なくとも過学習した時にぬか喜びしなくて済みます。
yag1kaz

2017/12/05 04:00

移動平均(トレンド予想)を使用する場合は、過去の移動平均対象よりも未来を予測するようにしないと答えの一部を含んでしまう形となってしまう点に注意が必要です。 この注意事項は、Validationしても回避できませんので、ご注意下さい。 具体例で申し上げると、例えば30日移動平均を使用するなら予測先の時点は30日以上先であるべきでしょう。 今回のケースをバリデーションする場合、4年分のデータを30分足として加工しておられるようなので、訓練データで30000レコード(3ヵ年)、テストデータで10000レコード(1ヵ年)ありますので、cross-validation的にみると25%分割となり、悪くない数字だと思います。 ちなみに30日移動平均を宛てに行くDNNで他通貨ペアとの相関をみて実際にDNNした例がここにあります。 https://qiita.com/ognek/items/1b776d504d20bd6f6d7d 入力要素に30日分の過去レートが直接含まれているので、規模が大きいDNNになっています。
junnnn

2017/12/05 11:33

予測精度は関係なく、ただ単に訓練データの与え方が合っているかどうかが分からなかったのですが、yag1kazさんが合っていると言うことで訓練データの与え方は問題無いと言うことが分かりました。 説明不足で何度も回答させてしまってすみませんでした。 予測精度の方では、きちんと訓練データの作成からDNNなどのネットワークの実装が完璧にできたら挑戦していきます。 色々有難うございました。
guest

0

最後がsoftmaxだと0〜1しか出力できないのではないでしょうか。

投稿2017/12/02 16:49

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

junnnn

2017/12/03 05:51

ご回答有難うございます。 reluやsigmoid関数でも試してみたのですが、値が変わりませんでした。
mkgrei

2017/12/03 06:20 編集

回帰の場合、出力層は活性化関数を入れないのが一般的かと。 sigmoid関数は[0,1]で、reluは[0,inf]ですね。
mkgrei

2017/12/03 06:25

それに加えて、lossはmse/maeが一般的です。
mkgrei

2017/12/03 06:26

回帰にcrossentropyやaccuracyは意味がありません。
junnnn

2017/12/04 13:17

mseで試したところ予測が200%超になりました。 何とも言えない感じでした。
mkgrei

2017/12/04 14:05

予測が200%を超えるというのはどういうことでしょうか。
junnnn

2017/12/05 11:35

恐らくは、自分の設計ミスだと思います。 yag1kazさんの回答で疑問の方が解決しました。 有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問