如何使用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进行回归的例子:
- %% HowToRegressUsingLibsvm
- % by faruto @ faruto's Studio~
- % http://blog.sina.com.cn/faruto
- % Email:faruto@163.com
- % http://www.MATLABsky.com
- % http://www.mfun.la
- % http://video.ourmatlab.com
- % last modified by 2010.12.28
- %% a litte clean work
- tic;
- close all;
- 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] = svmpredict(y,x,model);
- figure;
- plot(x,y,'o');
- hold on;
- plot(x,py,'r*');
- legend('原始数据','回归数据');
- grid on;
- % 进行预测
- testx = 1.1;
- display('真实数据')
- testy = -testx.^2
- [ptesty,tmse] = svmpredict(testy,testx,model);
- display('预测数据');
- ptesty
- %%
- toc
运行结果:
- Mean squared error = 9.52768e-005 (regression)
- Squared correlation coefficient = 0.999184 (regression)
- 真实数据
- testy =
- -1.2100
- Mean squared error = 0.0102555 (regression)
- Squared correlation coefficient = -1.#IND (regression)
- 预测数据
- ptesty =
- -1.1087
- 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