如何使用libsvm进行回归预测

2024-04-27

1. 如何使用libsvm进行回归预测

 下载Libsvm、Python和Gnuplot。我用的版本分别是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。注意:Gnuplot一定要用3.7.3版,3.7.1版的有bug.

 修改训练和测试数据的格式(可以自己用perl编个小程序):
目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值 ...
...
例如:
2.3 1:5.6 2:3.2
表示训练用的特征有两维,第一维是5.6,第二维是3.2,目标值是2.3

注意:训练和测试数据的格式必须相同,都如上所示。测试数据中的目标值是为了计算误差用

 分别使用Libsvm中的Windows版本的工具svmscale.exe进行训练和测试数据的归一化,svmtrain.exe进行模型训练,svmpredict.exe进行预测
(1)svmscale.exe的用法:svmscale.exe feature.txt feature.scaled
默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,feature.txt是输入特征文件名
输出的归一化特征名为feature.scaled
(2)svmtrtrain.exe训练模型
我习惯写个批处理小程序,处理起来比较方便。例如svm_train.bat中训练语句为:
svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled
训练得到的模型为feature.scaled.model

具 体的参数含义可以参考帮助文档。这里-s是选择SVM的类型。对于回归来说,只能选3或者4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数,原因在“A Practical Guide support vector classification”中已经简单介绍过了。-p尽量选个比较小的数字。需要仔细调整的重要参数是-c和-g。除非用 gridregression.py来搜索最优参数,否则只能自己慢慢试了。

用gridregression.py搜索最优参数的方法如下:
python.exe gridregression.py -svmtrain H:/SVM/libsvm-2.81/windows/svmtrain.exe -gnuplot C:/gp373w32/pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 H:/SVM/libsvm-2.81/windows/feature.scaled > gridregression_feature.parameter

注意:-svmtrain是给出svmtrain.exe所在路径,一定要是完整的全路径
-gnuplot是给出pgnuplot.exe所在路径。这里要用pgnuplot.exe这种命令行形式的,不要用wgnupl32.exe,这个是图形界面的。
-log2c是给出参数c的范围和步长
-log2g是给出参数g的范围和步长
-log2p是给出参数p的范围和步长
上面三个参数可以用默认范围和步长
-s选择SVM类型,也是只能选3或者4
-t是选择核函数
-v 10 将训练数据分成10份做交叉验证。默认为5
最后给出归一化后训练数据的全路径
搜索最优参数的过程写入文件gridregression_feature.parameter(注意别少了这个>符号啊)

根据搜索到的最优参数修改feature.scaled.model中的参数
(3)用svmpredict.exe进行预测
svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted
其中feature_test.scaled是归一化后的测试特征文件名,feature.scaled.model是训练好的模型,SVM预测的值在feature_test.predicted中。

如何使用libsvm进行回归预测

2. matlab使用libsvm工具箱回归预测不准确,怎么解决?

得看你数据特征是什么  以及你svm用的参数是什么  
svm调参是一门学问,现在都不流行这个了
还有得看你数据是不是时间周期类型, 时间类型用普通的回归做效果也不会很好

3. SVM回归预测程序问题,求帮助

《MATLAB神经网络30个案例分析》里面有一个用SVM做股票开盘价分析的程序 
他里面有这么几句 
ts = sh(2:m,1); 
tsx = sh(1:m-1,:); 
%归一化 。。。 
model = svmtrain(TS,TSX,cmd); 
[predict,mse, decision_values] = svmpredict(TS,TSX,model); 
他这个不是在用训练集预测自己吗?这样有什么意义? 
另外我的时间序列每次只有一个数据,预测的时候是不是就只有一个特征? 
谢谢!!

SVM回归预测程序问题,求帮助

4. 为什么lssvm回归实例中的预测结果

将根据回归方程求得的Y预测值转化成按均数为0、标准差为1的标准正态分布的Y值

5. 用svm建立的模型进行预测,怎么预测的数据完全一样啊?

1、首先输入数据集,分析数据维度,可以看到共有0,1,2,3四个类别,如下图所示。

2、然后导入svm工具包,没有安装sklearn的要先安装svm,如下图所示。

3、数据准备,这里的数据都是数值型变量,且没有空值,直接取X,y变量。

4、建立模型,并进行训练,如下图所示。

5、最后模型预测,有一组新的数据,根据模型预测它的分类,结果为rank=2,如下图所示就完成了。

用svm建立的模型进行预测,怎么预测的数据完全一样啊?

6. 请教Matlab中SVM回归预测问题

en . -s 3是回归模型:

-s svm_type : set type of SVM (default 0)
        0 -- C-SVC
        1 -- nu-SVC
        2 -- one-class SVM
        3 -- epsilon-SVR
        4 -- nu-SVR

==============
libsvm_options:
-s svm_type : set type of SVM (default 0)
        0 -- C-SVC
        1 -- nu-SVC
        2 -- one-class SVM
        3 -- epsilon-SVR
        4 -- nu-SVR
-t kernel_type : set type of kernel function (default 2)
        0 -- linear: u'*v
        1 -- polynomial: (gamma*u'*v + coef0)^degree
        2 -- radial basis function: exp(-gamma*|u-v|^2)
        3 -- sigmoid: tanh(gamma*u'*v + coef0)
        4 -- precomputed kernel (kernel values in training_instance_matrix)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/k)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking: whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates: whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight: set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n: n-fold cross validation mode

7. Ls-SVM,做回归,训练集的预测很好,但预测集太离谱,Why?

这就是说,这种算法的泛化能力差
训练集上的预测是没有意义的

Ls-SVM,做回归,训练集的预测很好,但预测集太离谱,Why?

8. 关于libsvm回归预测的问题,基于matlab

你在train和test相同的数据吗?

看你的情况应该是你最后一行的数据和其他数据的数量级差了很多吧。