matlab中SVM工具箱的使用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
包已经解压到文件夹F:\R2009b\toolbox\svm
matlab中SVM工具箱的使用方法
1,下载SVM工具箱:/faculty/chzheng/bishe/indexfiles/indexl.htm 2,安装到matlab文件夹中
1)将下载的SVM工具箱的文件夹放在\matlab71\toolbox\下
2)打开matlab->File->Set Path中添加SVM工具箱的文件夹
现在,就成功的添加成功了.
可以测试一下:在matlab中输入which svcoutput 回车,如果可以正确显示路径,就证明添加成功了,例如:
C:\Program Files\MATLAB71\toolbox\svm\svcoutput.m
3,用SVM做分类的使用方法
1)在matlab中输入必要的参数:X,Y,ker,C,p1,p2
我做的测试中取的数据为:
N = 50;
n=2*N;
randn('state',6);
x1 = randn(2,N)
y1 = ones(1,N);
x2 = 5+randn(2,N);
y2 = -ones(1,N);
figure;
plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.');
axis([-3 8 -3 8]);
title('C-SVC')
hold on;
X1 = [x1,x2];
Y1 = [y1,y2];
X=X1';
Y=Y1';
其中,X是100*2的矩阵,Y是100*1的矩阵
C=Inf;
ker='linear';
global p1 p2
p1=3;
p2=1;
然后,在matlab中输入:[nsv alpha bias] = svc(X,Y,ker,C),回车之后,会显示:
Support Vector Classification
_____________________________
Constructing ...
Optimising ...
Execution time: 1.9 seconds
Status : OPTIMAL_SOLUTION
|w0|^2 : 0.418414
Margin : 3.091912
Sum alpha : 0.418414
Support Vectors : 3 (3.0%)
nsv =
3
alpha =
0.0000
0.0000
0.0000
0.0000
0.0000
2)输入预测函数,可以得到与预想的分类结果进行比较.
输入:predictedY = svcoutput(X,Y,X,ker,alpha,bias),回车后得到:
predictedY =
1
1
1
1
1
1
1
1
1
3)画图
输入:svcplot(X,Y,ker,alpha,bias),回车
补充:
X和Y为数据,m*n:m为样本数,n为特征向量数
比如:取20组训练数据X,10组有故障,10组无故障的,每个训练数据有13个特征参数,则m=20,n=13
Y为20*1的矩阵,其中,10组为1,10组为-1.
对于测试数据中,如果取6组测试数据,3组有故障,3组无故障的,则m=6,n=13
Y中,m=6,n=1
/SV M_soft.html
SVM - Support Vector Machines
Software
Train support vector machine classifier
/access/helpdesk/help/toolbox/bioinfo/ref/svmtrain.html
一些问题???????
1.今天我在使用SVM通用工具箱对眼电的信号数据进行分类时出现如下错误:
Support Vector Classification
_____________________________
Constructing ...
Optimising ...
??? Dimension error (arg 3 and later).
Error in ==> svc at 60
[alpha lambda how] = qp(H, c, A, b, vlb, vub, x0, neqcstr);
不知道是什么原因?
答:今天上午终于找到出现这一错误的原因:它并不是SVM程序的问题,是我在整理样本时,把参数需要的样本行列颠倒所致。
此处X是样本特征(行向量),Y为对应样本的类别(一行对应X的一行样本)!
2.使用第一个steve gunn 's SVM 遇到一个问题。
??? Invalid MEX-file ‘××××\svm\qp.dll': The specified procedure could not be found.
??? Invalid MEX-file 'D:\Program Files\MATLAB\R2007a\toolbox\svm\qp.dll': 找不到指定的程序。
Error in ==> svc at 60
[alpha lambda how] = qp(H, c, A, b, vlb, vub, x0, neqcstr);
这个问题是由于版本问题引起的,我使用的是Matlab R2007版。
我正在努力找解决方案,看看能否重新编译一下qp.dll。
查阅一晚上资料,终于找到如何解决这个简单的问题了。
关键是一开始没有仔细看。
问题:??? Invalid MEX-file 'D:\Program Files\MATLAB\R2007a\toolbox\svm\qp.dll':找不到指定的程序。
问题描述:mex在不同windows OS下编译的结果,所以我们需要重新编译一下qp.dll
方法:steve gunn 的包下面有一个optimiser 文件夹,把current Diretory目录改为optimiser目录,例如D:\Program Files\MATLAB\R2007a\toolbox\svm\Optimiser,然后运行命令
>> mex -v qp.c pr_loqo.c
命令运行完毕后,你会发现原先的qp.dll变为qp.dll.old,还出现了qp.mexw32,我们把该文件改为qp.dll 复制到工具箱文件夹下。
原先的工具箱文件qp.dll可以先改一下名字....(Frysoo@)
这个问题解决了...
我运行下面的文件通过(该文件从网所搜索测试,作者没有求证,感谢原作者)。
N = 50; n=2*N;randn('state',6); x1 = randn(2,N); y1 = ones(1,N); x2 = 5+randn(2,N);y2 = -ones(1,N);
figure;plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.');axis([-3 8 -3 8]);title('C-SVC')
hold on;X1 = [x1,x2];Y1 = [y1,y2]; X=X1';Y=Y1'; C=Inf; ker='linear'; global p1 p2 p1=3; p2=1;
[nsv alpha bias] = svc(X,Y,ker,C)
注:有的读者通过google或者百度搜索,??? Invalid MEX-file 找不到指定的程序,找到这里来了,呵呵。
其实该文章是对svm的matlab工具包编写的。
解决:???Invalid MEX-file 的一个共性就是,版本问题,您可以尝试更换matlab版本。
例如您的mex dll在6.5版本中编写的,请不要使用7.4版本去调用,matlab就这一点很讨厌人...Frysoo
SVM 函数详解
支持向量机分类的相关函数
1. [nsv alpha bias] = svc(X,Y,ker,C)
X 是训练样本
Y 是训练样本的输出,即Label
ker 为核函数,支持向量机的工具箱支持如下几种核函数:
linear poly rbf sigmoid spline bspline fourier erfb anova
其中,除了linear和spline两个核函数之外,其他的核函数还需要设定一些参数。
例如核函数poly的阶数、径向基函数rbf的宽度等。
这些参数的设置在工具箱中的全局变量p1,p2中设置。
Values for ker: linear -
poly - p1 is degree of polynomial
rbf - p1 is width of rbfs (sigma)
sigmoid - p1 is scale, p2 is offset
spline -
bspline - p1 is degree of bspline
fourier - p1 is degree
erfb - p1 is width of rbfs (sigma)
anova - p1 is max order of terms
nsv 是svc函数返回的训练样本中支持向量的个数
alpha 是svc函数返回的每个训练样本对应的拉格朗日乘子,拉格朗日乘子不为零的向量即为支持向量
bias 是偏置量
2. predictedY = svcoutput(trnX,trnY,tstX,ker,alpha,bias,actfunc)
trnX 训练数据
trnY 训练数据类别
tstX 测试数据
ker 核函数
alpha 拉格朗日乘子Lagrange Multipliers
bias 偏置量
actfunc 激励函数:0(默认值) hard; 1 soft 平滑
该函数根据训练样本得到的最优分类面计算实际样本的输出。
利用它还可以得到测试样本的分类情况,对最优分类面进行测试。
3. [h] = svcplot(X,Y,ker,alpha,bias,aspect,mag,xaxis,yaxis,input)
支持向量机分类绘图函数svcplot,用于绘制最优分类面,并标识出支持向量
X 训练数据
Y 训练数据类别
ker 核函数
alpha 拉格朗日乘子
bias 偏置量
aspect 图像纵横比: 0(默认) fixed; 1 variable
mag 缩放率0.1默认
xaxis 1(默认)
yaxis 2(默认)
input vector of input values (default: zeros(no_of_inputs))
4. err = svcerror(trnX,trnY,tstX,tstY,ker,alpha,bias)
统计测试样本分类错误数量的函数,用于统计利用已知的最优分类面对测试样本进行分类,发生错误分类的数目
trnX 训练数据
trnY 训练目标类别
tstX 预测数据
tstY 预测目标类别
ker 核函数
alpha 拉格朗日乘子
bias 偏置量
5. uiclass
简易图形用户界面函数。
1 load fisheriris
2 data = [meas(:,1), meas(:,2)];
3 groups = ismember(species,'setosa');
4 [train, test] = crossvalind('holdOut',groups);
5 cp = classperf(groups);
6 svmStruct = svmtrain(data(train,:),groups(train),'showplot',true);
7 classes = svmclassify(svmStruct,data(test,:),'showplot',true);
8 classperf(cp,classes,test);
9 cp.CorrectRate
groups = cellstr(num2str(groups))
第一行是读入matlab数据集
第二行是仅分析2列,对根据这2列的数据进行分类
第三行是生成组号.原有的组名是setosa,versicolor,virginica.这里进行分类是分成2类,是setosa(组号为1)以及非setosa(组号为0)
第四行是生成交叉检验的数据.即决定哪一些行作为测试集,哪一些行作为训练集.其中train 中为1的元素表示训练集,test中为1的元素表示测试集
第五行是生成了一个评估分类结果的对象
第六行使用训练集的数据生成svm分类器
第七行使用这个分类器对测试集的数据进行分类.结果放在classes中
第八行评估分类的性能,把评估器,分类结果和测试集的索引作为参数进行评估
第九行得出评估结果。