2013-10-22 118 views
1

背景/問題麻煩訓練SVM(scikit學習包)

我試圖用Scikit學習創建SVM。我有一個訓練集(這裏是它的鏈接https://dl.dropboxusercontent.com/u/9876125/training_patients.txt),我加載並用於訓練SVM。訓練集長3600行。當我使用全部3600個元組時,SVM從未完成訓練......但是當我只使用第一批3594元組時,它在一分鐘內完成訓練。我嘗試過使用各種不同大小的訓練集,並且同樣的事情會持續發生......取決於我使用SVM的元組數是多少,要麼訓練得很快,要麼永遠不會完成。這導致了我的結論,SVM難以根據數據收斂答案。

我對這是一個收斂問題的假設是否正確?如果是這樣,解決方案是什麼?如果不是,那還有什麼問題呢?

代碼

import pylab as pl # @UnresolvedImport 
from sklearn.datasets import load_svmlight_file 

print(doc) 
import numpy as np 
from sklearn import svm, datasets 


print "loading training setn" 
X_train, y_train = load_svmlight_file("training_patients.txt") 


h = .02 # step size in the mesh 
C = 1.0 # SVM regularization parameter 


print "creating svmn" 
poly_svc = svm.SVC(kernel='poly', cache_size=600, degree=40, C=C).fit(X_train, y_train) 


print "all done" 
+1

嘗試將'SVC'設置爲'verbose = 1'。它沒有告訴你很多,但它可能暗示它是否還在做任何事情。 (同樣要注意SVC訓練在最壞的情況下可能需要三次) –

回答

4

背後SVM的優化算法具有立方(爲O(n^3))的複雜性假設相對高的成本(C)和高維特徵空間(多項式核與d = 40意味着〜1600維特徵空間)。我不會稱之爲「收斂問題」,因爲對於3000多個樣本,需要一段時間來訓練這樣的模型,這是正常的。事實上,對於某些子集,您實現更快速的收斂是非常豐富的特徵投影的效果(RBF內核也可能發生這種情況) - 這是一種常見現象,即使對於來自UCI庫的非常簡單的數據也是如此。正如評論中提到的那樣,設置「verbose = True」可能會爲您提供有關優化過程的其他信息 - 它會輸出迭代次數,支持向量的數量(SV數量越多,SVM過度擬合越多,可以是也是收斂緩慢的一個原因)。

0

我還會加入@ lejlot的回答,即標準化輸入變量(居中和縮放到單位方差或縮放到一些範圍,如[0,1]或[-1,1])可以使優化問題變得更加嚴重更容易和加速融合。

通過查看您的數據,似乎某些功能的最小值和最大值顯着大於其他值。也許MinMaxScaler可以提供幫助。一般來看看preprocessing doc

+1

實際上,對單位間隔的「擠壓」遠遠不是一種好的技術,它很簡單,但相當統計可疑的。它主要用於克服潛在的偏差,這似乎不會發生在這裏(因爲這些差異非常小)。更合理的(和統計上合理的)方法是對均值= 0和標準差= 1的歸一化(這可能在這裏完成,我沒有計算這些統計數據,但數據似乎很好地分佈)。 – lejlot