ここで概念的な質問。
決定木を再帰的に構築しています。関数の各反復は、トレーニング例のサブセットを取得し、すべての機能と各機能内のすべての可能な分割を反復し、可能な最良の分割を見つけ、サブセットを 2 つの小さなサブセットに分割し、それ自体 (関数) を 2 回 (それぞれに 1 つずつ) 呼び出します。分割サブセット。
これは以前に MatLab でコーディングしましたが、実行速度が遅すぎたため、C で試しています (あまり詳しくありません)。MatLab では、すべての分割の情報 (どの機能、その機能内のどの値、これが葉ノードである場合の分類、各子の行番号) を保持するグローバルな「分割」マトリックスを使用しました。新しいテストデータポイントを使用してそのマトリックスをトラバースして、その分類を見つける方法。
C のグローバル 2D 配列はヘッダー ファイルで可能のように見えますが、別の方法がある場合は、ヘッダー ファイルを使用したくありません。問題は、関数が再帰的に呼び出されるため、「分割」で次に使用可能な行が何であるかを知るのが難しいことです。子の行が親の行の 2*i と 2*i+1 のようにすることもできますが、多くの分割がある大きな配列の場合、これには大量の初期ストレージが必要になります。
何か案は?