clear;clc;close all;
%% import data
%%%%%%%%%%%%%%%%%cancer%%%%%%%%%%%%%%%%%%
% data=importdata('dataset/breast-cancer-wisconsin.data.txt');
% y=data(:,11); % label
% data=data(:,2:10);
% for i=1:9
% data(:,i)=(data(:,i)-mean(data(:,i)))/sqrt(var(data(:,i)));
% end
% pos=find(y==2);
% pos2=find(y==4);
% x=data(pos,:)'; % positive examples
% l=size(x,2);
% test=x(:,2*l/3+1:end); % test data
% test2=data(find(y==4),:)'; % negative examples
% testn=size(test,2);
% test=[test test2];
% x=x(:,1:2*l/3); % training data
% l=size(x,2);
%%%%%%%%%%%%%%iris%%%%%%%%%%%%%%%%%%%%
rawdata=importdata('dataset/iris.data.txt');
data=rawdata;
y=data(:,5);
data(:,5)=[];
for i=1:size(data,2)
data(:,i)=(data(:,i)-mean(data(:,i)))/sqrt(var(data(:,i)));
end
pos=find(y==0);
x=data(pos,:)'; % positive examples
l=size(x,2);
test=x(:,2*l/3+1:end); % test data
test2=data(find(y~=0),:)'; % negative examples
testn=size(test,2);
test=[test test2];
x=x(:,1:2*l/3); % training data
l=size(x,2);
%%%%%%%%%%%%%%banknote%%%%%%%%%%%%%%%%%%%%
% rawdata=importdata('dataset/data_banknote_authentication.txt');
% data=rawdata;
% y=data(:,5);
% data(:,5)=[];
% for i=1:size(data,2)
% data(:,i)=(data(:,i)-mean(data(:,i)))/sqrt(var(data(:,i)));
% end
% pos=find(y==0);
% x=data(pos,:)'; % positive examples
% l=size(x,2);
% test=x(:,2*l/3+1:end); % test data
% test2=data(find(y~=0),:)'; % negative examples
% testn=size(test,2);
% test=[test test2];
% x=x(:,1:2*l/3); % training data
% l=size(x,2);
%%%%%%%%%%%%%%ecoli%%%%%%%%%%%%%%%%%%%%
% rawdata=importdata('dataset/ecoli.data.txt');
% data=rawdata.data;
% y=data(:,8);
% data(:,8)=[];
% for i=1:size(data,2)
% data(:,i)=(data(:,i)-mean(data(:,i)))/sqrt(var(data(:,i)));
% end
% pos=find(y==0);
% x=data(pos,:)'; % positive examples
% l=size(x,2);
% test=x(:,2*l/3+1:end); % test data
% test2=data(find(y~=0),:)'; % negative examples
% testn=size(test,2);
% test=[test test2];
% x=x(:,1:2*l/3); % training data
% l=size(x,2);
%% training
% parameter sweep
Cfit=0;
sfit=0;
prfit=0;
rcfit=0;
f1fit=1;
C_start=0.01;
C_step=0.03;
C_end=0.19;
s_start=1;
s_step=0.2;
s_end=3;
% scores
prm=zeros(length(C_start:C_step:C_end),length(s_start:s_step:s_end)); % false negative scores
rcm=prm; % false positive scores
f1m=prm;
accm=prm;
svm=prm;
csvm=prm;
pri=0;
prifit=1;
prjfit=1;
for C=C_start:C_step:C_end
pri=pri+1;
prj=0;
for s=s_start:s_step:s_end
prj=prj+1;
% initialize alpha
a=ones(1,l)/l;
% calculate inner product matrix
p=zeros(l);
for i=1:l-1
for j=i:l
p(i,j)=kerfun(x(:,i),x(:,j),s);
p(j,i)=p(i,j);
end
end
% initialize gradient vector
g=diag(p)'-2*a*p;
% training
while(1)
% find working pairs(pairs violate kkt condition and will maximize the change of alpha)
mi=0;
ma=0;
for i=1:l
if(a(i)<C-eps)
if(ma==0)
ma=i;
continue;
end
if((g(ma)-p(ma,ma))<(g(i)-p(i,i)))
ma=i;
end
end
if(a(i)>eps)
if(mi==0)
mi=i;
continue;
end
if((g(mi)-p(mi,mi))>(g(i)-p(i,i)))
mi=i;
end
end
end
i1=ma;
i2=mi;
if(i1==0||i2==0)
break;
end
gamma=a(i1)+a(i2); % the sum of old alpha_i and alpha_j
delta=(g(i1)-g(i2))/(p(i1,i1)+p(i2,i2)-2*p(i1,i2))/2;
% stopping creterion
if(delta<eps)
break;
end
% check the constraint
if(delta>(gamma-a(i1)+eps))
delta=gamma-a(i1);
end
if(delta>a(i2)+eps)
delta=a(i2);
end
% update gradients and alpha
for i=1:l
g(i)=g(i)-2*delta*p(i1,i)+2*delta*p(i2,i);
end
a(i1)=a(i1)+delta;
a(i2)=a(i2)-delta;
end
% test
% calculate the boundary
R2=0;
t=1;
num=0;
cnum=0;
idx=zeros(1,2);
for i=1:l
if(a(i)>eps&&a(i)<C-eps)
t=i;
R2=R2+p(t,t)-2*a*p(:,t)+sum(sum(a'*a.*p));
% R2=p(t,t)-2*a*p(:,t)+sum(sum(a'*a.*p))
num=num+1;
idx(num)=i;
end
if(a(i)>C-eps)
cnum=cnum+1;
end
end
R2=R2/num;
% test the test data
testy=zeros(1,size(test,2));
sa=sum(sum(a'*a.*p));
for i=1:size(test,2)
z=test(:,i);
r2=kerfun(z,z,s)+sa;
for j=1:l
r2=r2-2*a(j)*kerfun(z,x(:,j),s);
end
if(r2<R2)
testy(i)=1;
end
end
pr=(testn-sum(testy(1:testn)))/testn;
testp=length(testy)-testn;
rc=1-(testp-sum(testy(testn+1:testn+testp)))/testp;
f1=(pr+rc)/2
prm(pri,prj)=pr;
rcm(pri,prj)=rc;
f1m(pri,prj)=f1;
svm(pri,prj)=num;
csvm(pri,prj)=cnum;
cm(pri,prj)=C;
if(f1<f1fit)
prfit=pr;
rcfit=rc;
f1fit=f1;
Cfit=C;
sfit=s;
prifit=pri;
prjfit=prj;
end
end
end
%% output
C=Cfit;
s=sfit;
% initialize alpha
a=ones(1,l)/l;
% calculate inner product matrix
p=zeros(l);
for i=1:l-1
for j=i:l
p(i,j)=kerfun(x(:,i),x(:,j),s);
p(j,i)=p(i,j);
end
end
% initialize gradient vector
g=diag(p)'-2*a*p;
% training
while(1)
% find working pairs(pairs violate kkt condition and will maximize the change of alpha)
mi=0;
ma=0;
for i=1:l
if(a(i)<C-eps)
if(ma==0)
ma=i;
continue;
end
if((g(ma)-p(ma,ma))<(g(i)-p(i,i)))
ma=i;
end
end
if(a(i)>eps)
if(mi==0)
mi=i;
continue;
end
if((g(mi)-p(mi,mi))>(g(i)-p(i,i)))
mi=i;
end
end
end
i1=ma;
i2=mi;
if(i1==0||i2==0)
break;
end
gamma=a(i1)+a(i2); % the sum of old alpha_i and alpha_j
delta=(g(i1)-g(i2))/(p(i1,i1)+p(i2,i2)-2*p(i1,i2))/2;
% stopping creterion
if(delta<eps)
break;
end
% check the constraint
if(delta>(gamma-a(i1)+eps))
delta=gamma-a(i1);
end
if(delta>a(i2)+eps)
delta=a(i2);
end
% update gradients and alpha
for i=1:l
g(i)=g(i)-2*delta*p(i1,i)+2*delta*p(i2,i);
end
a(i1)=a(i1)+delta;
a(i2)=a(i2)-delta;
end
% test
% calculate the boundary
R2=0;
t=1;
num=0;
idx=zeros(1,2);
for i=1:l
if(a(i)>eps&&a(i)<C-eps)
t=i;
R2=R2+p(t,t)-2*a*p(:,t)+sum(sum(a'*a.*p));
num=num+1;
idx(num)=i;
end
end
R2=R2/num
center=(a*p)';
figure;
plot(a);
% test the test data
testy=zeros(1,size(test,2));
sa=sum(sum(a'*a.*p));
for i=1:size(test,2)
z=test(:,i);
r2=kerfun(z,z,s)+sa;
for j=1:l
r2=r2-2*a(j)*kerfun(z,x(:,j),s);
end
if(r2<R2)
testy(i)=1;
end
end
figure;
plot(testy);
pr=(testn-sum(testy(1:testn)))/testn
testp=length(testy)-testn;
rc=1-(testp-sum(testy(testn+1:testn+testp)))/testp
f1=(pr+rc)/2
C
s
%% plot and visualization
% figure;
% scatter(test(1,find(testy==1))',test(2,find(testy==1))','r+');
% hold on;
% scatter(test(1,1:testn)',test(2,1:testn)','r');
% scatter(test(1,find(testy==0))',test(2,find(testy==0))','b.');
% scatter(test(1,testn+1:end)',test(2,testn+1:end)','b');
% l
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
SVDD.rar (4个子文件)
SVDD.m 10KB
__MACOSX
._SVDD.m 206B
._kerfun.m 120B
kerfun.m 181B
共 4 条
- 1
xingzh_up
- 粉丝: 12
- 资源: 47
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1