web-dev-qa-db-ja.com

過去からの将来の結果を予測するニューラルネットワークとアルゴリズム

私はアルゴリズムに取り組んでいました。そこでは、いくつかの入力が与えられ、それらの出力が与えられ、3か月間(与えるまたは取る)出力が与えられます。将来の出力が何であるかを見つけて計算する方法が必要です。
今、与えられたこの問題は証券取引所に関連している可能性があり、特定の制約と特定の結果が与えられており、次のものを見つける必要があります。
ニューラルネットワークの株式市場の予測に出くわしました。 Google それ、またはそれについて読むことができます ここここ そして ここ

アルゴリズムの作成を開始するために、レイヤーの構造がどうあるべきかを理解できませんでした。
指定された制約は次のとおりです。

  • 出力は常に整数になります。
  • 出力は常に1から100の間です。
  • 正確な入力はありません。たとえば、株式市場と同じように、株価が1と100の間で変動することがわかっているので、これを唯一の入力と見なすかどうかはわかりません。
  • 過去3か月(またはそれ以上)の記録があります。

さて、私の最初の質問は、入力のためにいくつのノードを取るかということです。

出力は1つだけです。しかし、私が言ったように、入力レイヤーに100ノードを取る必要があります(株価は常に整数であり、常に1と100の間にあると仮定しますか?)

隠しレイヤーはどうですか?そこにはいくつのノードがありますか?たとえば、そこにも100ノードを使用する場合、ネットワークのトレーニングはそれほど多くないと思います。入力ごとに、以前のすべての入力も考慮する必要があるためです。

たとえば、4か月目の1日の出力を計算している場合、非表示/中間レイヤーに90個のノードが必要です(簡単にするために、毎月30日と想像してください)。今2つのケースがあります

  • 私たちの予測は正しく、結果は私たちが予測したものと同じでした。
  • 私たちの予測は失敗し、結果は私たちが予測したものとは異なっていました。

いずれにせよ、4か月目の2日目の出力を計算するときは、90個の入力だけでなく、最後の結果(予測ではなく、同じです!)なので、中間/非表示レイヤーに91個のノードがあります。

など、それは毎日ノードの数を増やし続けるでしょう、AFAICT。

したがって、他の質問は、動的に変化する場合、非表示/中間層のノード数をどのように定義/設定するかです。

私の最後の質問は、私が気付いていない他の特定のアルゴリズムがありますか(このようなもの/もののために)?このニューラルネットワーキングのものをいじくり回す代わりに使用する必要がありますか?

最後に、(私が作成しているアルゴではなく)出力を予測する原因となる可能性のある、欠落している可能性のあるものはありますか?警告、または欠落している可能性のある問題を引き起こす可能性のあるものはありますか?

17
Razort4x

あなたの質問への答えとして言うべきことがたくさんあります。実際、あなたの質問は、一般的な時系列予測の問題と、このタスクのためのニューラルネットワークアプリケーションに対応しています。ここではいくつかの最も重要なキーのみを書いていますが、これを読んだ後、クエリtime series prediction neural networkに対するGoogleの結果を掘り下げる必要があります。原則が詳細にカバーされている作品はたくさんあります。さまざまなソフトウェア実装(ソースコードを使用)も存在します( これはc ++のコードを使用した例の1つにすぎません )。

1)問題は、データの前処理と正しい入出力係数の選択について99%であり、ニューラルネットワークかその他かを問わず、使用する具体的な機器については1%にすぎないと言わなければなりません。補足として、ニューラルネットワークは他のほとんどのデータ分析方法を内部的に実装できます。たとえば、別の回答で言及されているように、SVDに密接に関連する主成分分析(PCA)にニューラルネットワークを使用できます。

2)入出力値が特定の領域に厳密に適合することは非常にまれです。実生活のデータは絶対値で無制限と見なすことができますが(その変更によってチャネルが生成されているように見えても、すぐに分解される可能性があります)、ニューラルネットワークは安定した状態でのみ動作できます。これが、データが通常最初に増分に変換される理由です(i番目のポイントとi-1の間のデルタを計算するか、それらの比率からlogを取得することによって)。 [0、100]領域内にあると宣言しますが、とにかくデータを使用して実行することをお勧めします。そうしないと、ニューラルネットワークはいわゆるナイーブ予測子に縮退する可能性が高く、次の各値が前と等しい予測を生成します。

次に、データは[0、1]または[-1、+ 1]に正規化されます。 2つ目は、+ 1が上に移動し、-1が下に移動することを示す時系列予測の場合に適しています。ネット内のニューロンにハイパータン活性化関数を使用します。

3)日付のsliding windowから取得した入力データをNNにフィードする必要があります。たとえば、1年のデータがあり、すべてのポイントが1日である場合、ウィンドウのサイズ(たとえば、1か月)を選択し、過去から未来へと日ごとにスライドさせる必要があります。ウィンドウの右端の日がNNのターゲット出力です。これは非常に単純なアプローチです(はるかに複雑です)。継続的に到着するデータの処理方法を尋ねるという理由だけで言及します。答えは、NNを毎日変更/拡大する必要はないということです。ウィンドウサイズが固定された定数構造を使用し、最も古いポイントを「忘れる」(NNに提供しない)だけです。持っているすべてのデータを単一の入力として扱うのではなく、それを多くの小さなベクトルに分割し、それらでNNをトレーニングして、ネットがデータを一般化し、規則性を見つけることができるようにすることが重要です。

4)スライディングウィンドウのサイズは、NN入力サイズです。出力サイズは1です。パフォーマンスを向上させるには、非表示のレイヤーサイズを試してみてください。 sqrt(in * out)のように、入力と出力の間にある値から始めます。

最新の調査によると、 リカレントニューラルネットワーク 時系列予測のタスクの方がうまく機能しているようです。

25
Stan

彼が言うとき私はスタンに同意します

1)問題はデータ前処理に関する99%であると言わなければなりません

私は25年以上にわたって、ヘリコプターの飛行制御を含むさまざまな航空宇宙アプリケーションにニューラルネットワークを適用してきました-入力/出力データセットの設定がすべてです-他のすべては二次的なものです。

ニューラルネットワークは「価値のあるものを何も生み出さなかったため」すぐに削除されたというスマークマンのコメントに驚いています。これは、ニューラルネットワークを使用している人は誰でもニューラルネットワークの経験がほとんどないことを示しています。

トピックがニューラルネットワークの株式市場の予測について説明していることを考えると、私はそれを機能させたと言えます。テスト結果は私のウェブサイトwww.nwtai.comからダウンロードできます。

それがどのように行われたかは明かしませんが、ニューラルネットワークをより真剣に使用して探求したくなるような興味深いデータが十分にあります。

6
Mike

この種の問題は、100万ドルを獲得したいと思っている何千人もの人々によって特によく研究されました NetFlix賞

以前の提出は、多くの場合、 K最近傍法 に基づいていました。その後の提出は、 特異値分解サポートベクターマシン および 確率的勾配降下法 を使用して行われました。勝者はいくつかのテクニックを組み合わせて使用​​しました。

優れたものを読む コミュニティフォーラム は、過去から未来を予測するための最良の方法について多くの洞察を与えるでしょう。また、さまざまなメソッドのソースコードがたくさんあります。

面白いことに、ニューラルネットワークは価値のあるものを何も生み出さなかったため、すぐに削除されました(そして、私は個人的に、重要なNNが価値のあるものを生み出すのを見たことがありません)。

始めたばかりの場合は、最初のパスとしてSVDをお勧めします。作成は非常に簡単で、データに対して驚くべき洞察を生み出すことがよくあります。

幸運を!

2
smirkingman