2

我正在使用稍微修改过的C4.5 算法版本在 C++ 中编写决策树。每个节点代表数据集的一个属性或一列,并且每个可能的属性值都有一个子节点。

我的问题是如何存储训练数据集,记住我必须为每个节点使用一个子集,所以我需要一种快速方法来只选择行和列的子集。

主要目标是尽可能以尽可能高的内存和时间效率(按优先级顺序)进行操作。

我认为最好的方法是拥有一个数组数组(或 std::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

但对于第二个节点,我只需要这些数据:

Paris    4    5.0
New York 7    1.3
Paris    9    6.8

对于第三个节点:

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 。

还有一个关于如何实现trie的讨论: Trie implementation

于 2013-03-01T07:01:08.413 回答