模式识别报告 bayes分类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安交通大学

《模式识别》实验一——IRIS正态分布假设下的贝叶斯分类

吴娟梅硕2081

3112313030

对于具有多个特征参数的样本(如本实验的iris 数据样本有4d =个参数),其正态分布的概率密度函数可定义为

112

2

11()exp ()()2(2)T d

p π-⎧⎫=

--∑-⎨⎬⎩⎭

x x μx μ

式中,12,,,d x x x ⎡⎤⎣⎦=x 是d 维行向量,12,,,d μμμ⎡⎤⎣⎦=μ 是d 维行向量,∑是d d ⨯维协方差矩阵,1-∑是∑的逆矩阵,∑是∑的行列式。

本实验我们采用最小错误率的贝叶斯决策,使用如下的函数作为判别函数

()(|)(),

1,2,3i i i g p P i ωω==x x (3个类别)

其中()i P ω为类别i ω发生的先验概率,(|)i p ωx 为类别i ω的类条件概率密度函数。

由其判决规则,如果使()()i j g g >x x 对一切j i ≠成立,则将x 归为i ω类。

我们根据假设:类别i ω,i=1,2,……,N 的类条件概率密度函数(|)i p ωx ,i=1,2,……,N 服从正态分布,即有(|)i p ωx ~(,)i i N ∑μ,那么上式就可以写为

112

2

()1()exp ()(),1,2,32(2)T i i d

P g i ωπ-⎧⎫

=

-∑=⎨⎬⎩⎭

x x -μx -μ

对上式右端取对数,可得

111()()()ln ()ln ln(2)222

T i i i i d

g P ωπ-=-∑+-∑-i i x x -μx -μ

上式中的第二项与样本所属类别无关,将其从判别函数中消去,不会改变分类结果。则判别函数()i g x 可简化为以下形式

111

()()()ln ()ln 22

T i i i i g P ω-=-∑+-∑i i x x -μx -μ

1.用部分数据来估计均值、协方差首先读入数据

clear all

clc

% 原始数据导入,原数据以文本的形式存储,iris是一个L*12的矩阵,L为数据长度iris = load('C:\Documents and

Settings\Administrator\IRIS_Data.txt');

%求出数据长度L

display('数据长度为') L=length(iris)

%iris是一个L*12的矩阵,12列共分为三类数据,每类占4列

%将数据分类存储于三个数组

w1=iris(1:L,1:4);

w2=iris(1:L,5:8);

w3=iris(1:L,9:12);

然后选取训练样本估计均值、协方差。训练样本的选取有很多种方法,我们采用两种较为常见的方法进行选取。

方法一是顺序选取。分别试取[1:10]、 [11:50]两组数据进行训练,用于对比训练数据多寡对于分类效果的影响。

%顺序选取,参数可调,待输入选取的训练样本的起始点和截止点

display('请输入每类训练样本在顺序选取时的');

N0 = input('数据起始点(大于0小于L的整数)N0=');

Nj = input('数据截止点(大于N0小于L的整数)Nj=');

display('则训练样本长度为')

N=Nj-N0+1 %提取样本的统计特征值,均值和协方差display('用上述部分数据估计的三类样本均值、协方差依次为');

mean1=mean(w1(N0:Nj,:))

mean2=mean(w2(N0:Nj,:))

mean3=mean(w3(N0:Nj,:))

cov1=cov(w1(N0:Nj,:))

cov2=cov(w2(N0:Nj,:))

cov3=cov(w3(N0:Nj,:))

方法二是随机选取N个数据。试随机取N=10、N=40两组数据进行训练。同样也是用于比对训练数据的多寡对分类器的性能有何影响。

clear all

clc

% 原始数据导入,原数据以文本的形式存储,iris是一个L*12的矩阵,L为数据长度iris = load('C:\Documents and

Settings\Administrator\IRIS_Data.txt');

%求出数据长度L

display('数据长度为')

L=length(iris)

%iris是一个L*12的矩阵,12列共分为三类数据,每类占4列

%将数据分类存储于三个数组

w1=iris(1:L,1:4);

w2=iris(1:L,5:8);

w3=iris(1:L,9:12);

%随机选取,参数可调,待输入选取的训练样本的个数N

N=input('请输入每类训练样本在随机选取时的样本长度为N=');

%随机选取N个训练样本,即产生N个不大于数据长度L的不重复的整数作为其样本序号Number

randdata=randperm(L);

Number1=randdata(1:N);

Number=sort(Number1);

%提取样本的统计特征值,均值和协方差display('用上述部分数据估计的三类样本均值、协方差依次为'); mean1=mean(w1(Number,:)) mean2=mean(w2(Number,:)) mean3=mean(w3(Number,:)) cov1=cov(w1(Number,:)) cov2=cov(w2(Number,:)) cov3=cov(w3(Number,:))

2.用后验概率去判断数据的类型

首先选取测试分类数据。令先验概率可变,即选取不同的测试数据组数进行实验。

试取测试数据组数为10、10、10,正常取值,来考查前述训练样本数对分类结果的影响。

再试取数据组数为试取数据组数为4、40、50;45、4、3进行分类。研究当先验概率很小时对分类效果的影响。

%选取

w1[N10:N1j],w2[N20:N2j],w3[N30:N3j]用作每类测试的分类样本,可变先验概率

%顺序选取,参数可调,待输入选取的测试分类样本的起始点和截止点

%1类测试分类数据

display('请输入1类测试分类样本在顺序选取时的');

N10 = input('数据起始点(大于0小于L的整数)N10=');

N1j = input('数据截止点(大于N0小于L的整数)N1j=');

display('则1类测试分类样本长度为')

N1=N1j-N10+1

test1=w1(N10:N1j,:);

%2类测试分类数据

display('请输入第2类测试分类样本在顺序选取时的');

N20 = input('数据起始点(大于0小于L的整数)N20=');

N2j = input('数据截止点(大于N0小于L的整数)N2j=');

display('则第2类测试分类样本长度为')

N2=N2j-N20+1

test2=w1(N20:N2j,:);

%3类测试分类数据

display('请输入第3类测试分类样本在顺序选取时的');

N30 = input('数据起始点(大于0小于L的整数)N30=');

N3j = input('数据截止点(大于N0小于L的整数)N3j=');

display('则第3类测试分类样本长度为')

N3=N3j-N30+1

test3=w1(N30:N3j,:);

%选取的测试分类数据存入一个数组test test=[test1;test2;test3];

然后分别两两分组,第1&2类、第2&3类、第1&3类,计算判别函数,判别分类正确率。

%计算协方差阵的行列式和逆cov1_det=det(cov1);

cov2_det=det(cov2); cov3_det=det(cov3); cov1_inv=inv(cov1); cov2_inv=inv(cov2);

相关文档
最新文档