2013-02-26 245 views
1

我試圖訓練&使用epsilon SVR與8616個樣本交叉驗證一組數據。 在數據集中,我用4368進行測試,用4248進行CV。 內核類型= RBF內核。 Libsvm提供瞭如下所示的結果。解釋libsvm epsilon-SVR結果

optimization finished, #iter = 502363 
nu = 0.689607 
obj = -6383530527604706.000000, rho = 2884789.960212 
nSV = 3023, nBSV = 3004 

這是一個結果,通過設置

-s 3 -t 2 -c 2^28 -g 2^-13 -p 2^12 

(一)什麼是 「NU」 的手段得到?有時我得到nu = 0.99xx的不同參數。 (b)看起來「obj」出奇的大。這聽起來正確嗎? Libsvm FAQ表示這是「雙SVM問題的最優目標值」。這是否意味着這是f(alpha)的最小值?

(c)「ρ」也很大。這是一個偏倚詞,b。數據集標籤(y)由82672到286026之間的值組成。所以我猜這是合理的,對嗎?

對於訓練集,

Mean squared error = 1.26991e+008 (regression) 
Squared correlation coefficient = 0.881112 (regression) 

對於交叉驗證集,

Mean squared error = 1.38909e+008 (regression) 
Squared correlation coefficient = 0.883144 (regression) 

使用所選擇的PARAM,我已經產生了以下結果

kernel_type=2 (best c:2^28=2.68435e+008, g:2^-13=0.00012207, e:2^12=4096) 
NRMS: 0.345139, best_gap:0.00199433 
Mean Absolute Percent Error (MAPE): 5.39% 
Mean Absolute Error (MAE): 8956.12 MWh 
Daily Peak MAPE: 5.30% 

的CV設定的MAPE較低(5.39%)。使用偏差 - 方差測試,列車集合MAPE和CV集合MAPE之間的差異僅爲0.00199433,這意味着參數似乎設置正確。但我不知道是否極大的「obj」,「rho」值是正確的...

我對SVR很新,如果我的解釋或驗證方法不正確/不足,請糾正我。


方法來計算MAPE

train_model = svmtrain(train_label, train_data, cmd); 
[result_label, train_accuracy, train_dec_values] = svmpredict(train_label, train_data, train_model); 
train_err = train_label-result_label; 
train_errpct = abs(train_err)./train_label*100; 
train_MAPE = mean(train_errpct(~isinf(train_errpct))); 
+0

您是如何獲得MAPE價值的?我的意思是我手動計算它,但是縮放點的轉換很難並且不能提供確切的值。 – 2013-06-21 20:28:58

+0

我把它作爲預測值偏離實際值的百分比來計算,見上面編輯部分的最後部分。 – twfx 2013-06-23 08:01:29

回答

0

目的和RHO值是高的,因爲(最可能)對數據進行不進行縮放。強烈建議縮放以避免溢出;溢出風險也取決於內核的類型。順便說一下,在對訓練數據進行縮放時,不要忘記也要對測試數據進行縮放,這通過首先對所有數據進行縮放然後將它們分解爲訓練和測試集來實現。