我正在使用C4.5 algorithm的略微修改版本在C ++中编写决策树。每个节点代表数据集的一个属性或一列,并且每个属性的可能值都有一个子节点。
我的问题是如何存储训练数据集,因为我必须为每个节点使用一个子集,所以我需要一种快速的方法来只选择行和列的子集。
主要目标是以最大的内存和时间效率(按优先级顺序)进行。
我想到的最好的方法是拥有一个数组(或std :: vector)或类似的数组,并为每个节点都有一个列表(数组,向量等)或{{1}的东西(可能是一个元组)对该节点有效的对。
我现在应该有更好的方法来做这个,有什么建议吗?
更新:我需要的是这样的:
一开始我有这些数据:
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
节点2:
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
节点3:
columns = [0,1,2]
rows = [0,1,3]
这种方式在最糟糕的情况下我只需要浪费
columns = [0,1,2]
rows = [2,4]
这比每个节点都有一个独立的数据矩阵要少得多。