• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: Matlab
  • 标签: Bayes  

资源简介

matlab代码,有详细解释,产生正态分布随机数据,划分训练集测试集,用Bayes分类器分类

资源截图

代码片段和文件信息

%-------------------------------------------------
%由训练数据统计先验概率得到分界线(设计分类器);
%用测试数据测试分类器性能,计算错判率;
%画出训练集二维分布,测试集数据三维分布图及分界线
%-------------------------------------------------
function bayes_classifier(datatarget)
train=zeros(10002);
test=zeros(20002);
prior_class1=0;
prior_class2=0;
class1_num=0;
class2_num=0;
%打乱下标便于随机划分训练集和测试集
index=randperm(3000);

figure;
hold on;
%由训练数据得到先验概率
for i=1:1000
    %按打乱顺序的前1000个下标选取训练数据
    train(i:)=data(index(i):);
    %统计训练集中两类数据点,得到先验概率
    if index(i)>1500 
        scatter(train(i1)train(i2)‘m‘‘.‘);%粉红表示第二类,绿色表示第一类
        class2_num=class2_num+1;
        data_class2(class2_num:)=data(index(i):);
    else        
        class1_num=class1_num+1;
        scatter(train(i1)train(i2)‘g‘‘.‘);        
        data_class1(class1_num:)=data(index(i):);
    end
end

mu1=mean(data_class1);
mu2=mean(data_class2);
sigma1=cov(data_class1);
sigma2=cov(data_class2);
display(mu1);
display(sigma1);
display(mu2);
display(sigma2);
%由训练集得到的先验概率
prior1=class1_num/1000;
prior2=class2_num/1000;
display(prior1);
display(prior2);

%根据贝叶斯决策方程求数据分界线
syms x1 x2
Xr=[x1x2];
Xt=[x1;x2];
%对于一般性多元正态数据,决策面方程为X‘(Wi-Wj)X+(wi-wj)‘X+wi0-wj0=0X为列向量;
%式中的WiWj即下式w1(2)_1;
%wiwj即w1(2)_2;
%wi0wj0即w1(2)_3;
w1_1=-0.5*inv(sigma1);
w2_1=-0.5*inv(sigma2);
w1_2=inv(sigma1)*mu1‘;
w2_2=inv(sigma2)*mu2‘;
w1_3=-0.5*mu1*inv(sigma1)*mu1‘+log(prior1);
w2_3=-0.5*mu2*inv(sigma2)*mu2‘+log(prior2);
%分界线方程
g12=Xr*(w1_1-w2_1)*Xt+(w1_2-w2_2)‘*Xt+w1_3-w2_3;
g12=simple(g12);

ezplot(g12);
hold off;
%初始化错分样本数
error_count=0;
test=data(index(1001:3000):);
for i=1:2000
    if index(i+1000)<=1500
    g(i)=-0.5*(test(i:)-mu1)*inv(sigma1)*(test(i:)-mu1)‘-0.5*log(det(sigma1))+log(prior1);
    g_temp=-0.5*(test(i:)-mu2)*inv(sigma2)*(test(i:)-mu2)‘-0.5*log(det(sigma2))+log(prior2);
        if g(i)           error_count=error_count+1; 
        end
    else 
    g(i)=-0.5*(test(i:)-mu2)*inv(sigma2)*(test(i:)-mu2)‘-0.5*log(det(sigma2))+log(prior2);   
    g_temp=-0.5*(test(i:)-mu1)*inv(sigma1)*(test(i:)-mu1)‘-0.5*log(det(sigma1))+log(prior1);
        if g(i)            error_count=error_count+1; 
        end
    end
end
error_rate=error_count/2000;
display(error_rate);

data3d(:1:2)=test;
data3d(:3)=g;
[XYZ]=griddata(data3d(:1)data3d(:2)data3d(:3)linspace(min(data3d(:1))max(data3d(:1)))‘linspace(min(data3d(:2))max(data3d(:2))));

figure;
hold on;
grid on;
mesh(XYZ);
ezplot(g12);
hold off;
end



















 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2011-12-21 17:35  Bayes\
     文件        2813  2011-12-13 15:43  Bayes\bayes_classifier.m
     文件         831  2011-12-13 14:02  Bayes\bayes_main.m
     文件         624  2011-12-13 13:16  Bayes\data_generator.m

评论

共有 条评论