2013-12-20 75 views
0

我正在爲SVM準備數據。行包含一種類別的值如何編碼不連續的數值

80, 160, 320, etc. (5*2^n) 

實際值範圍爲[80:10240]

我不知道我是否應該擴大範圍[80:10240] -1:1和使用簡單特徵。

另一種可能性是將所述範圍內的所有值具有分割到8標記的功能-1或1(如它被建議用於LIBSVM引導屬性功能)

我使用SVM的LIBSVM實現。你能給我一個建議,哪種方法會提高準確性?

回答

1

很難說,沒有做一些實驗,但[80:10240]聽起來像是一個大範圍擠壓在-1:1,但仍然可能工作。我認爲另一種選擇是隻取n值(即log(x/5)),所以你的範圍應該是[4:11],這聽起來更容易管理。

+0

我相信縮放範圍不是問題,因爲LibSVM中的值是雙打。 -1:1是縮放工具的默認範圍,所以我認爲這個縮放比例是合理的。我的意思是,因爲我可以將值編碼爲屬性,如果我應該這樣做的話。也許屬性特徵可以提供比簡單值更高的準確性。 –

+0

哦,我相信我沒有正確解釋自己。問題不在-1:1的範圍內,這對SVM來說是一個很好的規模。問題是原始範圍[80:10240],當它們被傳輸到範圍[-1:1]時會產生非常小的值,而非常小的值會導致優化問題出現數字問題。這就是說,無論如何這都是一個測試問題。 – Pedrom

+0

好吧,我想,我現在明白了!你的意思是在縮放之前使數值範圍更加線性化?這是我迄今尚未考慮的一個好方法(我對SVM非常陌生,並不知道所有的「技巧」)。實際上,我寧願將它編碼爲一個特徵,而不是將它分割爲屬性。原因是,有時候這些值(實際上是樣本滴定)不遵循規則5 * 2^n,但是是100,200等。使用單個特徵不需要將這樣的非標準值映射到屬性。 –