2012-07-10 56 views
7

我有一個三類問題與不平衡的數據(90%,5%,5%)。現在我想用LIBSVM來訓練一個分類器。使用LIBSVM grid.py獲取不平衡數據?

問題是,LIBSVM優化其參數伽馬和成本的最佳準確性,這意味着100%的例子被歸類爲1類,這當然不是我想要的。

我試着修改重量參數-w沒有太大的成功。

所以我想要的是,修改grid.py的方式,它優化成本和伽瑪精度和召回分類,而不是整體的準確性。有沒有辦法做到這一點?或者有其他可以做這種事情的腳本嗎?

回答

8

-w參數是您需要的不平衡數據。你試過什麼了?

如果你的類是:

  • 0級:90%
  • 類1:5%
  • 類2:5%

你應該通過以下PARAMS支持向量機:

-w0 5 -w1 90 -w2 90 
+1

謝謝,但我認爲它應該是相反的方向:-w0 5 -w1 90 -w2 90,因爲較小的班級應該有更多與他們相關的成本..這一個幫助! – Damnum 2012-07-11 10:25:30

+0

是的,我認爲你是對的。我剛剛編輯了我的問題。謝謝! – 2012-07-11 13:26:51

+0

而當你有3個以上的課程,你怎麼能把每個w的價值歸功於? – lilouch 2017-01-11 13:50:57

0

您可以使用grid.py優化任何精度,召回率,F分數和AUC。調整是你必須改變LIBSVM中svm-train使用的交叉驗證評估測量。按照procedure given on LIBSVM website

0

如果你有不平衡的數據,你可能不應該優化精度。相反,優化f-score(或回憶,如果這對你更重要)。您可以按照here所述更改評估功能。

我認爲你還應該優化伽瑪和成本,同時使用不同的類別重量配置。我通過爲此目的傳遞不同的類權重(-wi weight)來修改grid.py中的「get_cmd」函數。根據我的經驗,課堂加權並不總是有幫助。