2013-03-01 135 views
1

我用C++编写了一个决策树,使用了一个稍微修改过的版本C4.5 algorithm。每个节点表示数据集的一个属性或一列,并且每个可能的属性值都有一个子节点。用C++存储表格的最佳方法是什么?

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

主要目标是以尽可能最大的记忆和时间效率(按优先顺序)进行。

我认为最好的方法是有一个数组(或std :: vector)或类似的东西,并为每个节点有一个列表(数组,矢量等)或与column,line(可能对于该节点有效的元组)。

我现在应该有更好的方法来做到这一点,有什么建议吗?

UPDATE:我需要的是这样的:

在开始的时候我有这样的数据:

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 

这比拥有独立性要少得多用于每个节点的数据矩阵。

+1

在C++中,总是认为['标准:: VECTOR'(http://en.cppreference.com/w/cpp/container/数组之前)。 – 2013-03-01 06:59:45

+0

@JoachimPileborg是的,我几乎总是这样做,但我从来没有使用过载体向量,所以我不确定这是否是一个好主意。 – Topo 2013-03-01 07:01:38

+0

为什么不用C5.0算法? – 2013-03-01 07:06:24

回答

相关问题