myprsvmtrain.m

来自「模式识别,对iris数据进行分类,svm算法」· M 代码 · 共 55 行

M
55
字号
function [SV Alpha Thsvm]=MyPRSVMTrain(Traindata,Kerneltype,C,Sigma)
Y=Traindata(:,1);
n=length(Y);
K=kernel(Traindata,Kerneltype,Pexp,Sigma);
H=(Y*Y').*K;
H=H+1e-10*eye(size(H));
f=-ones(n,1);
A=[];
b=[];
Aeq=Y';
beq=0;
lb=zeros(n,1);
ub=C*ones(n,1);
a0=zeros(n,1);
options=optimset;    options.LargeScale='off';    options.Display='off';
Alpha=quadprog(H,f,A,b,Aeq,beq,lb,ub,a0,options); %用二次规划函数求解对偶函数的最优解

svsc=find(Alpha>1e-5);
Al=Alpha(svsc);
SV=Traindata(svsc,:);
for i=1:length(svsc)
    if(Y(svsc(i))==1)
        r=svsc(i);
        break;
    end
end
for j=1:length(svsc)
    if(Y(svsc(j))==-1)
        s=svsc(j);
        break;
    end
end
Starb=Alpha.*Y.*(K(:,r)+K(:,s));
Thsvm=-0.5*sum(Starb);
Alpha=Al;

function K=kernel(Traindata,Kerneltype,Sigma)
[n dim]=size(Traindata);
temp=Traindata(:,2:dim);
switch Kerneltype
    case 'linear'
        K=temp*temp';
    case 'poly'
        K=(temp*temp'+1).^2;
    case 'gauss'
        K=zeros(n,n);
        for i=1:n
            for j=1:n
                t=temp(i,:)-temp(j,:);
                K(i,j)=exp((-0.5*(t*t'))/Sigma.^2);
            end
        end
    otherwise
        K=0;
end

⌨️ 快捷键说明

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