The sharing of resources about Statistical Learning Theory and Machine Learning(includeing SVM,Semi-Supervised Learning,Ensemble Learning,Clustering) ,welcome to contact and communicate with me: Email: xiankaichen@gmail.com,QQ:112035246,

Thursday, July 3, 2008

一段matlab做交叉验证的程序

从网上down下来了一个程序.
然后自己改了一下变成了csvm,fsvm的交叉验证.

function [cvprecision,Model]=csvmcrossvalidate(sonar,fold,parameters)
%function [acc_mean,acc_std]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%sonar is the all data include the class
%fold is the number of crossvalidate
%signal is the signal of classification, if n=0 is decision tree
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
precision=[];
[row column]=size(sonar);
label=sonar(:,column);
classnum=max(label);
start1=1;
for i=1:classnum
[a,b]=find(label==i);
datai=sonar(a,:); %select the i class data
[rr1,cc1]=size(datai);
start1=1;
%%%%%%%%%part the i class in (fold)%%%%%%%%%%%%%%%%%%%%%
for j=1:fold-1
a1=round(length(a)/fold);
a2=a1-1;
%fun1=strcat('x*',num2str(a1),'+y*',num2str(a2),'=',num2str(rr1));
%fun2=strcat('x+y=',num2str(fold));
%[x,y]=solve(fun1,fun2)
%[x,y] = solve('x*a1+a2*y=rr1','x+y=fold')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A=[a1 a2;1 1];
b=[rr1 fold]';
x=A\b;

if (j0)
parameters(5)=size(Samples,1);
parameters(6)=size(Samples,2);
alpha=[];

%void csvmTrain(double model[],dou ble parameter[], double
%X1[],double y1[])%以下红色部分为可以修改部分,即算法插入
alpha=csvmTrain(parameters,Samples',Labels');
model.alpha=alpha;
model.parameters=parameters;
model.trainS=[Samples Labels];
precision(j)=csvmPredictor(model,testS,testL);
end
end
cvprecision=mean(precision);

%在整个训练集合上得到算法的模型.
wholesamples=sonar(:,1:(column-1));
wholelabels=sonar(:,column);
parameters(5)=row;
parameters(6)=column-1;
alpha_=[];
%将y标准化{1,-1}
for k=1:size(wholelabels)
%hold on;
%plot(Samples(k,1),Samples(k,2),'r*');
if wholelabels(k)~=1
wholelabels(k)=-1;
end
end
alpha_=csvmTrain(parameters,wholesamples',wholelabels');
Model.alpha=alpha_;
Model.parameters=parameters;
Model.trainS=[wholesamples wholelabels];


No comments: