7

二分決定木があります。入力を float の配列として受け取り、各分岐ノードが入力インデックスと値で分割され、最終的にリーフに移動します。

私はこのツリーで膨大な数のルックアップを実行しています (パフォーマンス分析によると実行時間の約 17% (編集: 他の領域を最適化すると、現在はほぼ 40% です))。ルックアップ速度を向上させるための異なるデータ構造。

入力がリーフノードに直接マップされないため、ある種のハッシュテーブルは使用できませんが、ツリーの代わりに使用できるメソッドとデータ構造について誰かが提案しているのではないかと思っていました (または同様に) as?) を使用して検索速度を向上させます。

メモリは問題ですが、速度ほど問題ではありません。

コードは現在 C# で記述されていますが、明らかに任意の方法を適用できます。

編集: 投稿するにはコードが多すぎますが、ツリーについて詳しく説明します。

ツリーは情報ゲイン計算を使用して生成されます。常に 50/50 分割であるとは限りません。分割値は任意の float 値である可能性があります。単一の入力を複数回分割して、その入力の解像度を上げることもできます。

イテレータのパフォーマンスに関する質問をここに投稿しました。

C#でツリーを反復するマイクロ最適化

しかし、パフォーマンスをさらに向上させるには、データ構造自体を調べる必要があると思います。

私はここで可能な限り多くのパフォーマンスを目指しています。私は機械学習の新しい方法に取り組んでおり、ツリーはフィードバック ループを使用して成長します。私が取り組んでいるプロセスについては、数か月間実行されると見積もっています。究極の目標は、メモリをあまり使用しない速度です。

4

2 に答える 2

1

意思決定の確率が 50/50 であると仮定すると、次のようになります。

2 つのバイナリ決定があったとします。可能なパスは 00、01、10、11 です

ツリーの代わりに、4 つの結果を持つ配列があると想像してください。float の配列を、この配列のインデックスとなる 2 進数に変換できます。

于 2013-05-14T09:32:58.760 に答える