⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lploo.m

📁 一个我自己编写的求解线性支持向量机的matlab代码
💻 M
字号:
function lploo(C)
varepsilon=0.01;
l=10;
x=linspace(-10,10,l)
xi=randn(1,l);
number=length(x'*x);
xi3=0.1.*xi;
y3=sin(x+exp(-20.))./(x+exp(-20.))+xi3;
sum=[];
% sigma=[0.1:0.2:2,2:1:10,100,200];
%  C=[0.1:0.2:2,2:30:150,200,300];
% C=[1,2]
sigma=[1,2,3]
% nC=length(C)
nsigma=length(sigma);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%参   数   选    择
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for kk=1:nsigma
         p1=sigma(kk);
         loosum=0;
        for loo=1:number
              xloo=[x(1:(loo-1)),x((loo+1):number)];
              yloo=[y3(1:(loo-1)),y3((loo+1):number)];
              l=number-1;
               Q=rbfker(xloo',p1,0)
               % yueshu 1
              E=-1.*eye(l);
               for i=1:l
                     B1(i,:)=[Q(:,i);-1.*Q(:,i);E(:,i)]';
               end 
               %yueshu 2
               for i=1:l
                         B2(i,:)=[-1.*Q(:,i);Q(:,i);E(:,i)]';
               end 
              EE=eye(2.*l);
              b=[yloo';-1.*yloo']+varepsilon;
               AA=[B1;B2];
               for i=1:(2.*l)
                      if b(i)<0 
                              EE(i,i)=-1;b(i)=abs(b(i));
                               AA(i,:)=-1.*AA(i,:);
                         end 
               end 
               A=[AA';EE']';
               f=[ones(2.*l,1);C*ones(l,1);zeros(2.*l,1)];
               lb=zeros(5*l,1);
               [alpha,fval]=linprog(f,[],[],A,b,lb);
                floo=0.;
              for j=1:l
              floo=floo+(alpha(j)-alpha(j+l)).*exp(-1.*(dot(x(j)-x(loo),x(j)-x(loo)))./(p1.^2));
              end 
                loosum=loosum+abs(floo-y3(loo));
         end 
sum(kk)=loosum;
end 
fprintf('%f   ',sum);
minsum=min(sum);
for i=1:nsigma
    if minsum==sum(i);
        jihao=i;break;
    end 
end
fprintf('optimal sigma = %f ',sigma(jihao) );

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%  选    择    完    毕
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p1=sigma(jihao),
l=number;
Q=rbfker(x',p1,0)
% yueshu 1
E=-1.*eye(l);
for i=1:l
    B11(i,:)=[Q(:,i);-1.*Q(:,i);E(:,i)]';
end 
%yueshu 2
for i=1:l
    B22(i,:)=[-1.*Q(:,i);Q(:,i);E(:,i)]';
end 
EE=eye(2.*l);
b=[y3';-1.*y3']+varepsilon;
AA=[B11;B22];
for i=1:(2.*l)
    if b(i)<0 
        EE(i,i)=-1;b(i)=abs(b(i));
        AA(i,:)=-1.*AA(i,:);
    end 
end 
A=[AA';EE']';
f=[ones(2.*l,1);C.*ones(l,1);zeros(2.*l,1)];
lb=zeros(5*l,1);
[alpha,fval]=linprog(f,[],[],A,b,lb);
fprintf('fval =%f  ',fval);
xprime=linspace(-10,10,100);
for i=1:100
    ff(i)=0;
    for j=1:l
        ff(i)=ff(i)+(alpha(j)-alpha(j+l)).*exp(-1.*(dot(x(j)-xprime(i),x(j)-xprime(i)))./(p1.^2));
    end 
end 
y=sin(xprime+exp(-20.))./(xprime+exp(-20.));
plot(x,y3,'.');
hold on;
plot(xprime,y,'r')
plot(xprime,ff,'g')
hold on;
fprintf(' looerror=%f   ',sum);

fprintf('optimal sigma = %f ',sigma(jihao) );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -