lploo.asv

来自「一个我自己编写的求解线性支持向量机的matlab代码」· ASV 代码 · 共 110 行

ASV
110
字号
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 
sumback=sum;
for i=1:(nsigma-1)
    if sum(i+1)>x(i) tidai=sum(i+1);sum(i+1)=sum(i);sum(i)=tidai;
        jihao=i;
    else jihao=i+1;
    end 
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%  选    择    完    毕
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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;
for i=1:nsigma
fprintf('%f ',sumback);

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

⌨️ 快捷键说明

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