Java で支援学習アルゴリズムを作成しています。
おそらく解決できる数学的問題に遭遇しましたが、処理が重くなるため、最適な解決策が必要です。
そうは言っても、完全に素晴らしい最適化されたライブラリを誰かが知っていれば、言語は Java であるため、考慮する必要があります。
アイデアはかなり単純です。
オブジェクトは、ABDC、ACDE、DE、AE などの変数の組み合わせを格納します。
組み合わせの最大数は、プログラムの速度を落とさずに実行できる数に基づいているため、理論的には 100 と言えます。
決定プロセスは、反復ごとに 1 つの確率変数を生成します。生成された変数がいずれかの組み合わせの一部である場合。ABDC と ACDE の一部である 'A' は、C と B (または保存された組み合わせの後続の文字) の傾向よりも増加します。
もう少し明確にするために、「A」、「B」、「C」、「D」、および「E」が唯一の可能な変数であると仮定しましょう。真実は、12 または 14 のように多くなるということですが、その最大値は、ラグなしで処理できる数にも依存します。
考えられる変数は 5 つあるため、最初の反復では加重 1/5 のランダム ロールが生成されます。そのロールが「A」であることが判明した場合、次の反復で「B」と「C」の傾向は 1/5 ではなく 2/5 になります。
次の反復で「B」が生成された場合、「D」の傾向は 3/5 に増加します。注: 関係は指数関数的です。現実的には、1/5 ではなく 10% のようなわずかなブーストであり、シーケンスの 4 番目の変数に達すると雪だるま式に 50% になります。
現在、Java では、各オブジェクトの格納されたすべての組み合わせを追跡することで、おそらくこの機能を実現できます。私は、追跡プロセスを反復ごとに小さなステップで分散することにより、遅すぎてはならないと考えていました。
別の解決策は、考えられるすべての組み合わせとそれらの潜在的な傾向をマッピングすることです。もちろん、これには単純に検索機能が必要ですが、すべての可能性を計算してどこかに (おそらくファイルに) 保存する際にも問題が生じます。
私はこの型の数学にあまり詳しくありませんが、マルコフ モデルやライブラリを使用する必要があると提案されました。
このプロセスをJavaですばやく計算するにはどうすればよいですか?
.
例 >>>
シーケンス ABC は 1 つだけです。
3 つの数値の場合、最初は等しい可能性があるため、rand(1,3) のようになります。
A が結果の場合、B はシーケンスの次の文字であるため、B の可能性が高くなります。それを2倍にするとしましょう。
したがって、確率は次のようになります: A=1/4、C=1/4、B=2/4
関数は rand(1,4) のようになり、3 と 4 の結果はどちらもオプション B を表します。
次の結果が B の場合、C はシーケンス内の次の文字であるため、C の可能性を増やしたいと考えていますが、前回の増加の 2 倍 (指数関数的に) です。
確率は次のようになりました: A=1/6、C=1/6、B=4/6
関数は rand(1/6) になり、値 3、4、5、6 は C を表します。