使用libsvm进行回归预测



如何使用libsvm进行回归预测
http://www.matlabsky.com/thread-12390-1-1.html
(出处: MATLAB技术论坛)


强烈建议您看这个之前先好好看看这个:

如何使用libsvm进行分类
http://www.matlabsky.com/thread-12379-1-1.html
这里将这个帖子记为(帖子*)
其实我个人感觉分类和回归本质一样的,分类搞清楚了的话,回归也就应该会的了。但有好多朋友对于使用libsvm进行分类会了,但使用libsvm进行回归就行不明白,我也搞不懂,道理都一样的啊,我最开始接触libsvm的时候就是弄明白分类然后回归自然而然就明白了的啊!

好吧,不管了,还是在这里把使用libsvm进行回归预测也说说吧~。

回归和分类本质都是一样,就是有一个输入(属性矩阵或者自变量)然后有输出(分类是分类标签,回归是因变量),也就是相当于一个函数:
                Y = f(x)
利用训练集合已知的x,y来建立回归模型model,然后用这个model去预测。
这里面的x就相当于帖子*中的那个属性矩阵data,y相当于帖子*中的label,这样理解就很简单了。我们看下面一个简单的利用libsvm进行回归的例子:


  1. %% HowToRegressUsingLibsvm
  2. % by faruto @ faruto's Studio~
  3. % http://blog.sina.com.cn/faruto
  4. % Email:[email protected]
  5. % http://www.MATLABsky.com
  6. % http://www.mfun.la
  7. % http://video.ourmatlab.com
  8. % last modified by 2010.12.28
  9. %% a litte clean work
  10. tic;
  11. close all;
  12. clear;
  13. clc;
  14. format compact;
  15. %%

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

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

  21. % 利用建立的模型看其在训练集合上的回归效果
  22. [py,mse] = svmpredict(y,x,model);
  23. figure;
  24. plot(x,y,'o');
  25. hold on;
  26. plot(x,py,'r*');
  27. legend('原始数据','回归数据');
  28. grid on;

  29. % 进行预测
  30. testx = 1.1;
  31. display('真实数据')
  32. testy = -testx.^2

  33. [ptesty,tmse] = svmpredict(testy,testx,model);
  34. display('预测数据');
  35. ptesty

  36. %%
  37. toc
复制代码

运行结果:

使用libsvm进行回归预测_第1张图片

回归.jpg (55.06 KB, 下载次数: 866)

下载附件  保存到相册

2010-12-28 10:14 上传




  1. Mean squared error = 9.52768e-005 (regression)
  2. Squared correlation coefficient = 0.999184 (regression)
  3. 真实数据
  4. testy =
  5.    -1.2100
  6. Mean squared error = 0.0102555 (regression)
  7. Squared correlation coefficient = -1.#IND (regression)
  8. 预测数据
  9. ptesty =
  10.    -1.1087
  11. Elapsed time is 0.133552 seconds.
复制代码

上面的代码是对于二次函数y = x^2在[-1,1]上进行回归,并对于testx=1.1进行预测,这里面由于我们知道真实的因变量testy = -1.21,按道理说做预测是不知道待预测的目标量是什么的,否则还预测什么?这里就有好多朋友产生疑惑,说如果不知道待预测的目标量是什么怎么办?答曰:那就随便写一个就行啊!然后又有的朋友会说,那这样生成的回归指标(mse均方根误差,和平方回归系数很不理想啊),操~本身真实的因变量都不知道,这些参考指标在真实的因变量不知道的情况下是没有参考价值的。以前我看到这样的问题,真的抓狂,就不能自己动脑子稍微想一下吗!?

上面使用的参数说明:

 -s svm类型:SVM设置类型(默认0)
  0 -- C-SVC
  1 --v-SVC
  2 – 一类SVM
  3 -- e -SVR
  4 -- v-SVR
  -t 核函数类型:核函数设置类型(默认2)
  0 – 线性:u'v
  1 – 多项式:(r*u'v + coef0)^degree
  2 – RBF函数:exp(-r|u-v|^2)
  3 –sigmoid:tanh(r*u'v + coef0)

-g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)

-c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)

-p p:设置e -SVR 中损失函数p的值(默认0.1)



更多关于libsvm 参数的说明请看
libsvm 参数说明【中英文双语版本】
http://www.matlabsky.com/thread-12380-1-1.html

如果对于标签设置问题您还没有搞懂可以再看看这个:
【转】Matlab中使用libsvm进行分类预测时的标签问题再次说明
http://www.matlabsky.com/thread-12396-1-1.html


更多关于SVM的东西请看:
关于SVM的那点破事[长期更新整理 by faruto]
http://www.matlabsky.com/thread-10966-1-1.html


你可能感兴趣的:(模式识别与机器学习)