2

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

これは、ノードごとに独立したデータマトリックスを持つよりもはるかに少ないです。

4

1 に答える 1

0

trie: http://en.wikipedia.org/wiki/Trieで使用してみてはいかがでしょうか。

トライを実装する方法についての議論もあります: トライの 実装

于 2013-03-01T07:01:08.413 に答える