【问题标题】:Interpreting libsvm epsilon-SVR result解释 libsvm epsilon-SVR 结果
【发布时间】:2013-02-11 13:51:47
【问题描述】:

我尝试使用 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 FAQ 说这是“对偶 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,这意味着参数似乎设置正确。但是我想知道极大的“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)));

【问题讨论】:

  • 您是如何获得 MAPE 值的?我的意思是我手动计算它但是反转缩放点很难并且不给出确切的值。
  • 我将其计算为预测值与实际值的偏差百分比,请参见编辑部分的最后部分。

标签: regression svm libsvm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 2015-07-20
    • 1970-01-01
    • 2011-12-12
    • 2013-10-10
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多