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

📄 getclassifier.m

📁 1.实现了最近点平分法的分类器 2.实现了基于凸函数最优解的分类器
💻 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 + -