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

📄 fenleiqi.m

📁 朴素贝叶斯分类器
💻 M
字号:
function [x y]=fenleiqi(traindata,testdata1)
[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);
%计算第二类中的各个特征属性以及第二类的均值以及方差
means2=mean(traindata(H2,1:N));
sigmapf2=var(traindata(H2,1:N)).*((c2-1)/c2);
%计算第三类中的各个特征属性以及第三类的均值以及方差
means3=mean(traindata(H3,1:N));
sigmapf3=var(traindata(H3,1:N)).*((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));

%%%%%%%%%%%%%%%进入测试阶段%%%%%%%%%%%%%%
tdata=testdata1;
[TestSampleNum nn]=size(tdata);
testdata=tdata(:,1:nn-1);
M=[];
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);
        M=[M;[P1 P2 P3]];
end 
[m ind] = max(M, [], 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);

Fitness_value=0;
for k=1:TestSampleNum
    if tdata(k,nn)~=ind(k,1)
       Fitness_value=Fitness_value-m(k);
    else
       Fitness_value=Fitness_value+m(k);
    end
end
Fitness_value=Fitness_value+1;   %使得适应度函数的值为正
x=Fitness_value;
y=TestSampleNum-E;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -