【问题标题】:Why am I getting an empty matrix from svmpredict?为什么我从 svmpredict 得到一个空矩阵?
【发布时间】:2015-07-30 02:07:55
【问题描述】:

我想根据一个简单的时间序列进行预测。观察y=[11,22,33,44,55,66,77,88,99,110] 和时间x=[1,2,3,4,5,6,7,8,9,10]。我正在使用 libsvm 工具箱中的 epsilon-SVR。我的代码如下:

x1 = (1:7)'; #' training set
y1 = [11, 22, 33, 44, 55, 66, 77]'; #' observations from time series
options = ' -s 3 -t 2 -c 100 -g 0.05 -p 0.0003 ';
model = svmtrain(y1, x1, options)
x2 = (8:10)'; #' test set
y2 = [88, 99, 110]'; #' hidden values that are not used for training
[y2_predicted, accuracy] = svmpredict(y2, x2, model)

但是svmpredict 函数给了我空输出,如下所示:

y2_predicted =
     []
accuracy =
     []

【问题讨论】:

  • 您的数据是否仅限于这少量的数据示例?顺便说一句:请注意如何对训练和测试数据集进行采样。您似乎已经从您的数据中选择了最后的观察结果作为测试集,我认为最好随机抽样以防止与订单相关的影响。
  • 当然y2 不应该是svmpredict 的输入? -- 没关系,mathworks.com/matlabcentral/answers/… 解决了我的问题
  • 您的 MATLAB 语法错误 - x1 = (1:7)'; #' training set 不是有效的 MATLAB。不过x1 = (1:7)'; % 'training set 是。

标签: svm matlab libsvm


【解决方案1】:

您没有得到输出预测的原因是您错误地调用了svmpredict。有两种调用方式:

[predicted_label, accuracy, decision_values/prob_estimates] = svmpredict(testing_label_vector, testing_instance_matrix, model, 'libsvm_options')
[predicted_label] = svmpredict(testing_label_vector, testing_instance_matrix, model, 'libsvm_options'

输出一个参数和 3,但不是 2。所以要解决您的问题,您可以这样做:

[y2_pred, accuracy, ~] = svmpredict(y2, x2, model)

如果您不关心决策值。如果你这样做了,那么

[y2_pred, accuracy, decision_values] = svmpredict(y2, x2, model)

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多