解释libsvm epsilon-SVR结果

时间:2013-02-26 07:25:09

标签: regression svm libsvm

我试图训练&使用epsilon SVR交叉验证8616个样本的一组数据。 在这些数据集中,我将4368用于测试,4248用于CV。 内核类型= RBF内核。 Libsvm提供如下所示的结果。

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

(a)“nu”是什么意思?有时我得到nu = 0.99xx的不同参数。

(b)似乎“obj”出乎意料地大。这听起来不错吗? Libsvm常见问题解答称这是“双SVM问题的最佳客观价值”。这是否意味着这是f(alpha)的最小值?

(c)“rho”也很大。这是偏见词,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)

使用选定的参数,我产生了以下结果

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%)。使用Bias-Variance测试,列车集MAPE和CV集MAPE之间的差异仅为0.00199433,这意味着param似乎设置正确。但我想知道极大的“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)));

1 个答案:

答案 0 :(得分:0)

目标和rho值很高,因为(很可能)数据没有缩放。强烈建议使用缩放以避免溢出;溢出风险还取决于内核的类型。顺便说一下,在扩展训练数据时,不要忘记缩放测试数据,这最容易通过首先缩放所有数据,然后将它们分成训练和测试集来实现。