2013-02-26 85 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值是高的,因为(最可能)对数据进行不进行缩放。强烈建议缩放以避免溢出;溢出风险也取决于内核的类型。顺便说一下,在对训练数据进行缩放时,不要忘记也要对测试数据进行缩放,这通过首先对所有数据进行缩放然后将它们分解为训练和测试集来实现。