📄 vgetclassifier.m
字号:
function [W,B]=vGetClassifier(SampleXY,Type,inla,inv)
%SampleXY样本[1 1;10 10];
%Type 分类类型1.线性 3.多项式分类
%全局变量 样本
global x; %样本x
global y; %样本x
global ClassType;
global la; %误差控制实参数
global v; %误差控制实参数
global a;
global B;
ClassType=Type;
la=inla;
v=inv;
x0=[1 1]; % a的开始值
%samplerow 总样本数
[samplerow,samplecol]=size(SampleXY);
%初始化本点(x(i),y(i))
x=SampleXY(1:end,1:end-1);
y=SampleXY(1:end,end);
%不等式约束 A是行向量
A=(-1)*ones(samplerow,1);
Ab=-v;
%等式约束 Aeq 是行向量
% sigma[y(i)*a(i)]=0
Aeq=y';
Aeqb=[0];
%a 的上下界 c罚函数系数
lb=zeros(samplerow,1);
ub=(1/la)*ones(samplerow,1);
%得到的a为最优化的值
[a,fval]=fmincon(@myfun,x0,A,Ab,Aeq,Aeqb,lb,ub)
%计算B,找任意一个满足要求的下标j,k;
j=0;k=0;
k=find(a>0&a<(1/l));
[krow,kcol]=size(k);
for i=1:kcol;
if y(i)==1
j=i;
break;
end;
end;
for i=1:kcol;
if y(i)==-1
k=i;
break;
end;
end;
Btemp=0;
for i=1:samplerow
Btemp=Btemp+y(i)*a(i)*(GetDotValue(x(i,1:end),x(j,1:end),ClassType)+...
GetDotValue(x(i,1:end),x(k,1:end),ClassType));
end;
B=-0.5*Btemp;
%求决策函数 xin为输入 xin为一行
function f=DecideFace(xin)
W=0;
global a;
global ClassType;
global B;
a=a';
for i=1:samplerow
W=W+y(i)*a(i)*(GetDotValue(x(i,1:end),xin(:,1:end),ClassType);
end;
f=W+B;
CeA=[1,1];
% 测试集
DiffValue=feval(DecideFace,CeA);
if DiffValue>0 || DiffValue==0
disp('Class A');
else
disp('Class B');
end;
%============================================================
%最优化目标函数
function f=myfun(a)
global x;
global y;
global ClassType;
[row,col]=size(a);
z=0;
for i=1:row;
for j=i:row;
z=z+a(i)*a(j)*y(i)*y(j)*GetDotValue(x(i,1:end),x(j,1:end),ClassType);
end;
end;
f=z;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -