2012-09-02 128 views
3

我在機器學習python的scikit-learn軟件包中使用SVM分類器。 我的功能是整數。當我調用fit函數時,我得到用戶警告「Scaler假定浮點值作爲輸入,得到int32」,SVM返回它的預測,我計算混淆矩陣(我有2個類)和預測精度。 我試圖避免用戶警告,所以我將這些功能保存爲浮動。事實上,警告消失了,但我得到了完全不同的混淆矩陣和預測準確性(令人驚訝的是不太準確) 有人知道它爲什麼會發生嗎?有什麼更可取的,我應該作爲浮動或整數發送功能? 謝謝!SVM整數特徵

+1

浮標是首選,因爲整數將被複制/轉換成浮點數組,所以你在浪費內存。不過,奇怪的是你應該得到不同的結果。 –

回答

8

您應該將它們轉換爲浮點數,但實現方式取決於整數要素實際表示的內容。

你的整數是什麼意思?他們是否是類別成員指標(例如:1 == sport,2 == business,3 == media,4 == people ...)或具有訂單關係的數字度量標準(3大於2又是大於1)。例如,你不能說「人」比「媒體」大。這是毫無意義的,會讓機器學習算法混淆這個假設。

因此,應將分類特徵轉換爲每個特徵作爲每個可能類別的幾個布爾特徵(值爲0.0或1.0)。在scikit-learn中查看DictVectorizer class以更好地理解我的分類特徵。

如果有數字值只是將它們轉換爲浮點數,也許可以使用定標器將它們鬆散地放在[-1,1]範圍內。如果它們跨越幾個數量級(例如單詞出現次數),那麼取對數計數可能會產生更好的結果。 http://scikit-learn.org/stable/modules/preprocessing.html

編輯:在本節文檔的功能,預處理和示例的詳細文檔還閱讀本指南,對功能表現更多的細節和預處理:http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf

+0

謝謝!我的特徵是具有訂單關係的數字度量,範圍爲0-9。我剛剛轉換爲浮動與浮法鑄造。這很奇怪,它給了我不同的結果。 –

+0

您可以用http://gist.github.com上展示問題的簡約再現案例(python腳本+數據子集)填寫bug報告,並鏈接http://github.com/上的新問題scikit-learn/scikit-learn/issues? – ogrisel