我在5x2交叉驗證中使用Libsvm對非常大量的數據進行分類,也就是說,我有47k樣本用於訓練,47k樣本用於10種不同配置的測試。libsvm中的大型培訓和測試數據
我通常使用LIBSVM的劇本easy.py來對數據進行分類,但它採取了這麼久,我一直在等待結果,超過3小時,沒事的,我還是要重複此過程更9次!
是否有人知道如何更快地使用libsvm和非常大量的數據? C++ Libsvm函數的工作速度是否比python函數快?
我在5x2交叉驗證中使用Libsvm對非常大量的數據進行分類,也就是說,我有47k樣本用於訓練,47k樣本用於10種不同配置的測試。libsvm中的大型培訓和測試數據
我通常使用LIBSVM的劇本easy.py來對數據進行分類,但它採取了這麼久,我一直在等待結果,超過3小時,沒事的,我還是要重複此過程更9次!
是否有人知道如何更快地使用libsvm和非常大量的數據? C++ Libsvm函數的工作速度是否比python函數快?
LibSVM的訓練算法不能擴展到這種類型的數據集;在最壞的情況下需要O(n³)時間,在典型的情況下需要O(n²)。首先要嘗試的是正確縮放數據集;如果仍然不能正常工作,請切換到
正如larsmans所提到的,根據數據的維度和數據點的數量,libsvm可能無法很好地進行縮放。
C實現可能會運行得更快一些,但它不會有重大區別。你有幾個選項可供你使用。
希望這有助於!機器學習中最棘手的問題之一是應對有時需要的純數據量。
easy.py是一個用於訓練和評估分類器的腳本。它使用grid.py爲SVM參數執行元素校準。在grid.py中是一個參數「nr_local_worker」,它定義了多個線程。你可能希望增加它(檢查處理器負載)。
感謝您的回答,但是如果我使用帶線性內核的libsvm(例如帶參數t 0的-svmtrain),我使用的是線性svm,因此運行時間會很低? – mad
@mad:沒有。您將使用相同的慢速SMO算法。這就是爲什麼LibSVM的作者發佈了Liblinear,它可以用一個座標下降算法來擬合(幾乎)同一種模型。 –