3

MATLAB を使用して、巨大な (つまり、メモリに格納できない) データセットからバイナリ分類決定木を構築しようとしています。基本的に、私がやっていることは次のとおりです。

  1. すべてのデータを収集する
  2. データに対して n 個の決定関数を試す
  3. データ内のクラスを分離するための最良の決定関数を選択します
  4. 元のデータセットを 2 つに分割する
  5. 分割の再帰

データにはk 個の属性と分類があるため、膨大な数の行とk+1列の行列として格納されます。決定関数はブール値であり、各行を左または右のサブツリーに割り当てる属性に作用します。

現在、メモリに保持できるチャンクでファイルにデータを格納し、各行に ID を割り当てることを検討しています。これにより、分割の決定はすべてのファイルを順番に読み取ることによって行われ、将来の分割は ID 番号によって識別されます。

これをより良い方法で行う方法を知っている人はいますか?

編集: 行数 m は約 5e8 で、k は約 500 です

4

1 に答える 1

2

分割するたびに、データセットをますます小さなサブセットに分割します。単一のデータファイルから始めます。ストリームとして開き、一度に1行ずつ処理して、分割する属性を特定します。最初の決定関数を取得したら、元のデータファイルを2つの小さなデータファイルに分割し、それぞれが分割データの1つのブランチを保持します。再帰します。データファイルは、メモリにロードできるようになるまで、どんどん小さくなっていくはずです。そうすれば、行にタグを付けたり、巨大なデータファイルを飛び回ったりする必要がありません。

于 2009-07-17T19:17:55.223 に答える