模式识别报告 bayes分类
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);