?? 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 + -