LIBSVM做回归预测--终于弄通,很实用
- 格式:doc
- 大小:29.00 KB
- 文档页数:4
利⽤Matlab_libsvm构造⽀持向量机回归算法ticclear;clc;Fnum = 4; %输⼊个数/输出个数只能为1个TnumX = 0.8; %训练数据⽐例Terror = 0.2; %误差⼩于Terror的预测⽐例eps = 10^(-7); %误差阈值v=6; %交互检验% 寻找最佳c参数/g参数 CVcmax = 10;cmin = -10;gmax = 10;gmin = -10;cstep = 1;gstep = 1;msestep = 0.05;local = 'C:\Users\37989\Desktop\2688.xlsx';%数据⽂件地址data = xlsread(local);[Ynum,Xnum] = size(data);Train = data(randperm(Ynum),:);Tnum = round(TnumX * Ynum);TSnum = Ynum - Tnum; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%主要修改以上数据%以下代码不要修改% 训练集p_train = Train(1:Tnum,1:Fnum);%2:4 是回弹后的零件 5列是分组标记t_train = Train(1:Tnum,Fnum+1);% 测试集p_test = Train(Tnum + 1:Ynum,1:Fnum); %这个改了 R8000⽣成的只有3列t_test = Train(Tnum + 1:Ynum,Fnum+1);%⽆所谓%% 数据归⼀化% 训练集[pn_train,inputps] = mapminmax(p_train'); %归⼀化⽅法?pn_train = pn_train';[tn_train,outputps] = mapminmax(t_train');tn_train = tn_train';% 测试集pn_test = mapminmax('apply',p_test',inputps);pn_test = pn_test';tn_test = mapminmax('apply',t_test',outputps);tn_test = tn_test';%% SVM模型创建/训练% 寻找最佳c参数/g参数 CV[c,g] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);[m,n] = size(c);cg = zeros(m,n);bestc = 0;bestg = 0;error1= Inf;count=1;%循环前h=waitbar(0,'正在计算....');for i = 1:ma=i;for j = 1:n%寻优的cmd参数应该与下⽂训练的cmd相符cmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(a,j)),' -g ',num2str(2^g(a,j) ),' -s 3 -p 0.1 -q'];%0.01 cg(a,j) = svmtrain(tn_train,pn_train,cmd)*10000;if cg(a,j) < error1error1 = cg(a,j); %回归均⽅根误差bestc = 2^c(a,j);bestg = 2^g(a,j);endif abs(cg(a,j) - error1) <= eps && bestc > 2^c(a,j) %两次的mse相差很⼩取c较⼩的error1 = cg(a,j);bestc = 2^c(a,j);bestg = 2^g(a,j);endwaitbar(count/(m*n),h);count=count+1;endend[cg,ps] = mapminmax(cg,0,1);figure;set(gcf,'position',[0,100,1366,500]);%1 3 是宽度 2 4 是⾼度subplot(1,2,1)[C,h] = contour(c,g,cg,0.0023:msestep:0.5);clabel(C,h,'FontSize',14,'Color','r');xlabel('log_2C','FontName','Times','FontSize',14);ylabel('log_2g','FontName','Times','FontSize',14);firstline = 'SVR参数选择结果图(等⾼线图)[GridSearchMethod]';secondline = ['Best C=',num2str(bestc),' g=',num2str(bestg), ...' CVmse=',num2str(error1)];title({firstline;secondline},'Fontsize',14);grid on;set(gca,'xtick',[cmin:cstep:cmax]);set(gca,'ytick',[gmin:gstep:gmax]);subplot(1,2,2)meshc(c,g,cg);% mesh(X,Y,cg);% surf(X,Y,cg);axis([cmin,cmax,gmin,gmax,0,1]);xlabel('log_2C','FontName','Times','FontSize',14);ylabel('log_2g','FontName','Times','FontSize',14);zlabel('MSE','FontName','Times','FontSize',14);firstline = 'SVR参数选择结果图(3D视图)[GridSearchMethod]';secondline = ['Best C=',num2str(bestc),' g=',num2str(bestg), ...' CVmse=',num2str(error1)];title({firstline;secondline},'Fontsize',14);%% 创建/训练SVM%参考libsvm使⽤说明对cmd参数修改cmd=[' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.001 '];model = svmtrain(tn_train,pn_train,cmd);%% SVM仿真预测[Predict_2,error_2,decision_values] = svmpredict(tn_test,pn_test,model);% 反归⼀化F= mapminmax('reverse',Predict_2,outputps);toc%% 输出结果E =F - t_test;E =F - t_test;percent=sum(E<Terror)/TSnum*100;MSE=sum(E.^2)/TSnum;mse_norm =error_2(2);R2=error_2(3);SD=std(E);Result=[t_test,F,abs(t_test-F)];fprintf('%4.3f\t%4.3f\t%4.3f\n',Result');fprintf(['\nc=%4.4f g=%4.4f\nSTD=%4.4f MSE=%4.4f R^2 =%4.5f Max=%4.4f',... ' Min =%4.4f Range=%4.4f 误差在%s内=%4.2f%%\n'],bestc,bestg,SD,MSE,... R2,max(E),min(E),max(E)-min(E),num2str(Terror),percent)。
LIBSVM(⼆)参数实例详解1. ⼊门案例1.1 分类的⼩例⼦--根据⾝⾼体重进⾏性别预测%% 使⽤Libsvm进⾏分类的⼩例⼦%{⼀个班级⾥⾯有两个男⽣(男⽣1、男⽣2),两个⼥⽣(⼥⽣1、⼥⽣2),其中男⽣1 ⾝⾼:176cm 体重:70kg;男⽣2 ⾝⾼:180cm 体重:80kg;⼥⽣1 ⾝⾼:161cm 体重:45kg;⼥⽣2 ⾝⾼:163cm 体重:47kg;如果我们将男⽣定义为1,⼥⽣定义为-1,并将上⾯的数据放⼊矩阵data中,并在label中存⼊男⼥⽣类别标签(1、-1)%}train_data = [176 70;180 80;161 45;163 47];train_label = [1;1;-1;-1];%{这样上⾯的data矩阵就是⼀个属性矩阵,⾏数4代表有4个样本,列数2表⽰属性有两个,label就是标签(1、-1表⽰有两个类别:男⽣、⼥⽣)。
%}% 利⽤libsvm建⽴分类模型此处options参数为默认值model = svmtrain(train_label,train_data);%{此时该班级⼜转来⼀个新学⽣,其⾝⾼190cm,体重85kg我们想给出其标签(想知道其是男[1]还是⼥[-1])由于其标签我们不知道,我们假设其标签为-1(也可以假设为1)%}test_data = [190 85];test_label = -1;[predict_label,accuracy,dec_value] = svmpredict(test_label,test_data,model);predict_labelif 1 == predict_labeldisp('==该⽣为男⽣');endif -1 == predict_labeldisp('==该⽣为⼥⽣');end1.2 回归的⼩例⼦ y=x^2 利⽤训练集合已知的x,y来建⽴回归模型 model ,然后利⽤这个 model 去预测。
%% SVM神经网络的回归预测分析---上证指数开盘指数预测%%% 清空环境变量function chapter14tic;close all;clear;clc;format compact;%% 数据的提取和预处理% 载入测试数据上证指数(1990.12.19-2009.08.19)% 数据是一个4579*6的double型的矩阵,每一行表示每一天的上证指数% 6列分别表示当天上证指数的开盘指数,指数最高值,指数最低值,收盘指数,当日交易量,当日交易额.load chapter14_sh.mat;% 提取数据[m,n] = size(sh);ts = sh(2:m,1);tsx = sh(1:m-1,:);% 画出原始上证指数的每日开盘数figure;plot(ts,'LineWidth',2);title('上证指数的每日开盘数(1990.12.20-2009.08.19)','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('开盘数','FontSize',12);grid on;% 数据预处理,将原始数据进行归一化ts = ts';tsx = tsx';% mapminmax为matlab自带的映射函数% 对ts进行归一化[TS,TSps] = mapminmax(ts,1,2);% 画出原始上证指数的每日开盘数归一化后的图像figure;plot(TS,'LineWidth',2);title('原始上证指数的每日开盘数归一化后的图像','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('归一化后的开盘数','FontSize',12);grid on;% 对TS进行转置,以符合libsvm工具箱的数据格式要求TS = TS';% mapminmax为matlab自带的映射函数% 对tsx进行归一化[TSX,TSXps] = mapminmax(tsx,1,2);% 对TSX进行转置,以符合libsvm工具箱的数据格式要求TSX = TSX';%% 选择回归预测分析最佳的SVM参数c&g% 首先进行粗略选择:[bestmse,bestc,bestg] = SVMcgForRegress(TS,TSX,-8,8,-8,8);% 打印粗略选择结果disp('打印粗略选择结果');str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg); disp(str);% 根据粗略选择的结果图再进行精细选择:[bestmse,bestc,bestg] = SVMcgForRegress(TS,TSX,-4,4,-4,4,3,0.5,0.5,0.05);% 打印精细选择结果disp('打印精细选择结果');str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg); disp(str);%% 利用回归预测分析最佳的参数进行SVM网络训练cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.01'];model = svmtrain(TS,TSX,cmd);%% SVM网络回归预测[predict,mse] = svmpredict(TS,TSX,model);predict = mapminmax('reverse',predict',TSps);predict = predict';% 打印回归结果str = sprintf( '均方误差MSE = %g 相关系数R = %g%%',mse(2),mse(3)*100);disp(str);%% 结果分析figure;hold on;plot(ts,'-o');plot(predict,'r-^');legend('原始数据','回归预测数据');hold off;title('原始数据和回归预测数据对比','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('开盘数','FontSize',12);grid on;figure;error = predict - ts';plot(error,'rd');title('误差图(predicted data - original data)','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('误差量','FontSize',12);grid on;figure;error = (predict - ts')./ts';plot(error,'rd');title('相对误差图(predicted data - original data)/original data','FontSize',12);xlabel('交易日天数(1990.12.19-2009.08.19)','FontSize',12);ylabel('相对误差量','FontSize',12);grid on;snapnow;toc;%% 子函数SVMcgForRegress.mfunction [mse,bestc,bestg] = SVMcgForRegress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)%SVMcg cross validation by faruto%% by faruto%Email:patrick.lee@ QQ:516667408 /faruto BNU%last modified 2010.01.17%Super Moderator @ % 若转载请注明:% faruto and liyang , LIBSVM-farutoUltimateVersion% a toolbox with implements for support vector machines based on libsvm, 2009.% Software available at %% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for% support vector machines, 2001. Software available at% .tw/~cjlin/libsvm% about the parameters of SVMcgif nargin < 10msestep = 0.06;endif nargin < 8cstep = 0.8;gstep = 0.8;endif nargin < 7v = 5;endif nargin < 5gmax = 8;gmin = -8;endif nargin < 3cmax = 8;cmin = -8;end% X:c Y:g cg:acc[X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);[m,n] = size(X);cg = zeros(m,n);eps = 10^(-4);bestc = 0;bestg = 0;mse = Inf;basenum = 2;for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) ),' -s 3 -p 0.1'];cg(i,j) = svmtrain(train_label, train, cmd);if cg(i,j) < msemse = cg(i,j);bestc = basenum^X(i,j);bestg = basenum^Y(i,j);endif abs( cg(i,j)-mse )<=eps && bestc > basenum^X(i,j)mse = cg(i,j);bestc = basenum^X(i,j);bestg = basenum^Y(i,j);endendend% to draw the acc with different c & g[cg,ps] = mapminmax(cg,0,1);figure;[C,h] = contour(X,Y,cg,0:msestep:0.5);clabel(C,h,'FontSize',10,'Color','r');xlabel('log2c','FontSize',12);ylabel('log2g','FontSize',12);firstline = 'SVR参数选择结果图(等高线图)[GridSearchMethod]'; secondline = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...' CVmse=',num2str(mse)];title({firstline;secondline},'Fontsize',12);grid on;figure;meshc(X,Y,cg);% mesh(X,Y,cg);% surf(X,Y,cg);axis([cmin,cmax,gmin,gmax,0,1]);xlabel('log2c','FontSize',12);ylabel('log2g','FontSize',12);zlabel('MSE','FontSize',12);firstline = 'SVR参数选择结果图(3D视图)[GridSearchMethod]'; secondline = ['Best c=',num2str(bestc),' g=',num2str(bestg), ...' CVmse=',num2str(mse)];title({firstline;secondline},'Fontsize',12);。
libsvm⽀持向量机回归⽰例libsvm⽀持向量机算法包的基本使⽤,此处演⽰的是⽀持向量回归机复制代码代码如下:import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.util.ArrayList;import java.util.List;import libsvm.svm;import libsvm.svm_model;import libsvm.svm_node;import libsvm.svm_parameter;import libsvm.svm_problem;public class SVM {public static void main(String[] args) {// 定义训练集点a{10.0, 10.0} 和点b{-10.0, -10.0},对应lable为{1.0, -1.0}List<Double> label = new ArrayList<Double>();List<svm_node[]> nodeSet = new ArrayList<svm_node[]>();getData(nodeSet, label, "file/train.txt");int dataRange=nodeSet.get(0).length;svm_node[][] datas = new svm_node[nodeSet.size()][dataRange]; // 训练集的向量表for (int i = 0; i < datas.length; i++) {for (int j = 0; j < dataRange; j++) {datas[i][j] = nodeSet.get(i)[j];}}double[] lables = new double[label.size()]; // a,b 对应的lablefor (int i = 0; i < lables.length; i++) {lables[i] = label.get(i);}// 定义svm_problem对象svm_problem problem = new svm_problem();problem.l = nodeSet.size(); // 向量个数problem.x = datas; // 训练集向量表problem.y = lables; // 对应的lable数组// 定义svm_parameter对象svm_parameter param = new svm_parameter();param.svm_type = svm_parameter.EPSILON_SVR;param.kernel_type = svm_parameter.LINEAR;param.cache_size = 100;param.eps = 0.00001;param.C = 1.9;// 训练SVM分类模型System.out.println(svm.svm_check_parameter(problem, param));// 如果参数没有问题,则svm.svm_check_parameter()函数返回null,否则返回error描述。
libsvm参数说明【原创实用版】目录1.LIBSVM 简介2.LIBSVM 参数说明3.LIBSVM 的使用方法4.LIBSVM 的应用场景5.总结正文1.LIBSVM 简介LIBSVM(Library for Support Vector Machines)是一个开源的支持向量机(SVM)算法库,它提供了一系列用于解决分类和回归问题的高效算法。
LIBSVM 由 Chenning Peng 和 Tsung-Yuan Lee 开发,是 SVM 领域最为知名和广泛使用的工具之一。
2.LIBSVM 参数说明LIBSVM 包含了许多参数,这些参数可以影响模型的性能。
以下是一些重要的 LIBSVM 参数及其说明:- "kernel": 指定核函数类型,如"linear"(线性核)、"rbf"(高斯径向基函数核)等。
- "C": 指定惩罚参数 C,用于控制模型对训练数据的拟合程度。
较小的 C 值会导致更宽松的边界,可能允许一些误分类,但可以提高模型的泛化能力。
较大的 C 值则会强制模型在训练集上尽量减少误差,可能导致过拟合。
- "degree": 指定多项式核函数的阶数。
- "gamma": 指定高斯核函数的参数,用于控制核函数的形状。
- "coef0": 指定拉格朗日乘子 alpha 的初始值。
- " CacheSize": 指定 LIBSVM 使用的内存缓存大小。
3.LIBSVM 的使用方法使用 LIBSVM 主要包括以下步骤:(1)数据预处理:将数据集分为特征矩阵 X 和目标向量 y。
(2)训练模型:调用 LIBSVM 的 train 函数,传入预处理后的数据和参数设置,训练 SVM 模型。
(3)预测:使用训练好的模型,调用 LIBSVM 的 predict 函数,对新的数据进行分类预测。
LIBSVM做回归预测--终于弄通看了网上很多帖子和博客,自己琢磨了很久到现在才弄明白怎么用libsvm来做预测。
因为网上的帖子一般都是转来转去的,所以第一个人感觉这样写详细了,之后的人不管懂不懂照搬不误,这就苦了我们笨的人啦。
不过我研究了一天,终于有点眉目,写点体会,应该会比较详细吧,至少是过来人碰到的问题。
p.s.这里暂且不讨论分类问题,其实分类比预测简单,下载下来的libsvm-2.88早已有easy.py 可以直接拿来做,所以简单,一步到位,之后如果有空就写写!用libsvm做回归的人有的疑惑大致有这些:1,怎么把数据整理成规定格式,我以前的帖子写了,只要用一个带有宏的excel就能搞定,话不多说。
2,有人会说svm就打几条命令就能得出结果(svm-train -s 3 -t 2 -c 1024.0 -g 0.0009765625 -p 0.0009765625 data.txtsvm-predict test.txt data.txt.model out.txt),干嘛还要下载python和gnuplot呢,其实了解svm理论的知道最核心的问题就是参数的选择,你不可能每次都很狗屎的猜到很好的参数,做出很好的预测,所以只能用这两个软件来寻参。
3,怎么寻参?核心的语句就这么一句,把dos框的路径调到C:\Python26,再键入(python C:\libsvm-2.88\python\gridregression.py -svmtrainC:\libsvm-2.88\windows\svm-train.exe -gnuplot C:\gnuplot\bin\pgnuplot.exe -log2c -10,10,1-log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 C:\libsvm-2.88\python\data.txt >gridregression_data.parameter)能把这句执行下去,就算等老半天也是值得的。
支持向量机回归算法(Support Vector Machine Regression,简称SVM Regression)是一种监督学习算法,用于解决回归问题。
它通过构建超平面来分割数据集,并使用特定的误差函数来评估模型的预测性能。
在SVM回归算法中,采用了一种称为ε-不敏感误差函数的方法。
该误差函数定义为,如果预测值与真实值之间的差值小于一个阈值ε,则不对此样本点做惩罚。
如果差值超过阈值,则惩罚量为
|yn−tn|−ε,其中yn是预测值,tn是真实值。
这种误差函数实际上形成了一个管道,在管道中样本点不做惩罚被称为
ε-tube。
SVM回归算法的目标是找到一个超平面,使得管道内的样本点数量最大化。
为了获得稀疏解,即计算超平面参数不依靠所有样本数据,而是部分数据,采用了这种误差函数来定义最小化误差函数作为优化目标。
由于上述目标函数含有绝对值项不可微,因此在实际应用中可能会遇到一些问题。
在训练SVM回归模型时,需要提前指定管道的宽度(即ε
的大小),并且算法引入了超参数C来控制对误差的惩罚程度。
在具体训练过程中,通过优化目标函数来找到最优的超平面和参数。
SVM回归算法可以应用于各种回归问题,如房价预测、股票价格预测等。
它的优点包括能够处理非线性问题、对异常值和噪声具有鲁棒性等。
然而,SVM回归算法也有一些局限性,例如在高维空间中可能会遇到维数灾难等问
题。
因此,在使用SVM回归算法时需要根据具体问题来选择合适的算法参数和核函数,并进行充分的实验验证和模型评估。
Libsvm是一个简单,易于使用和高效的SVM软件分类和回归。
它解决了C-SVM分类,nu-SVM分类,一类SVM,ε-SVM回归和nu-SVM回归。
它还提供了一个自动模型选择工具C-SVM分类。
本文档介绍了libsvm的使用。
Libsvm可在.tw/~cjlin/libsvm在使用libsvm之前,请先阅读COPYRIGHT文件。
目录=================- 快速开始- 安装和数据格式- `svm-train'用法- `svm-predict'用法- `svm-scale'用法- 实用技巧- 例子- 预先计算的内核- 图书馆使用- Java版本- 构建Windows二进制文件- 附加工具:子采样,参数选择,格式检查等- MATLAB / OCTAVE接口- Python接口- 附加信息快速开始===========如果您是SVM的新手,如果数据不大,请转到`tools'目录,并在安装后使用easy.py。
它是一切都是自动的- 从数据缩放到参数选择。
用法:easy.py training_file [testing_file]有关参数选择的更多信息,请参见`工具/自述文件'。
安装和数据格式============================在Unix系统上,键入`make'来构建`svm-train'和`svm-predict'程式。
运行他们没有参数,以显示他们的用法。
在其他系统上,请参阅“Makefile”来构建它们(例如,在此文件中构建Windows二进制文件)或使用预构建的二进制文件(Windows二进制文件位于目录“windows”中)。
培训和测试数据文件的格式是:<label> <index1>:<value1> <index2>:<value2> ...。
L i b S V M分类的实用指南LibSVM分类的实用指南摘要SVM(support vector machine)是一项流行的分类技术。
然而,初学者由于不熟悉SVM,常常得不到满意的结果,原因在于丢失了一些简单但是非常必要的步骤。
在这篇文档中,我们给出了一个简单的操作流程,得到合理的结果。
(译者注:本文中大部分SVM实际指的是LibSVM)1入门知识SVM是一项非常实用的数据分类技术。
虽然SVM比起神经网络(Neural Networks)要相对容易一些,但对于不熟悉该方法的用户而言,开始阶段通常很难得到满意的结果。
这里,我们给出了一份指南,根据它可以得到合理结果。
需要注意,此指南不适用SVM的研究者,并且也不保证一定能够获得最高精度结果。
同时,我们也没有打算要解决有挑战性的或者非常复杂的问题。
我们的目的,仅在于给初学者提供快速获得可接受结果的秘诀。
虽然用户不是一定要深入理解SVM背后的理论,但为了后文解释操作过程,我们还是先给出必要的基础的介绍。
一项分类任务通常将数据划分成训练集和测试集。
训练集的每个实例,包含一个"目标值(target value)"(例如,分类标注)和一些"属性(attribute)"(例如,特征或者观测变量)。
SVM的目标是基于训练数据产出一个模型(model),用来预测只给出属性的测试数据的目标值。
给定一个训练集,"实例-标注"对,,支持向量机需要解决如下的优化问题:在这里,训练向量xi通过函数Φ被映射到一个更高维(甚至有可能无穷维)空间。
SVM在这个高维空间里寻找一个线性的最大间隔的超平面。
C 0是分错项的惩罚因子(penalty parameter of the error term)。
被称之为核函数(kernel function)。
新的核函数还在研究中,初学者可以在SVM书中找到如下四个最基本的核函数:(线性、多项式、径向基函数、S型)1.1实例表1是一些现实生活中的实例。
SVM回归,也称为支持向量回归(SVR),其原理是找到一个最优的超平面,使得这个超平面与样本点的距离最小。
通过最小化这个距离,我们可以得到一个回归函数,该函数能够尽量拟合训练集样本。
为了实现这一目标,我们通常构建一个损失函数,该函数衡量模型预测值与样本标签之间的差异。
我们的目标是使这个损失函数最小化,从而确定最优的超平面。
为了实现这一点,SVR引入了一个额外的参数,称为ε。
这个参数定义了一个管道,在这个管道内的所有点都被认为是正确的预测。
SVR的目标是在保证所有样本点都在ε管道内的前提下,使超平面尽可能地平。
预测过程是通过计算测试样本点到最优超平面的距离来实现的。
如果这个距离在ε管道内,则我们认为预测是正确的;否则,我们认为预测是错误的。
总的来说,SVM回归是一种强大的机器学习技术,它能够处理具有高维特征的数据集,并且对噪声和异常值具有鲁棒性。
其基本思想是利用支持向量的性质来构建最优的回归函数。
libsvm参数说明(实用版)目录1.引言2.LIBSVM 简介3.LIBSVM 参数说明4.使用 LIBSVM 需要注意的问题5.结束语正文1.引言支持向量机(Support Vector Machine, SVM)是一种非常强大和灵活的监督学习算法,它可以用于分类和回归任务。
在 SVM 的研究和应用中,LIBSVM 是一个非常重要的工具,它为 SVM 的实现和应用提供了强大的支持。
本文将对 LIBSVM 的参数进行详细的说明,以帮助读者更好地理解和使用这个工具。
2.LIBSVM 简介LIBSVM 是一个开源的 SVM 实现库,它提供了丰富的功能和接口,可以支持多种操作系统,包括 Windows、Linux 和 Mac OS 等。
LIBSVM 主要包括三个部分:svm-train、svm-predict 和 svm-plot。
svm-train 用于训练 SVM 模型,svm-predict 用于预测新数据,svm-plot 用于绘制各种图表,以便于观察和分析模型性能。
3.LIBSVM 参数说明LIBSVM 的参数设置对于模型的性能至关重要。
以下是一些常用的参数及其说明:- -train:用于指定训练数据的文件名。
- -test:用于指定测试数据的文件名。
- -model:用于指定模型文件的名称。
- -参数:用于设置 SVM 模型的参数,例如 C、核函数等。
- -cache-size:用于设置缓存大小,以加速训练过程。
- -tolerance:用于设置收敛阈值,控制训练过程的终止条件。
- -shrinking:用于设置是否使用启发式方法进行训练。
- -probability:用于设置是否计算预测概率。
4.使用 LIBSVM 需要注意的问题在使用 LIBSVM 时,需要注意以下问题:- 设置合适的参数:LIBSVM 的参数设置对模型性能有很大影响,需要根据具体问题和数据集进行调整。
- 特征选择:在实际应用中,特征选择对于模型性能至关重要。
SVM模式识别与回归软件包(LibSVM)详解SVM模式识别与回归软件包――LibSVMSVM用于模式识别或回归时,SVM方法及其参数、核函数及其参数的选择,目前国际上还没有形成一个统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。
目前,LIBSVM拥有Java、Matlab、C#、Ruby、Python、R、Perl、Common LISP、LabView等数十种语言版本。
最常使用的是Matlab、Java和命令行的版本。
2:处理数据,把数据制作成LIBSVM的格式,其每行格式为: label index1:value1 index2:value2 ...其中我用了复旦的分类语料库,当然我先做了分词,去停用词,归一化等处理了 3:使用svm-train.exe训练,得到****.model文件。
里面有支持向量,gamma值等信息 4:使用svm-predict.exe做测试这里有几个问题现在必须说明:1:有关数据格式, index1:value1 index2:value2 ...这里面的index1,index2必须是有序的。
我测试了好多次才发现了这个问题,因为我原来做实验的数据室不必有序的。
2:有关python语言,python有些版本不同导致一些语法也是有差异的,建议使用低版本的,如2.6,比如2.6和3.*版本的有关print的规定是有差别的。
这几个.exe文件里面很多参数可以调的,我暂时是想学习下所以都只用了默认值了。
现在做好标记,以后要真做实验用他可以随时用上!2.准备好数据,首先要把数据转换成Libsvm软件包要求的数据格式为: labelindex1:value1 index2:value2 ...其中对于分类来说label为类标识,指定数据的种类;对于回归来说label为目标值。
(我主要要用到回归)Index是从1开始的自然数,value是每一维的特征值。
libsvm的使用发表于2012 年8 月 2 日1: 了解libsvm工具包LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等2001年开发设计的一个简单, 易于使用和快速有效的SVM模式识别与回归的软件包, 他不但提供了编译好的可在Windows系列系统的执行文件, 还提供了源代码, 方便改进, 修改以及在其它操作系统上应用; 该软件对SVM所涉及的参数调节相对比较少, 提供了很多的默认参数, 利用这些默认参数可以解决很多问题; 并提供了交互检验(Cross Validation)的功能. 该软件包可在.tw/~cjlin/ 免费获得. 该软件可以解决C-SVM, ν-SVM, ε-SVR和ν-SVR等问题, 包括基于一对一算法的多类模式识别问题.这套库可以从.tw/~cjlin/libsvm/index.html免费获得, 目前已经发展到3.12版(2012.4.1更新).下载.tar.gz格式的版本, Windows下也可以直接解压, 主要有6个文件夹和一些源码文件.Java: 主要是应用于java平台;matlab: windows下64位matlab平台;python: 是用来参数优选的工具, 稍后介绍;svm-toy: 一个可视化的工具, 用来展示训练数据和分类界面, 里面是源码, 其编译后的程序在windows文件夹下;tools: 主要包含四个python文件, 用来数据集抽样(subset), 参数优选(grid), 集成测试(easy), 数据检查(checkdata);windows: 包含libSVM四个exe程序包, 我们所用的库就是他们.文件夹里面还有个heart_scale, 是一个样本文件, 可以用记事本打开, 用来测试用的.其他.h和.cpp文件都是程序的源码, 可以编译出相应的.exe文件. 其中, 最重要的是svm.h和svm.cpp文件, svm-predict.c, svm-scale.c和svm-train.c(还有一个svm-toy.c 在svm-toy文件夹中)都是调用的这个文件中的接口函数, 编译后就是windows下相应的四个exe程序. 另外, 里面的README跟FAQ也是很好的文件, 对于初学者如果W文较好的话, 可以看一下.对于仅仅使用libsvm库的人来说, windows下的4个exe包已经足够了, 如果是为了做深入研究, 可以按照自己的思路文件夹中的.cpp和.c文件, 然后编译验证)2: 下面开始测试libsvm工具包1). 把LibSVM包解压到相应的目录(因为我只需要里面windows文件夹中的exe程序包, 我们也可以只把windows文件夹拷到相应的目录), 比如C:\jacoxu\test\libsvm-3.122). 在电脑”开始”的”运行”中输入cmd, 进入DOS环境. 定位到C:\jacoxu\test\libsvm-3.12下, 具体命令如下:3). 进行libsvm训练, 输入命令:svm-train ../heart_scale train.modelheart_scale: 是目录下的已经存在的样本文件, 要换成自己的文件, 只需改成自己的文件名就可以了;train.model: 是创建的结果文件, 保存了训练后的结果:其中, #iter 为迭代次数;nu 是选择的核函数类型的参数;obj 为SVM文件转换为的二次规划求解得到的最小值;rho 为判决函数的偏置项b;nSV 为标准支持向量个数(0<a[i]<c);nBSV 为边界上的支持向量个数(a[i]=c);Total nSV为支持向量总个数(对于两类来说, 因为只有一个分类模型Total nSV = nSV但是对于多类, 这个是各个分类模型的nSV之和).在目录下, 还可以看到产生了一个train.model文件, 可以用记事本打开, 记录了训练后的结果.4.nr_class 2 //类别数, 此处为两分类问题5.total_sv 132 //支持向量总个数6.rho 0.424462 //判决函数的偏置项bbel 1 -1 //原始文件中的类别标识8.nr_sv 64 68 //每个类的支持向量机的个数9.SV //以下为各个类的权系数及相应的支持向量10. 1 1:0.166667 2:1 3:-0.333333 … 10:-0.903226 11:-1 12:-1 13:111.0.5104832128985164 1:0.125 2:1 3:0.333333 … 10:-0.806452 12:-0.333333 13:0.512.………13.-1 1:-0.375 2:1 3:-0.333333…. 10:-1 11:-1 12:-1 13:114.-1 1:0.166667 2:1 3:1 …. 10:-0.870968 12:-1 13:0.5这里注意, 第二行出现的权系数为小数(0.5104832128985164)是因为这个点属于非边界上的支持向量, 即: (0<a[i]<c).其他的两个(svm-predict, svm-scale)的使用过程类似.3: libsvm使用规范1). libSVM的数据格式Label 1: value 2:value ….Label: 是类别的标识, 比如上节train.model中提到的1 -1, 你可以自己随意定, 比如-10, 0, 15. 当然, 如果是回归, 这是目标值, 就要实事求是了.Value: 就是要训练的数据, 从分类的角度来说就是特征值, 数据之间用空格隔开.比如: -15 1:0.708 2:1056 3:-0.3333需要注意的是, 如果特征值为0, 特征冒号前面的(姑且称做序号)可以不连续. 如: -15 1:0.708 3:-0.3333表明第2个特征值为0, 从编程的角度来说, 这样做可以减少内存的使用, 并提高做矩阵内积时的运算速度. 我们平时在matlab中产生的数据都是没有序号的常规矩阵, 所以为了方便最好编一个程序进行转化.2). svmscale的用法svmscale是用来对原始样本进行缩放的, 范围可以自己定, 一般是[0,1]或[-1,1]. 缩放的目的主要是1) 防止某个特征过大或过小, 从而在训练中起的作用不平衡;2) 为了计算速度. 因为在核计算中, 会用到内积运算或exp运算, 不平衡的数据可能造成计算困难.用法: svmscale [-l lower] [-u upper][-y y_lower y_upper][-s save_filename][-r restore_filename] filename其中, []中都是可选项:-l: 设定数据下限; lower: 设定的数据下限值, 缺省为-1-u: 设定数据上限; upper: 设定的数据上限值, 缺省为1-y: 是否对目标值同时进行缩放; y_lower为下限值, y_upper为上限值;-s save_filename: 表示将缩放的规则保存为文件save_filename;-r restore_filename: 表示将按照已经存在的规则文件restore_filename进行缩放;filename: 待缩放的数据文件, 文件格式按照libsvm格式.默认情况下, 只需要输入要缩放的文件名就可以了: 比如(已经存在的文件为test.txt) svmscale test.txt这时, test.txt中的数据已经变成[-1,1]之间的数据了. 但是, 这样原来的数据就被覆盖了, 为了让规划好的数据另存为其他的文件, 我们用一dos的重定向符>来另存为(假设为out.txt):svmscale test.txt > out.txt运行后, 我们就可以看到目录下多了一个out.txt文件, 那就是规范后的数据. 假如, 我们想设定数据范围[0,1], 并把规则保存为test.range文件:svmscale –l 0 –u 1 –s test.range test.txt > out.txt这时, 目录下又多了一个test.range文件, 可以用记事本打开, 下次就可以用-r test.range来载入了.3). svmtrain的用法svmtrain我们在前面已经接触过, 他主要实现对训练数据集的训练, 并可以获得SVM模型.用法: svmtrain [options] training_set_file [model_file]其中, options为操作参数, 可用的选项即表示的涵义如下所示:-s 设置svm类型:0 – C-SVC1 – v-SVC2 – one-class-SVM3 –ε-SVR4 – n – SVR-t 设置核函数类型, 默认值为20 —线性核: μ‘∗νμ‘∗ν1 —多项式核: (γ∗μ‘∗ν+coef0)degree(γ∗μ‘∗ν+coef0)degree2 — RBF核: exp(–γ∗∥μ−ν∥2)exp(–γ∗∥μ−ν∥2)3 — sigmoid 核: tanh(γ∗μ‘∗ν+coef0)tanh(γ∗μ‘∗ν+coef0)-d degree: 核函数中的degree设置(针对多项式核函数)(默认3);-g r(gama): 核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/ k);-r coef0: 核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0);-c cost: 设置C-SVC, e -SVR和v-SVR的参数(损失函数)(默认1);-n nu: 设置v-SVC, 一类SVM和v- SVR的参数(默认0.5);-p p: 设置e -SVR 中损失函数p的值(默认0.1);-m cachesize: 设置cache内存大小, 以MB为单位(默认40);-e eps: 设置允许的终止判据(默认0.001);-h shrinking: 是否使用启发式, 0或1(默认1);-wi weight: 设置第几类的参数C为weight*C (C-SVC中的C) (默认1);-v n: n-fold交互检验模式, n为fold的个数, 必须大于等于2;-b 概率估计: 是否计算SVC或SVR的概率估计, 可选值0或1, 默认0;model_file: 可选项, 为要保存的结果文件, 称为模型文件, 以便在预测时使用.其中-g选项中的k是指输入数据中的属性数. option -v 随机地将数据剖分为n部分并计算交互检验准确度和均方根误差. 以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合, 如果设置的参数在函数或SVM类型中没有也不会产生影响, 程序不会接受该参数; 如果应有的参数设置不正确, 参数将采用默认值.training_set_file是要进行训练的数据集; model_file是训练结束后产生的模型文件, 文件中包括支持向量样本数, 支持向量样本以及lagrange系数等必须的参数; 该参数如果不设置将采用默认的文件名, 也可以设置成自己惯用的文件名.默认情况下, 只需要给函数提供一个样本文件名就可以了, 但为了能保存结果, 还是要提供一个结果文件名, 比如: test.model, 则命令为:svmtrain test.txt test.model4). svmpredict 的用法svmpredict 是根据训练获得的模型, 对数据集合进行预测.用法: svmpredict [options] test_file model_file output_file其中, options为操作参数, 可用的选项即表示的涵义如下所示:-b probability_estimates: 是否需要进行概率估计预测, 可选值为0 或者1, 默认值为0.model_file: 是由svmtrain 产生的模型文件;test_file: 是要进行预测的数据文件, 格式也要符合libsvm格式, 即使不知道label的值, 也要任意填一个, svmpredict会在output_file中给出正确的label结果, 如果知道label的值, 就会输出正确率;output_file: 是svmpredict 的输出文件, 表示预测的结果值。
lssvm回归原理LSSVM回归原理引言:支持向量机(Support Vector Machine,SVM)是一种广泛应用于分类和回归问题的机器学习算法。
其中,线性支持向量机(Linear SVM)在处理线性可分问题时表现出色,但在处理非线性问题时效果不佳。
因此,为了解决非线性回归问题,基于线性支持向量机发展出了一种改进算法,即Least Squares Support Vector Machine(LSSVM)。
LSSVM回归原理:LSSVM回归是一种非参数化模型,它使用支持向量机的思想进行回归分析。
与传统的线性回归模型不同,LSSVM回归通过引入核函数来将数据映射到高维特征空间,从而实现非线性回归。
其基本原理如下:1. 核函数选择:LSSVM回归的核心在于选择合适的核函数。
常用的核函数有线性核函数、多项式核函数、高斯核函数等。
不同的核函数对应不同的特征映射,因此核函数的选择需要根据具体问题的特点进行。
2. 模型建立:LSSVM回归的目标是在给定的训练数据集上,通过寻找最优的超平面来拟合数据。
具体而言,LSSVM回归的目标是最小化误差的平方和,并引入正则化项来控制模型的复杂度,防止过拟合。
因此,LSSVM回归的优化目标可以表示为一个二次规划问题。
3. 模型求解:求解LSSVM回归模型可以采用多种方法,常见的有序列最小最优化(Sequential Minimal Optimization, SMO)算法和坐标下降法。
这些算法可以高效地求解LSSVM回归模型的参数,从而得到最优的超平面。
4. 模型评估:为了评估LSSVM回归模型的性能,常用的指标包括均方误差(Mean Squared Error,MSE)、均方根误差(Root Mean Squared Error,RMSE)和决定系数(Coefficient of Determination,R-squared)等。
这些指标可以用来衡量模型的拟合程度和预测能力。
干货:LIBSVM核回归参数设置在数据挖掘中,LIBSVM核回归算法应用十分广泛,改变参数可以用到不同应用领域,针对不同的数据类型,解决不同类型的问题,参数设置成为了使用LIBSVM核回归算法的关键,根据理论钻研和实践经验,梳理出LIBSVM核回归算法各个参数的含义和简单易懂的设置方法,供大家参考。
①-s表示svm类型:SVM模型设置类型(默认值为0)0代表 C – SVC1代表 nu - SVC2代表 one - class SVM3代表 epsilon - SVR4代表 nu – SVR②- t表示核函数类型:核函数设置类型(默认值为2)0代表线性核函数 u'v1代表多项式核函数(r *u'v + coef0)^degree2代表RBF 核函数 exp( -r *|u - v|^2)3代表sigmiod核函数 tanh(r * u'v + coef0)③- d表示degree:核函数中的 degree 参数设置(默认值为3)(针对多项式核函数)④- g 表示核函数中的gama参数设置(针对多项式/sigmoid 核函数/RBF)(调节g的范围和颗粒度)⑤- r 表示coef0:核函数中的coef0参数设置(默认值为0)(针对多项式/sigmoid核函数)⑥- c 表示cost:设置 C – SVC,epsilon - SVR 和 nu - SVR的参数(默认值为1)(调节c的范围和颗粒度)⑦- n表示nu:设置 nu-SVC ,one - class SVM 和 nu - SVR的参数⑧- p表示epsilon:设置 epsilon - SVR 中损失函数的值(默认值为0.1)⑨- m表示cachesize:设置 cache 内存大小,以 MB 为单位(默认值为100)⑩- e表示eps:设置允许的终止阈值(默认值为0.001)⑪- h表示shrinking:是否使用启发式,0或1(默认值为1)⑫- wi 表示weight:设置第几类的参数 C为 weight* C(针对C - SVC,默认值为1)⑬- vn表示n - fold交互检验模式,n为折数,必须大于等于2⑭-mse表示核回归的均方差,反应模型的回归效果调节参数c和g的范围,使mse尽可能小,找到对应参数c和g的取值。
Libsvm使用心得最近在做基于SVM的短信分类的项目,对libsvm的使用进行了小小研究,结合网上泛滥成灾的libsvm使用方法介绍,自己做一简短总结。
libsvm是实现svm的便捷开源工具,应用广泛(除此之外还有lightsvm,没用过)由国立台湾大学Chih-Chung Chang和Chih-Jen Lin编写,可以实现基于SVM的分类和回归。
由于个人对SVM的理论只是“略懂”,下面只介绍libsvm在win32平台的基本使用方法。
对SVM一窍不通的强烈建议看一下入门文章/~piaip/svm/svm_tutorial.html先介绍一下大概的流程。
准备数据集(短信语料),处理成libsvm接受的格式,之后进行训练(svm-train)得到模型,然后进行测试,完成。
其中训练的过程需要不断选取参数寻求最佳分类结果,为此libsvm 提供了grid.py(python文件)专门用来帮助自动选取最佳参数。
1、资源准备下载Libsvm、Python和Gnuplot:libsvm——那必须有啊,最新版本2.89,主页.tw/~cjlin/libsvm/上下载得到,建议同时下载一个libsvm的初学者guidePython——主要是为了运行grid.py,最新版是 2.5,可以在python的主页/上下载Gnuplot——同样为了选取最佳参数和绘图,自己搜一下,win32版的为gp423win32.zip 2、具体流程LIBSVM 使用的一般步骤是:1)准备数据集,转化为LIBSVM支持的数据格式:[label] [index1]:[value1] [index2]:[value2] ...即[l类别标号] [特征1]:[特征值] [特征2]:[特征值] ...2)对数据进行简单的缩放操作(scale);(为什么要scale,这里不解释了)3)考虑选用核函数(通常选取径函数,程序默认);4)采用交叉验证(一般采用5折交叉验证),选择最佳参数C与g ;5)用得到的最佳参数C与g 对整个训练集进行训练得到SVM模型;6)用得到的SVM模型进行测试3、操作实现:先进行各种安装和配置。
libsvm使⽤详细说明⼀,简介LibSVM是台湾林智仁(Chih-Jen Lin)教授2001年开发的⼀套⽀持向量机的库,这套库运算速度还是挺快的,因此成为⽬前国内应⽤最多的SVM的库。
详细的使⽤说明及博主博客见下链接:Java——主要是应⽤于java平台;Python——是⽤来参数优选的⼯具svm-toy——⼀个可视化的⼯具,⽤来展⽰训练数据和分类界⾯,⾥⾯是源码,其编译后的程序在windows⽂件夹下;tools——主要包含四个python⽂件,⽤来数据集抽样(subset),参数优选(grid),集成测试(easy),数据检查(checkdata);windows——包含libSVM四个exe程序包,我们所⽤的库就是他们,⾥⾯还有个heart_scale,是⼀个样本⽂件,可以⽤记事本打开,⽤来测试⽤的。
⼆,我的使⽤⼼得:使⽤windows 下的⼯具:1. 打开cmd 命令⾏,定位到windows⽂件夹的⽬录下。
2. 进⾏libsvm训练,输⼊命令 svm-train[参数的选择] file_name。
参数的选择:根据你的任务,选择分类或者回归模型等,命令⾏中有提⽰。
file_name,是训练的⽂件名称,⽂件格式如下:Label 1:value 2:value ….Label:是类别的标识,⽐如上节train.model中提到的1 -1,你可以⾃⼰随意定,⽐如-10,0,15。
当然,如果是回归,这是⽬标值,就要实事求是了。
Value:就是要训练的数据,从分类的⾓度来说就是特征值,数据之间⽤空格隔开⽐如: -15 1:0.708 2:1056 3:-0.3333需要注意的是,如果特征值为0,特征冒号前⾯的(姑且称做序号)可以不连续。
如:-15 1:0.708 3:-0.3333我采⽤4w维的向量做训练,libsvm 速度还可以,⽀持向量的稀疏表⽰。
训练结束后,可以看到原来训练⽂件⽬录下,多了个model ⽂件,记录了训练后的结果。
LIBSVM做回归预测--终于弄通
看了网上很多帖子和博客,自己琢磨了很久到现在才弄明白怎么用libsvm来做预测。
因为网上的帖子一般都是转来转去的,所以第一个人感觉这样写详细了,之后的人不管懂不懂照搬不误,这就苦了我们笨的人啦。
不过我研究了一天,终于有点眉目,写点体会,应该会比较详细吧,至少是过来人碰到的问题。
p.s.这里暂且不讨论分类问题,其实分类比预测简单,下载下来的libsvm-2.88早已有easy.py 可以直接拿来做,所以简单,一步到位,之后如果有空就写写!
用libsvm做回归的人有的疑惑大致有这些:
1,怎么把数据整理成规定格式,我以前的帖子写了,只要用一个带有宏的excel就能搞定,话不多说。
2,有人会说svm就打几条命令就能得出结果
(
svm-train -s 3 -t 2 -c 1024.0 -g 0.0009765625 -p 0.0009765625 data.txt
svm-predict test.txt data.txt.model out.txt
),干嘛还要下载python和gnuplot呢,其实了解svm理论的知道最核心的问题就是参数的选择,你不可能每次都很狗屎的猜到很好的参数,做出很好的预测,所以只能用这两个软件来寻参。
3,怎么寻参?核心的语句就这么一句,把dos框的路径调到C:\Python26,再键入
(python C:\libsvm-2.88\python\gridregression.py -svmtrain
C:\libsvm-2.88\windows\svm-train.exe -gnuplot C:\gnuplot\bin\pgnuplot.exe -log2c -10,10,1
-log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 C:\libsvm-2.88\python\data.txt >
gridregression_data.parameter)能把这句执行下去,就算等老半天也是值得的。
(下载的三个软件的路径调整问题下面补充,我是全部放在C盘的,省事。
)
4,有人会问含有gridregression.py的以上语句不能执行老是出错,这是什么原因呢?我也闷了半天,后来才知道gridregression.py 文件在台湾人的libsvm-2.88包里面是没有的,所以要自己去下载,要来后放在C:\libsvm-2.88\python里面就可以了。
5,回归会像分类那样调用easy.py(连grid.py都不需)一步到位麽?不是的这是有区别的,当你做完步骤四时,到C:\Python26中打开文件gridregression_data.parameter,里面有你要的参数c,g,p还有一个mse是没有用的,不用管他。
6,最后把dos框的路径调到C:\libsvm-2.88\windows,再执行
svm-train -s 3 -t 2 -c 1024.0 -g 0.0009765625 -p 0.0009765625 data.txt
svm-predict test.txt data.txt.model out.txt
搞定了,结果在C:\libsvm-2.88\windows的out.txt中!
7,忘了,三个软件长什么样和住哪里没有和你们说清楚,操之过急了哈。
分别在
C:\libsvm-2.88
C:\Python26
C:\gnuplot
这样应该详细了吧。
最后附上步骤3中的补充,其实还是想自己写,因为这样清楚,不过没力气了,转一下吧,网上帖子稍有不同,不过我选了一篇很清楚的:
首先我们需要下载libsvm,最新版是11月17日刚推出的libsvm2.83,可以在libsvm的主页.tw/~cjlin/libsvm/上下载得到,建议同时下载一个libsvm的初学者guide,写得很不错,浅显易懂,适合初学者使用,基本的使用只需要libsvm这一个软件即可,但如果需要使用它自带的python脚本的话,还需要安装python,最新版是2.5,可以在python的主页上下载。
另外,libsvm自带的两个脚本grid.py和easy.py 中均用到了绘图工具gnuplot,因此还需要下载一个gnuplot软件,下载地址:
ftp:///pub/gnuplot/,注意要下载win32版本的,比如win32的4.0版本对应的文件应为gp400win32.zip。
下载完成后,接下来就是安装。
其中只有python2.5需要安装(一般默认安装到c:\python25下),将libsvm解压到c:\libsvm下,将gnuplot解压到c:\gnuplot下。
将
c:\python25,c:\libsvm\windows,c:\gnuplot\bin三个文件夹添加到系统路径里面,方便日后使用。
安装完毕后,进入c:\libsvm\tools目录下,用文本编辑器(记事本,edit都可以)修改grid.py 和easy.py两个文件,找到其中关于gnuplot路径的那项,根据实际路径进行修改,并保存。
/blog/cns!7280d7d3cc41a4ab!564.entry
用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
/user2/huangbo929/archives/2007/1714763.shtml。