📄 fenleiqijicheng.m
字号:
clear;
clc;
load ('c301data.mat');
r1=r1';
r1=r1(1:70,:);
T=size(r1,1);
%%%%%%%%%%%%k叠交叉验证%%%%%%%%%%%%%
k=4;s=1;
tdata=r1(s:k:T,:);%测试数据包括分类好的决策属性值
r1(s:k:T,:)=[];
traindata=r1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[n N]=size(traindata);
[a1 a2]=Classification(traindata(:,N));%找到类变量分类的范围
[traindata A B]=guiyihua(traindata);
H1=[];H2=[];H3=[];
for i=1:n
if traindata(i,N)>=a2 & traindata(i,N)<=1
h1=i;
H1=[H1;h1];
elseif traindata(i,N)>=a1 & traindata(i,N)<a2
h2=i;
H2=[H2;h2];
elseif traindata(i,N)>=0 & traindata(i,N)<a1
h3=i;
H3=[H3;h3];
end
end
traindata=fanguiyihua(traindata,A,B);
%计算先验概率
c1=size(H1,1);c2=size(H2,1);c3=size(H3,1);
prior=[c1/n c2/n c3/n];
%计算第一类中的各个特征属性以及第一类的均值以及方差
means1=mean(traindata(H1,1:N)); %N表示列向量的个数
sigmapf1=var(traindata(H1,1:N)).*((c1-1)/c1);
m1=cov(traindata(H1,1:N-1)).*((c1-1)/c1);
%计算第二类中的各个特征属性以及第二类的均值以及方差
means2=mean(traindata(H2,1:N));
sigmapf2=var(traindata(H2,1:N)).*((c2-1)/c2);
m2=cov(traindata(H2,1:N-1)).*((c2-1)/c2);
%计算第三类中的各个特征属性以及第三类的均值以及方差
means3=mean(traindata(H3,1:N));
sigmapf3=var(traindata(H3,1:N)).*((c3-1)/c3);
m3=cov(traindata(H3,1:N-1)).*((c3-1)/c3);
means=[means1;means2;means3];
sigmapf=[sigmapf1;sigmapf2;sigmapf3];
sigma=sigmapf.^(1/2);
%相关系数lu
lu1=zeros(1,N-1);
for i=1:N-1
b1=traindata(H1,[i,N]);
co1=cov(b1).*((c1-1)/c1);
lu1(i)=abs(co1(1,2)/(sigma(1,i)*sigma(1,N)));%第一类的三个特征属性分别与自己的相关系数
end
lu2=zeros(1,N-1);
for i=1:N-1
b2=traindata(H2,[i,N]);
co2=cov(b2).*((c2-1)/c2);
lu2(i)=abs(co2(1,2)/(sigma(2,i)*sigma(2,N)));
end
lu3=zeros(1,N-1);
for i=1:N-1
b3=traindata(H3,[i,N]);
co3=cov(b3).*((c3-1)/c3);
lu3(i)=abs(co3(1,2)/(sigma(3,i)*sigma(3,N)));
end
lu=[lu1;lu2;lu3];
Lu=[];
Lu=sqrt(sigmapf(:,1:N-1).*(repmat(ones(1,N-1),[3,1])-lu.^2));
t1=sqrt(det(m1));
t2=sqrt(det(m2));
t3=sqrt(det(m3));
M1=means(1,1:N-1)';
M2=means(2,1:N-1)';
M3=means(3,1:N-1)';
%%%%%%%%%%%%%%%进入测试阶段%%%%%%%%%%%%%%
[TestSampleNum nn]=size(tdata);
Z=nn-1;
testdata=tdata(:,1:nn-1);
MM1=[];
for i=1:TestSampleNum%ij表示第i个数据属于第j类
pxw1=[];pxw2=[];pxw3=[];
for j=1:(nn-1)
if testdata(i,j)>(means(1,j)-Lu(1,j)) & testdata(i,j)<(means(1,j)+Lu(1,j))
pxw11=0.6844;
elseif testdata(i,j)<=(means(1,j)-Lu(1,j)) & testdata(i,j)>=(means(1,j)-2*Lu(1,j)) | testdata(i,j)>=(means(1,j)+Lu(1,j)) & testdata(i,j)<=(means(1,j)+2*Lu(1,j))
pxw11=0.2725;
else
pxw11=0.0431;
end
if testdata(i,j)>(means(2,j)-Lu(2,j)) & testdata(i,j)<(means(2,j)+Lu(2,j))
pxw12=0.6844;
elseif testdata(i,j)<=(means(2,j)-Lu(2,j)) & testdata(i,j)>=(means(2,j)-2*Lu(2,j)) | testdata(i,j)>=(means(2,j)+Lu(2,j)) & testdata(i,j)<=(means(2,j)+2*Lu(2,j))
pxw12=0.2725;
else
pxw12=0.0431;
end
if testdata(i,j)>(means(3,j)-Lu(3,j)) & testdata(i,j)<(means(3,j)+Lu(3,j))
pxw13=0.6844;
elseif testdata(i,j)<=(means(3,j)-Lu(3,j)) & testdata(i,j)>=(means(3,j)-2*Lu(3,j)) | testdata(i,j)>=(means(3,j)+Lu(3,j)) & testdata(i,j)<=(means(3,j)+2*Lu(3,j))
pxw13=0.2725;
else
pxw13=0.0431;
end
pxw1=[pxw1;pxw11];
pxw2=[pxw2;pxw12];
pxw3=[pxw3;pxw13];
end
P1=chengji(pxw1)*prior(1);
P2=chengji(pxw2)*prior(2);
P3=chengji(pxw3)*prior(3);
MM1=[MM1;[P1 P2 P3]];
end
MM1=MM1./repmat(sum(MM1,2),[1,3]);
[o1 ind1] = max(MM1, [], 2);
MM2=[];
for i=1:TestSampleNum%ij表示第i个数据属于第j类
pxw1=[];pxw2=[];pxw3=[];
for j=1:(nn-1)
pxw11=normpdf(testdata(i,j),means(1,j),sqrt(sigmapf(1,j)*(1-lu(1,j)^2)));
pxw12=normpdf(testdata(i,j),means(2,j),sqrt(sigmapf(2,j)*(1-lu(2,j)^2)));
pxw13=normpdf(testdata(i,j),means(3,j),sqrt(sigmapf(3,j)*(1-lu(3,j)^2)));
pxw1=[pxw1;pxw11];
pxw2=[pxw2;pxw12];
pxw3=[pxw3;pxw13];
end
P1=chengji(pxw1)*prior(1);
P2=chengji(pxw2)*prior(2);
P3=chengji(pxw3)*prior(3);
MM2=[MM2;[P1 P2 P3]];
end
MM2=MM2./repmat(sum(MM2,2),[1,3]);
[o2 ind2] = max(MM2, [], 2);
MM3=[];
for j=1:TestSampleNum
f1=exp(-((testdata(j,1:Z))'-M1)'*inv(m1)*((testdata(j,1:Z))'-M1)/2)*1/((2*pi)^(3/2)*t1);
f2=exp(-((testdata(j,1:Z))'-M2)'*inv(m2)*((testdata(j,1:Z))'-M2)/2)*1/((2*pi)^(3/2)*t2);
f3=exp(-((testdata(j,1:Z))'-M3)'*inv(m3)*((testdata(j,1:Z))'-M3)/2)*1/((2*pi)^(3/2)*t3);
p1=f1*prior(1);
p2=f2*prior(2);
p3=f3*prior(3);
MM3=[MM3;p1 p2 p3];
end
MM3=MM3./repmat(sum(MM3,2),[1,3]);
[o3 ind3] = max(MM3, [], 2);
MM=MM1+MM2+MM3;
[o ind] = max(MM, [], 2);
tdata(:,nn)=guiyihua1(tdata(:,nn),A(N),B(N));
for i=1:TestSampleNum
if tdata(i,nn)>=a2 & tdata(i,nn)<=1
tdata(i,nn)=1;
elseif tdata(i,nn)>=a1 & tdata(i,nn)<a2
tdata(i,nn)=2;
elseif tdata(i,nn)>=0 & tdata(i,nn)<a1
tdata(i,nn)=3;
end
end
Err_ind = find(tdata(:,nn)~=ind);
E=size(Err_ind,1);
Correctrate=(TestSampleNum-E)/TestSampleNum;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -