资源简介
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
评论
共有 条评论