2011-06-28 54 views
0

我正在爲我自己的一些工作開發一個C++機器學習庫,並且對錶示輸入數據的最佳實踐感到好奇。現在,我正在考慮使用DataManager類來處理I/O操作,以便從文件,流等中讀取數據。在開發時,我意識到還需要創建類來管理功能標籤(與輸入數據關聯)和類別標籤(在訓練數據的情況下)。機器學習輸入數據結構最佳實踐

因此,我的實現有一個類從一個文件(我使用UCI機器學習庫)讀取數據到boost :: variant對象中。 DataManager類重載操作符>>以便我可以從提供的行讀取每個逗號分隔的特徵值;它的特徵值是'?',它輸入struct t_missing {}。

對於類/特性管理器,我認爲維護一個鏈接的特性/類名稱列表以及每個實例的數量是合適的。

無論如何,這只是我對這樣一個班級的初步想法,我很想聽聽關於實施的其他想法/建議。顯示代碼是沒有必要的;我主要只是想聽聽我應該考慮的其他事情。

謝謝!

回答

1

一些學習問題出現在稀疏數據上,即有大量可能的特徵的數據,其中大部分是零。在這種情況下,只存儲非零的特徵要高效得多。

SVM庫通常是這種情況,如LibSVM,它將向量存儲爲(feature_index,feature_value)對的列表。例如。

[0, 1, 0, 0, 1, 0, 0, 1] 

將是::他們將使用用於向量格式(索引從1開始)

2:1 5:1 8:1