📄 getclassifier.m
字号:
function [W,B]=GetClassifier(SampleXY,Type)
%SampleXY样本
%Type 分类类型1.线性 3.多项式分类
%全局变量 样本 样例[1 1 -1;10 10 1]
global x; %样本x
global y; %样本y
global ClassType;
ClassType=Type;
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 的上下界 c罚函数系数
c=1;
lb=zeros(samplerow,1);
ub=c*ones(samplerow,1);
%不等式约束
%本为空
%等式约束
% sigma[y(i)*a(i)]=0
equalrestrict=y';
[a,fval]=fmincon(@myfun,x0,[],[],equalrestrict,[0],lb,ub)
%上式得到的a为最优化的值
%计算W,行向量,和输入X一行同列
W=zeros(1,samplerow);
a=a'; %a改变成列向量
for i=1:samplerow
W=W+y(i)*a(i).*x(i,1:end);
end;
%计算B,找任意一个a>0的下标
k=find(a>0&a<c);
Btemp=0;
for i=1:samplerow
Btemp=Btemp+y(i)*a(i)*GetDotValue(x(i,1:end),x(k(1),1:end),ClassType);
end;
B=y(k(1))-Btemp;
CeA=[1,1];
% 测试集
DiffValue=GetDotValue(W,CeA,ClassType)+B
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;
z=z*0.5;
for i=1:row
z=z-a(i);
end;
f=z;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -