一、 问题描述 ——贝叶斯分类 iris它是鸢尾植物的数据集,存储了萼片和花瓣的长度和宽度,共有四种特征属性(1、2、3、4),鸢尾植物分为三类。该数据集一共包含4个特征变量,1个类别变量。有150个样本,鸢尾有三个亚属,即山鸢尾 (Iris-setosa,即类别1),变色鸢尾(Iris-versicolor,即类2)和维吉尼亚鸢尾(Iris-virginica,即类别3)。贝叶斯根据最小错误率做出决定,根据不同的特征属性对测试样本进行分类,使分类结果的错误率最小化。
二、 实现思想 原理:在一般模式识别问题中,人们的目标往往是尽量减少分类错误,追求最小错误率,即解决决策规则,使
贝叶斯的决定是基于最小的错误率。 由P(e|x)≥0,P(x)≥0对所有x都成立,所以minP(e)相当于最小化所有xP(e|x),即使是后验概率P(ωi|x)最大化。根据贝叶斯公式。
对于所有类别,分母都是一样的,所以在决策时只需要比较分子,即
先验概率P(ωi)和类条件概率密度P(x|ωi)已知。概率密度P(x|ωi)反映了在ωi在类中观察特征值x的相对可能性。 对于多类决策,错误率计算量大,可转化为平均正确率P(c)计算错误率:
步骤: (1)处理数据 每类样本中分别取40个样本,作为训练样本(共120个),其余样本作为测试样本(共30个), (2) 找出每种训练样本的平均值 (3) 协方差矩阵本的协方差矩阵 (4) 每种训练样本的协方差矩阵 (5)每种训练样本的协方差矩阵的行列值 (6)找出各类先验概率和后验概率
三、 结果展示 操作程序必须测试样本分类图界面,每次取3个不同的特征属性进行多次实验(图1、图2、图3、图4) ps:为了使分类图更直观,有些图是旋转的。 图1(萼长,萼宽,花瓣长,属性1,2,3)
图2(萼长,萼宽,花瓣宽,属性1,2,4)
图3(萼长,花瓣长,花瓣宽,属性1,3,4)
图4(萼宽,花瓣长,花瓣宽,属性2,3,4)
从四个分类图可以清楚地看出,数据分类效果更好。 继续操作程序,MATLAB命令窗口的结果如下:(图5,此处只截取部分显示)
图5
整理所有结果数据:测试样本分类表如图(图6)
图6
对比正确分类后,发现该分类方法获得的30组数据的分类与正确分类一致。
结论:贝叶斯决策理论需要两个前提:一是已知的分类类别数;二是已知的类条件概率密度和先验概率。前者容易解决,后者通常不容易满足。基于贝叶斯决策的分类器设计方法是在已知类条件概率密度的情况下讨论的。贝叶斯使用样本来估计类条件的概率密度,估计的类条件概率密度函数可能是线性函数或各种非线性函数。在使用样本估计之前,这种设计判断函数的想法不知道判断函数是线性函数还是其他函数,有时受样本空间大小和维数的影响,类条件概率密度函数更难确定。 四、 代码 clear; clc; N=120;w=3;n=4;N1=40;N2=40;N3=40; %训练样本数;类别数;特征数;各种训练样本数; A=[5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0.2 5.4 3.9 1.7 0.4 4.6 3.4 1.4 0.3 5 3.4 1.5 0.2 4.4 2.9 1.4 0.2 4.9 3.1 1.5 0.1 5.4 3.7 1.5 0.2 4.8 3.4 1.6 0.2 4.8 3 1.4 0.1 4.3 3 1.1 0.1 5.8 4 1.2 0.2 5.7 4.4 1.5 0.4 5.4 3.9 1.3 0.4 5.1 3.5 1.4 0.3 5.7 3.8 1.7 0.3 5.1 3.8 1.5 0.3 5.4 3.4 1.7 0.2 5.1 3.7 1.5 0.4 4.6 3.6 1 0.2 5.1 3.3 1.7 0.5 4.8 3.4 1.9 0.2 5 3 1.6 0.2 5 3.4 1.6 0.4 5.2 3.5 1.5 0.2 5.2 3.4 1.4 0.2 4.7 3.2 1.6 0.2 4.8 3.1 1.6 0.2 5.4 3.4 1.5 0.4 5.2 4.1 1.5 0.1 5.5 4.2 1.4 0.2 4.9 3.1 1.5 0.2 5 3.2 1.2 0.2 5.5 3.5 1.3 0.2 4.9 3.6 1.4 0.1 4.4 3 1.3 0.2 5.1 3.4 1.5 0.2]; % 1类训练样本 B=[7 3.2 4.7 1.4 6.4 3.2 4.5 1.5 6.9 3.1 4.9 1.5 5.5 2.3 4 1.3 6.5 2.8 4.6 1.5 5.7 2.8 4.5 1.3 6.3 3.3 4.7 1.6 4.9 2.4 3.3 1 6.6 2.9 4.6 1.3 5.2 2.7 3.9 1.4 5 2 3.5 1 5.9 3 4.2 1.5 6 2.2 4 1 6.1 2.9 4.7 1.4 5.6 2.9 3.6 1.3 6.7 3.1 4.4 1.4 5.6 3 4.5 1.5 5.8 2.7 4.1 1 6.2 2.2 4.5 1.5 5.6 2.5 3.9 1.1 5.9 3.2 4.8 1.8 6.1 2.8 4 1.3 6.3 2.5 4.9 1.5 6.1 2.8 4.7 1.2 6.4 2.9 4.3 1.3 6.6 3 4.4 1.4 6.8 2.8 4.8 1.4 6.7 3 5 1.7 6 2.9 4.5 1.5 5.7 2.6 3.5 1 5.5 2.4 3.8 1.1 5.5 2.4 3.7 1 5.8 2.7 3.9 1.2 6 2.7 5.1 1.6 5.4 3 4.5 1.5 6 3.4 4.5 1.6 6.7 3.1 4.7 1.5 6.3 2.3 4.4 1.3 5.6 3 4.1 1.3 5.5 2.5 4 1.3]; 训练样本%2 C=[6.3 3.3 6 2.5 5.8 2.7 5.1 1.9 7.1 3 5.9 2.1 6.3 2.9 5.6 1.8 6.5 3 5.8 2.2 7.6 3 6.6 2.1 4.9 2.5 4.5 1.7 7.3 2.9 6.3 1.8 6.7 2.5 5.8 1.8 7.2 3.6 6.1 2.5 6.5 3.2 5.1 2 6.4 2.7 5.3 1.9 6.8 3 5.5 2.1 5.7 2.5 5 2 5.8 2.8 5.1 2.4 6.4 3.2 5.3 2.3 6.5 3 5.5 1.8 7.7 3.8 6.7 2.2 7.7 2.6 6.9 2.3 6 2.2 5 1.5 6.9 3.2 5.7 2.3 5.6 2.8 4.9 2 7.7 2.8 6.7 2 6.3 2.7 4.9 1.8 6.7 3.3 5.7 2.1 7.2 3.2 6 1.8 6.2 2.8 4.8 1.8 6.1 3 4.9 1.8 6.4 2.8 5.6 2.1 7.2 3 5.8 1.6 7.4 2.8 6.1 1.9 7.9 3.8 6.4 2 6.4 2.8 5.6 2.2 6.3 2.8 5.1 1.5 6.1 2.6 5.6 1.4 7.7 3 6.1 2.3 6.3 3.4 5.6 2.4 6.4 3.1 5.5 1.8 6 3 4.8 1.8 6.9 3.1 5.4 2.1]; 训练样本%3 X1=mean(A)’ X2=mean(B)’ X3=mean?’ % 寻求训练样本的平均值 S1=cov(A) S2=cov(B) S3=cov? % 协方差矩阵 S1_=inv(S1) S2_=inv(S2) S3_=inv(S3) %训练样本协方差矩阵的逆矩阵 S11=det(S1) S22=det(S2) S33=det(S3) % 协方差矩阵行列 Pw1=N1/N Pw2=N2/N Pw3=N3/N %先验概率 sample=[ 5 3.5 1.3 0.3 4.5 2.3 1.3 0.3 4.4 3.2 1.3 0.2 5 3.5 1.6 0.6 5.1 3.8 1.9 0.4 4.8 3 1.4 0.3 5.1 3.8 1. 0.2 4.6 3.2 1.4 0.2 5.3 3.7 1.5 0.2 5 3.3 1.4 0.2 5.5 2.6 4.4 1.2 6.1 3 4.6 1.4 5.8 2.6 4 1.2 5 2.3 3.3 1 5.6 2.7 4.2 1.3 5.7 3 4.2 1.2 5.7 2.9 4.2 1.3 6.2 2.9 4.3 1.3 5.1 2.5 3 1.1 5.7 2.8 4.1 1.3 6.7 3.1 5.6 2.4 6.9 3.1 5.1 2.3 5.8 2.7 5.1 1.9 6.8 3.2 5.9 2.3 6.7 3.3 5.7 2.5 6.7 3 5.2 2.3 6.3 2.5 5 1.9 6.5 3 5.2 2 6.2 3.4 5.4 2.3 5.9 3 5.1 1.8]; %测试样本 for k=1:30 P1=-1/2*(sample(k,:)‘-X1)‘S1_(sample(k,:)’-X1)+log(Pw1)-1/2log(S11); P2=-1/2(sample(k,:)’-X2)‘S2_(sample(k,:)’-X2)+log(Pw2)-1/2log(S22); P3=-1/2(sample(k,:)'-X3)‘S3_(sample(k,:)’-X3)+log(Pw3)-1/2*log(S33); %求后验概率 P=[P1 P2 P3] Pmax=max§ if P1max§ w=1 plot3(sample(k,2),sample(k,3),sample(k,4),‘ro’);grid on;hold on; elseif P2max§ w=2 plot3(sample(k,2),sample(k,3),sample(k,4),‘b>’);grid on;hold on; elseif P3==max§ w=3 plot3(sample(k,2),sample(k,3),sample(k,4),‘g+’);grid on;hold on; else return end end