2013-07-03 223 views
3

我在5x2交叉驗證中使用Libsvm對非常大量的數據進行分類,也就是說,我有47k樣本用於訓練,47k樣本用於10種不同配置的測試。libsvm中的大型培訓和測試數據

我通常使用LIBSVM的劇本easy.py來對數據進行分類,但它採取了這麼久,我一直在等待結果,超過3小時,沒事的,我還是要重複此過程更9次!

是否有人知道如何更快地使用libsvm和非常大量的數據? C++ Libsvm函數的工作速度是否比python函數快?

回答

6

LibSVM的訓練算法不能擴展到這種類型的數據集;在最壞的情況下需要O(n³)時間,在典型的情況下需要O(n²)。首先要嘗試的是正確縮放數據集;如果仍然不能正常工作,請切換到

+0

感謝您的回答,但是如果我使用帶線性內核的libsvm(例如帶參數t 0的-svmtrain),我使用的是線性svm,因此運行時間會很低? – mad

+1

@mad:沒有。您將使用相同的慢速SMO算法。這就是爲什麼LibSVM的作者發佈了Liblinear,它可以用一個座標下降算法來擬合(幾乎)同一種模型。 –

3

正如larsmans所提到的,根據數據的維度和數據點的數量,libsvm可能無法很好地進行縮放。

C實現可能會運行得更快一些,但它不會有重大區別。你有幾個選項可供你使用。

  • 你可以隨機抽取你的數據來處理它的一小部分。
  • 您可以使用類似PCA
  • 將您的數據投影到較低維度根據您的數據類型,您可以查看不同的內核。直方圖交叉核心會爲您的數據生成嗎?當你真的需要一個線性決策函數時,你使用的是一個RBF內核嗎?

希望這有助於!機器學習中最棘手的問題之一是應對有時需要的純數據量。

0

easy.py是一個用於訓練和評估分類器的腳本。它使用grid.py爲SVM參數執行元素校準。在grid.py中是一個參數「nr_local_worker」,它定義了多個線程。你可能希望增加它(檢查處理器負載)。