私はバイナリデシジョンツリーを持っています。それは入力を浮動小数点の配列として受け取り、各分岐ノードは入力インデックスと値を分割し、最終的に私を葉にします。木よりも速いデータ構造を使うことができますか?
パフォーマンス分析(編集:他の領域を最適化して、現在はほぼ40%になっています)によれば、実行時間の約17%)がこのツリーで大量に検索されています。検索速度を改善するために別のデータ構造を使用する必要があります。
入力が葉ノードに直接マップされないため、何らかのハッシュテーブルを使用することはできませんが、ツリーの代わりに使用できるメソッドやデータ構造について誰かが示唆していたのでしょうかルックアップ速度を向上させるために、
メモリは懸念されますが、速度よりも懸念されます。
コードは現在C#で書かれていますが、明らかにどのような方法でも適用できます。
編集: 投稿するにはあまりにも多くのコードがありますが、私はその木についてもっと詳しく説明します。
ツリーは情報ゲインの計算を使用して生成されますが、必ずしも50/50の分割ではなく、分割値は任意の浮動小数点値にすることができます。 1つの入力を複数回分割して、その入力の解像度を上げることもできます。
私はここで、イテレータのパフォーマンスについての質問投稿:
Micro optimisations iterating through a tree in C#
をしかし、私はさらにパフォーマンスを向上させるためのデータ構造自体を見る必要があるかもしれないと思います。
私はできるだけ多くのパフォーマンスを目指しています。私は機械学習の新しい方法に取り組んでいます。木はフィードバックループを使って自ら成長します。私が取り組んでいるプロセスでは、数ヶ月間稼働すると見積もられているので、数%の節約は大規模です。究極の目標は、あまりにも多くのメモリを使わずにスピードを上げることです。
ディクショナリのある辞書 –
バイナリツリーがあり、各ノードの入力はフロートです - 入力<0.5'に基づく子ノードの選択か、もっと複雑なことがあります?いくつかのコードを投稿できますか?また、実行時間の17%は非常に文脈的ではありません - それは非常に高速かもしれません!あなたが目指しているターゲット、または共有できるプロファイリングの詳細がありますか? –
ダンに感謝します。ツリーとターゲットに関する詳細を追加しました。 –