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

📄 bianyuan.m

📁 朴素贝叶斯分类器
💻 M
字号:
clear;
clc;
load shengchenshuju;
T=size(r1,1);
%%%%%%%%%%%%k叠交叉验证%%%%%%%%%%%%%
k=4;s=4;
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);
%计算第二类中的各个特征属性以及第二类的均值以及方差
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);

%%%%%%%%%%%%%%%进入测试阶段%%%%%%%%%%%%%%
[TestSampleNum nn]=size(tdata);
testdata=tdata(:,1:nn-1); %testdata不含有类标签
M=[];
for i=1:TestSampleNum%ij表示第i个数据属于第j类
    pxw1=[];pxw2=[];pxw3=[];
    for j=1:(nn-1)
        pxw11=normpdf(testdata(i,j),means(1,j),sigma(1,j));
        pxw12=normpdf(testdata(i,j),means(2,j),sigma(2,j));
        pxw13=normpdf(testdata(i,j),means(3,j),sigma(3,j));
        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);
Correctrate=(TestSampleNum-E)/TestSampleNum;

⌨️ 快捷键说明

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