学习笔记:MATLAB+libsvm的SVR简单实例

原博客:http://www.matlabsky.com/thread-12390-1-1.html

              http://www.matlabsky.com/thread-18552-1-1.html

回归问题,个人理解是相当于有一个函数y=f(x)(也可能是n维的函数),这个函数可能是知道表达式,也可能不知道表达式。我们需要通过一组向量(x,y)进行训练得到一个模型model,这个model也相当于是根据已知的训练集(x,y),而得到的"f(x)表达式",然后使用测试集在得到的model上进行预测。

原博主是通过y=-x^2这个表达式进行训练,在图像上显示原始数据和回归数据。

运行原博的代码后出现错误有

Usage: [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')
Parameters:

错误使用 plot 矢量长度必须相同。 

并且控制台的预测值输出为空


错误提示是我使用svmpredict的参数没有设置正确,所以导致预测输出得到的结果为空,进而使plot函数的x和y向量长度不同。

原因可能是原作者当时使用的libsvm的版本和我现在使用的不同,所以参数需要修改。

我使用的是MATLAB R2014a,libsvm-3.22

关于配置libsvm我的另一篇博客中也有记录:https://blog.csdn.net/folk_/article/details/79910270

修改过后的代码如下:(初学,加了一些备注)

%%clean work
tic;%记录运行时间
close all;%关闭所有figure窗口
clear;%清空变量
clc;%清空命令
format compact;%空格紧凑

%生成待回归的数据
x = (-1:0.1:1)';
y = -x.^2;

%建立回归模型
model = svmtrain(y,x,'-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');

%利用建立的模型看其在训练集上的回归效果
[py,mse,prob] = svmpredict(y,x,model,'-b 0');
figure;%建立一个窗口
plot(x,y,'o');%原始数据以o这种形式标记
hold on;%保持当前图像不刷新
plot(x,py,'r*');%回归数据以红色的*标记
legend('原始数据','回归数据');%设置图例线条
grid on;%画图的时候添加网格线

%进行预测
testx = [1.1;1.2;1.3];
display('真实数据');%控制台输出
testy = -testx.^2
[ptesty,tmse,prob2] = svmpredict(testy,testx,model,'-b 0');
display('预测数据');
ptesty

toc

以下是运行的正确结果:


至此,我第一个SVR实例就成功运行了。

猜你喜欢

转载自blog.csdn.net/folk_/article/details/79935783
今日推荐