C4.5アルゴリズムのわずかに変更されたバージョンを使用して、C++で決定木をプログラミングしています。各ノードは、データ セットの属性または列を表し、属性の可能な値ごとに子を持ちます。
私の問題は、各ノードにサブセットを使用する必要があることを念頭に置いてトレーニングデータセットを保存する方法であるため、行と列のサブセットのみを選択する簡単な方法が必要です。
主な目標は、可能な限り最もメモリと時間効率の良い方法で (その優先順位で) 実行することです。
私が考えた最良の方法は、配列の配列(またはstd :: vector)またはそのようなものを持ち、各ノードにリスト(array、vectorなど)またはcolumn,line
(おそらくタプル)のペアを持つものを持つことですそのノードに対して有効です。
私は今、これを行うためのより良い方法があるはずですが、何か提案はありますか?
更新:私が必要とするのは次のようなものです:
最初に、次のデータがあります。
Paris 4 5.0 True
New York 7 1.3 True
Tokio 2 9.1 False
Paris 9 6.8 True
Tokio 0 8.4 False
しかし、2 番目のノードについては、次のデータが必要です。
Paris 4 5.0
New York 7 1.3
Paris 9 6.8
3 番目のノードの場合:
Tokio 2 9.1
Tokio 0 8.4
ただし、最大数百の列を持つ数百万のレコードのテーブルがあります。
私が念頭に置いているのは、すべてのデータをマトリックスに保持し、各ノードについて現在の列と行の情報を保持することです。このようなもの:
Paris 4 5.0 True
New York 7 1.3 True
Tokio 2 9.1 False
Paris 9 6.8 True
Tokio 0 8.4 False
ノード 2:
columns = [0,1,2]
rows = [0,1,3]
ノード 3:
columns = [0,1,2]
rows = [2,4]
このように最悪のシナリオでは、私はただ無駄にする必要があります
size_of(int) * (number_of_columns + number_of_rows) * node
これは、ノードごとに独立したデータマトリックスを持つよりもはるかに少ないです。