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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5763閲覧

複数の時系列データを用いた確率予測

aheshiyu_tt

総合スコア11

Keras

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/16 05:22

実現したいこと

Python の機械学習ライブラリ Keras を用いた複数時系列データの予測.

学習データとラベルデータ

ここで扱う時系列データは以下の通りです.

# x: 時系列学習データ(要素数はすべてのデータセットにおいて18個) # y: ラベルデータ(正解ラベルは0または1) # 時系列学習データは右が最新データ,左が最古のデータです. # 学習データセット(1つ目) x1 = [10, 20, 30, 30, 30, 20, 20, 40, 40, 50, 60, 70, 70, 70, 80, 90, 90, 80] y1 = 1 # 学習データセット(2つ目) x2 = [50, 40, 30, 30, 20, 20, 40, 30, 20, 10, 10, 0, 0, 0, 10, 0, 0, 0] y2 = 0 ... # このようなデータセットが膨大にあります.

学習データセットの1つ目は,初め(最も左)から次第に数値が大きくなっていき,最終的(最も右)には80まで数値が上がっており,ここで時系列データは終了しています.
これに対して,ラベルデータ(結果)が1となっています.

一方,学習データセットの2つ目では,数値が次第に下がっていき,最終的に0となり時系列データは終了しています.
また,これに対してのラベルデータ(結果)は0となっています.

なお,検証するときも同様に時系列データを入力することになります.

# x: 入力データ # result: ラベルが1となる確率 x = [10, 20, 10, 10, 40, 50, 60, 60, 70, 70, 80, 90, 80, 80, 80, 90, 90, 90] result = model.predict(x) # result: 88.746...% # 今回は入力データの数値が徐々に大きくなっているため,ラベルが1となる確率は88%と高く出ています. # 数値が徐々に小さくなる時系列データの場合は,ラベルが1となる確率は低くでるべきです.

個人的な予想と実現したいこと

数値が時系列的に上昇していれば,1になりやすく,
数値が時系列的に下降していれば,0になりやすい.
このような法則(?)を機械学習に学習させたいです.

もちろん,最後のデータ(最も右)だけを学習させれば解決できる話のように見えますが,
ここは,あえて時系列データを使った結果を求めたいという目標があるため,ご理解いただきたいです.

参考にしている記事(学習方法)

現在参考にしている学習方法は『Kerasで基本的なRNN (LSTM) を試してみる』の記事に書かれている内容とほぼ同じものです.

当記事で扱っているデータは以下の通りのようです.

# x: 学習データ(要素数はデータによって異なる) # y: ラベルデータ(正解ラベルは時系列学習データの和) # 学習データセット(1つ目) x1 = [1, 0, 0, 1, 1, 1, 0, 0, 1, 0] y1 = 5 # 学習データセット(2つ目) x2 = [0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0] y2 = 4 ... # このようなデータセットが膨大にあります.

学習データの和が正解ラベルとして学習しているようです.
学習結果は当記事に書かれてある通りで,ほぼ高精度で予測ができているように思えます.

初めに示した「学習データとラベルデータ」にある通り,当記事の学習データが今回私が扱う学習データセットに似ていることからこのサイトを参考にしています.

時系列データは1つではない

扱う学習データセットは「学習データとラベルデータ」で示した通りですが,時系列データは複数あり,それに対応するラベルデータも複数あることに注意してください.
一般的に時系列データの学習といえば,学習させる時系列データは1つであるという認識が強いようで,例えば株の予測で言えば1つの長い時系列データを学習させて,その後の動向を見るというものがあります.(他にも簡単なものでsin波の予測など)

しかし,今回扱うデータはそのような学習とは異なるということをご理解ください.

複数の時系列データでの学習方法がなかなか見つからない

もちろん,ここで質問する前にとても長い時間をかけて複数の時系列データとそれに対応する複数のラベルデータの学習方法を調べましたが,全くヒットせず,ようやく見つけたのが上記の参考サイトでした.

そもそも複数の時系列データの学習方法の調べ方(検索の言葉選び)が悪かったのかもしれません.

実現したいことまとめ

現在は上記にて示した参考サイトをもとに学習と検証をしていますが,そもそも**そのやり方でよいのか?**という疑問が湧きました.
扱っているデータやそれをもとに求めたい結果も上記に記載しましたので,現在のやり方よりも良いやり方があるようでしたら教えていただきたいです.良いやり方でなくとも,新たなアプローチがあれば教えていただきたいです.

なお,現在の学習結果としては良いとまでは言えない結果になっています.

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

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

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

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

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

guest

回答2

0

ベストアンサー

ご質問の状況は**「時系列データ」として処理をするのは適切ではありません**。

まず、時系列のデータであっても、時系列をあまり気にせずに、未知の値を訓練データとして使わない等の配慮があれば、一定の処理が可能です。ご質問の状況はこれを満足します。時系列関係なく普通のベクトルデータとして学習させれば、一番右と目的変数の相関が高いことをすぐに学習し、高い精度で予測できるようになるでしょう。

上記に逆らって、あえて時系列データとしての処理を考えてみる場合も、質問者様の言われるような**「複数の時系列データ」を考える必要はありません**。

  1. x1、x2、・・・ x(t)というt方向に時間が流れている場合。これは普通の時系列データとして、説明変数が多次元、目的変数が1次元の問題として考えられます。

  2. x1、x2のベクトル方向で時間が流れている場合、これが質問者様の言う、「複数の時系列」であると思います。この場合、1つのt方向で、説明変数x1、x2があると考えられます。これも説明変数が多次元、目的変数が1次元(場合によっては多次元ですが1次元の方が事例は豊富)の問題に帰着されます。x1とx2で別時刻であるという場合でも、ひとつの流れる時間の中で、複数の説明変数がありつつ、一部欠損値がある、という問題に帰着できます。

よって、「このデータ条件だけ考えると時系列なんて持ち出さなくてもよいのでは」「時系列で考える場合でも、複数の時系列とか複雑な考え方をしなくてもよいのでは」が、回答となります。

世界線は1本です。エル・プサイ・コングルゥ

投稿2020/10/16 14:39

編集2020/10/16 16:01
toast-uz

総合スコア3266

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

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

aheshiyu_tt

2020/10/18 13:27

ご回答ありがとうございます. 時系列データではなく,ベクトルデータとして学習させてみるアプローチは思いつきませんでした! よろしければ,Kerasのライブラリを用いて具体的にどのようにすればよいか教えていただけないでしょうか.また,時系列データであればRNN,画像学習であればCNNなどのように,その手法(ベクトルデータでの学習)を調べる上で重要となるキーワードは何になるでしょうか.(例:〇〇NN)
toast-uz

2020/10/18 13:45

そういう複雑なモデルはターゲットが狭いです。時系列はRNNだーとかLSTMだーとかは、現実の問題を解く際はめったに使わないと思った方が良いです。並の手法で時系列に注意して使います。 「Kaggleで勝つデータ分析の技術」 https://gihyo.jp/book/2019/978-4-297-10843-4 の3.10、4章全般、5.3くらいを参照ください。
aheshiyu_tt

2020/10/19 04:14

返信ありがとうございます. ご紹介いただいた書籍をすぐに参照するのは困難であるため,先にいくつかお聞きしたいことがあります. 返信内容にて,一般的に現実の問題に対してはRNNやLSTMなどの手法は使用しないとのことですが,では現実の問題に対する機械学習手法はどのようにするべきなのでしょうか.ライブラリを用いるのではなく,機械学習のメソッドを自作するということでしょうか. また繰り返しになりますが,初めの回答にある時系列データではなくベクトルデータとして学習させると良いという部分について,私なりにベクトルデータを用いた機械学習について調べてみましたが,目的のサイトを見つけることができませんでした.そもそもベクトルデータを用いた機械学習という状況がマイナーである恐れがありますが... 具体的な解決策を見つけるためにも,時系列データではなくベクトルデータを用いると良いという部分についてより詳細に教えていただけないでしょうか. よろしくお願いします.
toast-uz

2020/10/19 09:13

前半の件、私が参考提示した書籍の目次、特に私が指定した章の目次をご覧下さい。リンクをクリックすれば詳細な目次があります。そちらをご覧いただければ分かると思います。 後半の件、ベクトルという私の表現が、新規性あるものと勘違いさせてしまったのかも知れません。説明変数がn個あるのは、ごく普通の機械学習モデルですよね。そのn個の説明変数をベクトルと称しました。
aheshiyu_tt

2020/10/20 00:35

返信ありがとうございます. ご紹介いただいた書籍の目次を確認してみたところ,私の知らない単語やデータ分析における重要な項目が多く見られました.(もちろん書籍であるため内容までは見えませんが...(^_^;)) それらについて調べていくうち,機械学習の前提となるデータの加工の重要性に気づかされました. ベクトルデータの学習については私の認識が悪かったですね.申し訳ありませんでした. 回答に加えて追加の質問に答えてくださりありがとうございました.
guest

0

もちろん,最後のデータ(最も右)だけを学習させれば解決できる話のように見えますが,
ここは,あえて時系列データを使った結果を求めたいという目標があるため,ご理解いただきたいです.

途中のデータはノイズということですよね?

過去のデータを駆使して少しでも未来を正確に予測しようとするRNN(LSTM)では
正答率は上がらないのではないでしょうか。

途中のデータはダミーであるため一切無視して、最後のデータのみを参照すべし、
と気づかせるモデルを自作する必要があると思います。
どうやって作ればいいか、というところまでは判りませんが。

投稿2020/10/16 08:54

tabuu

総合スコア2480

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

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

aheshiyu_tt

2020/10/16 13:26

ご回答ありがとうございます. 確かに最後のデータ以外のデータはノイズのようにも見えますね. しかし,例えば最後のデータが50だとして,その約3つ前から10, 25, 40と数値が上がった結果50になっている場合と,70, 60, 55と数値が下がった結果50になっているのでは同じ50でも数値の意味として異なるのではないかと思っています. もちろん,18個前(最も左)のデータが意味を持つとは思いませんが,直前のいくらかの時系列データはノイズではなく適切な意味を成し,直前データのみでの学習とは違った結果が得られるのではないかと思っています. また,モデルを自作するとのことですが,PythonのライブラリであるKerasを用いずに,独自に機械学習を実装するという意味でしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問