📄 one-class.m
字号:
clear all
close all
c=1;
g=0.5; %高斯函数的参数
y(1)=0;
y(2)=0;
for k=1:85
y(k+2)=1-1.4*y(k+1)^2+0.3*y(k);
end
% plot(y);
X=[1,-0.4];
for k=1:85
X=[X;[y(k+1),y(k+2)]];
end
plot(X(:,1),X(:,2),'*');
hold on;
[n,m]=size(X);
for i=1:n
for j=1:n
k(i,j)=exp(-(X(i,:)-X(j,:))*(X(i,:)-X(j,:))'/g); %加;计算机不会在运行窗口K(i'j).
end
end
H=k;
f=zeros(n,1);
Aep=ones(1,n);
bep=1;
LB=zeros(n,1);
UB=ones(n,1).*c;
a=quadprog(H,f,[],[],Aep,bep,LB,UB);
e=1e-9; %为了保证数据的稳定性设计一个小误差
Lm=find(a>e); %求取ai>0的下标即其对应训练标本的下标
Svn=length(Lm);
Lm1=find(a>e&(a<(c-e))); %求取0<ai<c的下标。
Svn1=length(Lm1); %求取0<ai<c的个数,用来通过求和取平均计算b值。
R=0;
for s=1:Svn1
for z=1:n
R=R+2*a(z)*exp(-(X(Lm(s),:)-X(z,:))*(X(Lm(s),:)-X(z,:))'/g);
end
end
R=1+a'*H*a-R/Svn1;
x=sym('x');
y=sym('y');
f=0;
for i=1:n
f=f+2*a(i)*exp(-([x,y]-X(i,:))*([x,y]-X(i,:))'/g);
end
f=1+a'*H*a-f-R;
%ezplot(f);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -