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

📄 vgetclassifier.m

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