我用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
這比擁有獨立性要少得多用於每個節點的數據矩陣。
在C++中,總是認爲['標準:: VECTOR'(http://en.cppreference.com/w/cpp/container/數組之前)。 – 2013-03-01 06:59:45
@JoachimPileborg是的,我幾乎總是這樣做,但我從來沒有使用過載體向量,所以我不確定這是否是一個好主意。 – Topo 2013-03-01 07:01:38
爲什麼不用C5.0算法? – 2013-03-01 07:06:24