贝叶斯分类
####一、问题描述 iris它是鸢尾植物数据集,存储了它的萼片和花瓣的长度和宽度,共四种特征属性,鸢尾植物分为三类。该数据集包括4个特征变量和1个类别变量。有150个样本,鸢尾有三个亚属,即山鸢尾 (Iris-setosa,即类别1),变色鸢尾(Iris-versicolor,即类2)和维吉尼亚鸢尾(Iris-virginica,即类别3)。根据贝叶斯的最小风险率决策,根据不同的特征属性对测试样本进行分类,使分类决策的风险最小化。
###二、 实现思想 原理:引入损失函数进行分析λ(αi,ωj)(i=1,2,…,a;j=1,2,…,m),该函数表示处于状态ωj决策为αi损失。通常在已知先验概率中P(ωj)及类条件概率密度P(X|ωj)(j=1,2,…,m)讨论的条件。 根据贝叶斯公式,后验概率为
在引入损失概念后考虑错误判断造成的损失时,不仅要根据后检概率的大小做出决定,还要考虑所采取的决定是否损失最小。对于给定的X,若做出决定αi(i=1,2,…,a),λ可以在m个λ(αi,ωj),j=1,2,…,m中任取一个,其相应的概率密度函数为P(ωj|X)。所以在做决定αi条件预期损失为
在决策论中,采取决策αi预期损失的条件R(αi|X)称为条件风险。由于X是随机向量的观察值,因此采用了X的不同观察值αi在决策时,其条件和风险的大小是不同的。因此,哪种决策将取决于X的值。α可视为随机向量X的函数α(X),期望风险在此定义
式中,dx是特征空间的体积元,整个特征空间的积分。预期风险R反映了对整个特征空间所有X值的相应决策α(X)平均风险;条件风险R(αi|X)它只反映了对X取值的决策αi风险。显然,一系列取一系列决策α(X)最小化预期风险R。在考虑错误判断造成的损失时,我们希望减少损失。如果每一个决策或行动都使其风险最小化,那么当所有X做出决策时,其预期风险必须最小化,这是贝叶斯决策的最小风险。 贝叶斯的最小风险决策规则是:如果
则有α=α(k)(即决策αk)。 步骤; (1)处理数据 每类样本中分别取40个样本,作为训练样本(共120个),其余样本作为测试样本(共30个), (2) 找出每种训练样本的平均值 (3) 协方差矩阵本的协方差矩阵 (4)每种训练样本的协方差矩阵 (5)每种训练样本的协方差矩阵的行列值 (6)找出各类先验概率和后验概率 (7)按最小风险原则分类,输入每个值,计算各种样本的风险,确定各种样本类别 ###三、 结果展示 运行程序获得的损失函数矩阵为:(图1) 图1 如图所示(图2)损失函数的函数界面 图2 继续操作程序,MATLAB命令窗口的结果如下:(图3,此处只截取部分显示) 图3 整理所有结果数据:测试样本分类表如图(图4) 图4 对比正确分类后,发现该分类方法获得的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.6 0.2 4.6 3.2 1.4 0.2 5. 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]; %测试样本 loss=ones(3)-diag(diag(ones(3))); plot(loss); grid on; xlabel(‘type’);ylabel(‘Loss function value’); %定义损失函数 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); %计算后验概率 risk1=loss(1,1)*P1+loss(1,2)*P2+loss(1,3)*P3; risk2=loss(2,1)*P1+loss(2,2)*P2+loss(2,3)*P3; risk3=loss(3,1)*P1+loss(3,2)*P2+loss(3,3)*P3; risk=[risk1 risk2 risk3] %计算采取不同决策所带来的风险 minriskloss=min(risk) % find the least riskloss % 找出最小风险值 if risk1min(risk) w=1 elseif risk2 min(risk) w=2 elseif risk3==min(risk) w=3 else return end end %返回测试样本所属类别