2013-03-01 134 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

回答

相關問題