① 如何简单易懂地理解贝叶斯非参数模型
贝叶斯非参数模型关于随机事件A和B的条件概率或边缘概率的一则定理。其中P(A|B)是在B发生的情况下A发生的可能性。
用Ph表示在没有训练数据前假设h拥有的初始概率。Ph被称为h的先验概率。先验概率反映了关于h是一正确假设的机会的背景知识如果没有这一先验知识。
可以简单地将每一候选假设赋予相同的先验概率。PD表示训练数据D的先验概率,PD表示假设h成立时D的概率。机器学习中,我们关心的是Ph,即给定D时h的成立的概率,称为h的后验概率。
举例说明:
问题:假定有一个新病人,化验结果为正,是否应将病人断定为有癌症。求后验概率Pcancer+和Pcancer+。
因此极大后验假设计算如下:
P+cancerPcancer=0.0078。
P+cancerPcancer=0.0298。
hMAP=cancer。
确切的后验概率可将上面的结果归一化以使它们的和为1。
贝叶斯推理的结果很大程度上依赖于先验概率,另外不是完全接受或拒绝假设,只是在观察到较多的数据后增大或减小了假设的可能性。
② c语言编程实现 基于最小错误率的贝叶斯决策
贝叶斯决策理论(Bayesian Decision Theory)
贝叶斯决策理论概述
贝叶斯决策理论是主观贝叶斯派归纳理论的重要组成部分。
贝叶斯决策就是在不完全情报下,对部分未知的状态用主观概率估计,然后用贝叶斯公式对发生概率进行修正,最后再利用期望值和修正概率做出最优决策。
贝叶斯决策理论方法是统计模型决策中的一个基本方法,其基本思想是:
★已知类条件概率密度参数表达式和先验概率
★利用贝叶斯公式转换成后验概率
★根据后验概率大小进行决策分类
贝叶斯公式
设D1,D2,……,Dn为样本空间S的一个划分,如果以P(Di)表示事件Di发生的概率,且P(Di)>0(i=1,2,…,n)。对于任一事件x,P(x)>0,如图
贝叶斯决策理论分析
(1)如果我们已知被分类类别概率分布的形式和已经标记类别的训练样本集合,那我们就需要从训练样本集合中来估计概率分布的参数。在现实世界中有时会出现这种情况。(如已知为正态分布了,根据标记好类别的样本来估计参数,常见的是极大似然率和贝叶斯参数估计方法)
(2)如果我们不知道任何有关被分类类别概率分布的知识,已知已经标记类别的训练样本集合和判别式函数的形式,那我们就需要从训练样本集合中来估计判别式函数的参数。在现实世界中有时会出现这种情况。(如已知判别式函数为线性或二次的,那么就要根据训练样本来估计判别式的参数,常见的是线性判别式和神经网络)
(3)如果我们既不知道任何有关被分类类别概率分布的知识,也不知道判别式函数的形式,只有已经标记类别的训练样本集合。那我们就需要从训练样本集合中来估计概率分布函数的参数。在现实世界中经常出现这种情况。(如首先要估计是什么分布,再估计参数。常见的是非参数估计)
(4)只有没有标记类别的训练样本集合。这是经常发生的情形。我们需要对训练样本集合进行聚类,从而估计它们概率分布的参数。(这是无监督的学习)
(5)如果我们已知被分类类别的概率分布,那么,我们不需要训练样本集合,利用贝叶斯决策理论就可以设计最优分类器。但是,在现实世界中从没有出现过这种情况。这里是贝叶斯决策理论常用的地方。
问题:假设我们将根据特征矢量x 提供的证据来分类某个物体,那么我们进行分类的标准是什么?decide wj, if(p(wj|x)>p(wi|x))(i不等于j)应用贝叶斯展开后可以得到p(x|wj)p(wj)>p(x|wi)p(wi)即或然率p(x|wj)/p(x|wi)>p(wi)/p(wj),决策规则就是似然率测试规则。
结论:
对于任何给定问题,可以通过似然率测试决策规则得到最小的错误概率。这个错误概率称为贝叶斯错误率,且是所有分类器中可以得到的最好结果。最小化错误概率的决策规则就是最大化后验概率判据。
贝叶斯决策判据
贝叶斯决策理论方法是统计模式识别中的一个基本方法。贝叶斯决策判据既考虑了各类参考总体出现的概率大小,又考虑了因误判造成的损失大小,判别能力强。贝叶斯方法更适用于下列场合:
(1) 样本(子样)的数量(容量)不充分大,因而大子样统计理论不适宜的场合。
(2) 试验具有继承性,反映在统计学上就是要具有在试验之前已有先验信息的场合。用这种方法进行分类时要求两点:
第一,要决策分类的参考总体的类别数是一定的。例如两类参考总体(正常状态Dl和异常状态D2),或L类参考总体D1,D2,…,DL(如良好、满意、可以、不满意、不允许、……)。
第二,各类参考总体的概率分布是已知的,即每一类参考总体出现的先验概率P(Di)以及各类概率密度函数P(x/Di)是已知的。显然,0≤P(Di)≤1,(i=l,2,…,L),∑P(Di)=1。
对于两类故障诊断问题,就相当于在识别前已知正常状态D1的概率户(D1)和异常状态0:的概率P(D2),它们是由先验知识确定的状态先验概率。如果不做进一步的仔细观测,仅依靠先验概率去作决策,那么就应给出下列的决策规则:若P(D1)>P(D2),则做出状态属于D1类的决策;反之,则做出状态属于D2类的决策。例如,某设备在365天中,有故障是少见的,无故障是经常的,有故障的概率远小于无故障的概率。因此,若无特B,j明显的异常状况,就应判断为无故障。显然,这样做对某一实际的待检状态根本达不到诊断的目的,这是由于只利用先验概率提供的分类信息太少了。为此,我们还要对系统状态进行状态检测,分析所观测到的信息。
③ 怎么将这个贝叶斯算法加入到这个代码里面
你这个程序是干啥的?为何要用到贝叶斯算法,用了贝叶斯算法,希望得到一个啥结果?
④ 贝叶斯代码请教
生成二维正态分布的样本300个为 X N 维的矩阵
,这个是书中的测试程序,你不能直接套用
matlab中mvnrnd的具体解释。
R = mvnrnd(MU,SIGMA)——从均值为MU,协方差为SIGMA的正态分布中抽取n*d的矩阵R(n代表抽取的个数,d代表分布的维数)。
MU为n*d的矩阵,R中的每一行为以MU中对应的行为均值的正态分布中抽取的一个样本。
SIGMA为d*d的对称半正定矩阵,或者为d*d*n的array。若SIGMA为array,R中的每一行对应的分布的协方差矩阵为该array对应的一个page。也就是说:R(i,:)由MU(i,:)和SIGMA(:,:,i)产生。
如果协方差矩阵为对角阵,sigma也可用1*d向量或1*d*n的array表示,如果MU是一个1*d的向量,则SIGMA中的n个协方差矩阵共用这个MU。
R的行数n由MU的行数n或者SIGMA的page数n决定。
r = mvnrnd(MU,SIGMA,cases)——从均值为MU(1*d),协方差矩阵为SIGMA(d*d)的正态分布中随机抽取cases个样本,返回cases*d的矩阵r。
⑤ 给朴素贝叶斯代码(c++)注释
我看了下代码,写得非常浅显...我觉得也没啥好注释的....我想你主要是想知道怎样使用nb吧.
nb是生成模型的最朴素的实现.基于的是贝叶斯估计.贝叶斯估计的核心是公式:
P(Y | X) = P (X , Y) / P (X)
= P(Y) P (X | Y) / sum(P(Y) P (X | Y))
网上打字好累,我学术鄙陋,表达一般,若打算深入学习,建议看看李航的统计学习方法,里面相关的描述很不错.
若有兴趣,我也可以把其中例4.2中的推导转给你看.相比于你这段代码更直观一点.虽然其实是一回事
⑥ 贝叶斯网络模型 matlab 源代码
>> N = 8;
dag = zeros(N,N);
X2=2;X3=3;X4=4; X1=1;C = 5; B = 6;A = 7;T = 8;
dag([X2 X3],C)=1;
dag([X3 X4],B)=1;
dag([X1 C],A)=1;
dag([A B],T)=1;
discrete_nodes = 1:N;
node_sizes = 2*ones(1,N);
bnet = mk_bnet(dag, node_sizes);
bnet.CPD{
X1
} = tabular_CPD(bnet, X1, [0.01 0.99]);
bnet.CPD{
X2
} = tabular_CPD(bnet, X2, [0.02 0.98]);
bnet.CPD{
X3
} = tabular_CPD(bnet, X3, [0.03 0.97]);
bnet.CPD{
X4
} = tabular_CPD(bnet, X4, [0.04 0.96]);
bnet.CPD{
A
} = tabular_CPD(bnet, A, [1 1 1 0 0 0 0 1]);
bnet.CPD{
B
} = tabular_CPD(bnet, B, [1 1 1 0 0 0 0 1]);
bnet.CPD{
C
} = tabular_CPD(bnet, C, [1 0 0 0 0 1 1 1]);
bnet.CPD{
T
} = tabular_CPD(bnet, T, [1 0 0 0 0 1 1 1]);
G=bnet.dag;
draw_graph(G);
engine=jtree_inf_engine(bnet);
evidence=cell(1,N);
[engine,ll]=enter_evidence(engine,evidence);
m=marginal_nodes(engine,[X1]);
m.T
⑦ 贝叶斯MATLAB异常检测代码
close all; clear all; X=-6:0.0001:6; %设置采样范围及精度 pw1=0.9;pw2=0.1; %设置先验概率 u1=-2;sig1=0.25;u2=2;sig2=4; %设置类条件概率分布参数 y1=(1./sqrt(2*pi*sig1))*gaussmf(X,[sqrt(sig1) u1]);%计算类别一(正常细胞)的类条件概率...
⑧ 如何简单易懂地理解贝叶斯非参数模型
首先说明一下,机器学习中参数估计方法最基本的就是极大似然估计。极大似然估计结果完全依赖于给定的样本数据,它视待估参数为一个未知但固定的量,从而不考虑先验知识的影响。因此如果样本数据不能很好反映模型的情况,那么得到的参数估计结果就会有较大偏差。
举个简单的例子,我们都知道抛一枚普通硬币,出现正面反面的概率各为1/2。如果现在正面出现9次,反面出现1次,那么用极大似然估计得到的概率就是P(正面)=9/10,P(反面)=1/10,显然是有偏差的。为了减小这个偏差,于是我们就采用贝叶斯估计方法。
回忆一下贝叶斯公式,它是用来计算后验概率的,也就是已知结果求其导致原因的概率。该公式的结果取决于两方面:似然估计和先验概率。正是如此,我们最终的估计结果才更加客观合理地反映模型的参数。
一般地,假设先验概率为P(θ),似然函数为L(θ|X)=P(X|θ),X为样本集合,我们将贝叶斯公式简单表示为P(θ|X)∝P(θ)L(θ|X),这便是θ的贝叶斯估计。
⑨ 贝叶斯网络,看完这篇我终于理解了(附代码)!
概率图模型是用图来表示变量概率依赖关系的理论,结合概率论与图论的知识,利用图来表示与模型有关的变量的联合概率分布。由图灵奖获得者Pearl开发出来。
如果用一个词来形容概率图模型(Probabilistic Graphical Model)的话,那就是“优雅”。对于一个实际问题,我们希望能够挖掘隐含在数据中的知识。概率图模型构建了这样一幅图,用观测结点表示观测到的数据,用隐含结点表示潜在的知识,用边来描述知识与数据的相互关系, 最后基于这样的关系图获得一个概率分布 ,非常“优雅”地解决了问题。
概率图中的节点分为隐含节点和观测节点,边分为有向边和无向边。从概率论的角度,节点对应于随机变量,边对应于随机变量的依赖或相关关系,其中 有向边表示单向的依赖,无向边表示相互依赖关系 。
概率图模型分为 贝叶斯网络(Bayesian Network)和马尔可夫网络(Markov Network) 两大类。贝叶斯网络可以用一个有向图结构表示,马尔可夫网络可以表 示成一个无向图的网络结构。更详细地说,概率图模型包括了朴素贝叶斯模型、最大熵模型、隐马尔可夫模型、条件随机场、主题模型等,在机器学习的诸多场景中都有着广泛的应用。
长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大。而且概率虽然未知,但最起码是一个确定的值。比如如果问那时的人们一个问题:“有一个袋子,里面装着若干个白球和黑球,请问从袋子中取得白球的概率是多少?”他们会想都不用想,会立马告诉你,取出白球的概率就是1/2,要么取到白球,要么取不到白球,即θ只能有一个值,而且不论你取了多少次,取得白球的 概率θ始终都是1/2 ,即不随观察结果X 的变化而变化。
这种 频率派 的观点长期统治着人们的观念,直到后来一个名叫Thomas Bayes的人物出现。
托马斯·贝叶斯Thomas Bayes(1702-1763)在世时,并不为当时的人们所熟知,很少发表论文或出版著作,与当时学术界的人沟通交流也很少,用现在的话来说,贝叶斯就是活生生一民间学术“屌丝”,可这个“屌丝”最终发表了一篇名为“An essay towards solving a problem in the doctrine of chances”,翻译过来则是:机遇理论中一个问题的解。你可能觉得我要说:这篇论文的发表随机产生轰动效应,从而奠定贝叶斯在学术史上的地位。
这篇论文可以用上面的例子来说明,“有一个袋子,里面装着若干个白球和黑球,请问从袋子中取得白球的概率θ是多少?”贝叶斯认为取得白球的概率是个不确定的值,因为其中含有机遇的成分。比如,一个朋友创业,你明明知道创业的结果就两种,即要么成功要么失败,但你依然会忍不住去估计他创业成功的几率有多大?你如果对他为人比较了解,而且有方法、思路清晰、有毅力、且能团结周围的人,你会不由自主的估计他创业成功的几率可能在80%以上。这种不同于最开始的“非黑即白、非0即1”的思考方式,便是 贝叶斯式的思考方式。
先简单总结下频率派与贝叶斯派各自不同的思考方式:
贝叶斯派既然把看做是一个随机变量,所以要计算的分布,便得事先知道的无条件分布,即在有样本之前(或观察到X之前),有着怎样的分布呢?
比如往台球桌上扔一个球,这个球落会落在何处呢?如果是不偏不倚的把球抛出去,那么此球落在台球桌上的任一位置都有着相同的机会,即球落在台球桌上某一位置的概率服从均匀分布。这种在实验之前定下的属于基本前提性质的分布称为 先验分布,或着无条件分布 。
其中,先验信息一般来源于经验跟历史资料。比如林丹跟某选手对决,解说一般会根据林丹历次比赛的成绩对此次比赛的胜负做个大致的判断。再比如,某工厂每天都要对产品进行质检,以评估产品的不合格率θ,经过一段时间后便会积累大量的历史资料,这些历史资料便是先验知识,有了这些先验知识,便在决定对一个产品是否需要每天质检时便有了依据,如果以往的历史资料显示,某产品的不合格率只有0.01%,便可视为信得过产品或免检产品,只每月抽检一两次,从而省去大量的人力物力。
而 后验分布 π(θ|X)一般也认为是在给定样本X的情况下的θ条件分布,而使π(θ|X)达到最大的值θMD称为 最大后验估计 ,类似于经典统计学中的 极大似然估计 。
综合起来看,则好比是人类刚开始时对大自然只有少得可怜的先验知识,但随着不断观察、实验获得更多的样本、结果,使得人们对自然界的规律摸得越来越透彻。所以,贝叶斯方法既符合人们日常生活的思考方式,也符合人们认识自然的规律,经过不断的发展,最终占据统计学领域的半壁江山,与经典统计学分庭抗礼。
条件概率 (又称后验概率)就是事件A在另外一个事件B已经发生条件下的发生概率。条件概率表示为P(A|B),读作“在B条件下A的概率”。
比如上图,在同一个样本空间Ω中的事件或者子集A与B,如果随机从Ω中选出的一个元素属于B,那么这个随机选择的元素还属于A的概率就定义为在B的前提下A的条件概率:
联合概率:
边缘概率(先验概率):P(A)或者P(B)
贝叶斯网络(Bayesian network),又称信念网络(Belief Network),或有向无环图模型(directed acyclic graphical model),是一种概率图模型,于1985年由Judea Pearl首先提出。它是一种模拟人类推理过程中因果关系的不确定性处理模型,其网络拓朴结构是一个有向无环图(DAG)。
贝叶斯网络的有向无环图中的节点表示随机变量
它们可以是可观察到的变量,或隐变量、未知参数等。认为有因果关系(或非条件独立)的变量或命题则用箭头来连接。若两个节点间以一个单箭头连接在一起,表示其中一个节点是“因(parents)”,另一个是“果(children)”,两节点就会产生一个条件概率值。
例如,假设节点E直接影响到节点H,即E→H,则用从E指向H的箭头建立结点E到结点H的有向弧(E,H),权值(即连接强度)用条件概率P(H|E)来表示,如下图所示:
简言之,把某个研究系统中涉及的随机变量,根据是否条件独立绘制在一个有向图中,就形成了贝叶斯网络。其主要用来描述随机变量之间的条件依赖,用圈表示随机变量(random variables),用箭头表示条件依赖(conditional dependencies)。
此外,对于任意的随机变量,其联合概率可由各自的局部条件概率分布相乘而得出:
1. head-to-head
依上图,所以有:P(a,b,c) = P(a) P(b) P(c|a,b)成立,即在c未知的条件下,a、b被阻断(blocked),是独立的,称之为head-to-head条件独立。
2. tail-to-tail
考虑c未知,跟c已知这两种情况:
3. head-to-tail
还是分c未知跟c已知这两种情况:
wikipedia上是这样定义因子图的:将一个具有多变量的全局函数因子分解,得到几个局部函数的乘积,以此为基础得到的一个双向图叫做因子图(Factor Graph)。
通俗来讲,所谓因子图就是对函数进行因子分解得到的 一种概率图 。一般内含两种节点:变量节点和函数节点。我们知道,一个全局函数通过因式分解能够分解为多个局部函数的乘积,这些局部函数和对应的变量关系就体现在因子图上。
举个例子,现在有一个全局函数,其因式分解方程为:
其中fA,fB,fC,fD,fE为各函数,表示变量之间的关系,可以是条件概率也可以是其他关系。其对应的因子图为:
在概率图中,求某个变量的边缘分布是常见的问题。这问题有很多求解方法,其中之一就是把贝叶斯网络或马尔科夫随机场转换成因子图,然后用sum-proct算法求解。换言之,基于因子图可以用 sum-proct 算法 高效的求各个变量的边缘分布。
详细的sum-proct算法过程,请查看博文: 从贝叶斯方法谈到贝叶斯网络
朴素贝叶斯(Naive Bayesian)是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法。朴素贝叶斯原理简单,也很容易实现,多用于文本分类,比如垃圾邮件过滤。**朴素贝叶斯可以看做是贝叶斯网络的特殊情况:即该网络中无边,各个节点都是独立的。 **
朴素贝叶斯朴素在哪里呢? —— 两个假设 :
贝叶斯公式如下:
下面以一个例子来解释朴素贝叶斯,给定数据如下:
现在给我们的问题是,如果一对男女朋友,男生想女生求婚,男生的四个特点分别是不帅,性格不好,身高矮,不上进,请你判断一下女生是嫁还是不嫁?
这是一个典型的分类问题,转为数学问题就是比较p(嫁|(不帅、性格不好、身高矮、不上进))与p(不嫁|(不帅、性格不好、身高矮、不上进))的概率,谁的概率大,我就能给出嫁或者不嫁的答案!这里我们联系到朴素贝叶斯公式:
我们需要求p(嫁|(不帅、性格不好、身高矮、不上进),这是我们不知道的,但是通过朴素贝叶斯公式可以转化为好求的三个量,这三个变量都能通过统计的方法求得。
等等,为什么这个成立呢?学过概率论的同学可能有感觉了,这个等式成立的条件需要特征之间相互独立吧!对的!这也就是为什么朴素贝叶斯分类有朴素一词的来源,朴素贝叶斯算法是假设各个特征之间相互独立,那么这个等式就成立了!
但是为什么需要假设特征之间相互独立呢?
根据上面俩个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
朴素贝叶斯优点 :
朴素贝叶斯缺点 :
理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。
朴素贝叶斯模型(Naive Bayesian Model)的 朴素(Naive)的含义是"很简单很天真" 地假设样本特征彼此独立. 这个假设现实中基本上不存在, 但特征相关性很小的实际情况还是很多的, 所以这个模型仍然能够工作得很好。
新闻分类 GitHub: 点击进入
【 机器学习通俗易懂系列文章 】
从贝叶斯方法谈到贝叶斯网络
⑩ 如何用matlab计算贝叶斯公式
贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。也就是说,贝叶斯分类器是最小错误率意义上的优化,它遵循“多数占优”这一基本原则。一、分类器的基本概念经过了一个阶段的模式识别学习,对于模式和模式类的概念有一个基本的了解,并尝试使用MATLAB实现一些模式类的生成。而接下来如何对这些模式进行分类成为了学习的第二个重点。这就需要用到分类器。 表述模式分类器的方式有很多种,其中用的最多的是一种判别函数的形式,如果对于所有的j≠i,有: 则此分类器将这个特征向量x判为ωi类。因此,此分类器可视为计算c个判别函数并选取与最大判别值对应的类别的网络或机器。一种分类器的网络结构如下图所示:二、贝叶斯分类器一个贝叶斯分类器可以简单自然地表示成以上网络结构。贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。在具有模式的完整统计知识条件下,按照贝叶斯决策理论进行设计的一种最优分类器。分类器是对每一个输入模式赋予一个类别名称的软件或硬件装置,而贝叶斯分类器是各种分类器中分类错误概率最小或者在预先给定代价的情况下平均风险最小的分类器。它的设计方法是一种最基本的统计分类方法。对于贝叶斯分类器,其判别函数的选择并不是唯一的,我们可以将所有的判别函数乘上相同的正常数或者加上一个相同的常量而不影响其判决结果;在更一般的情况下,如果将每一个gi (x)替换成f(gi (x)),其中f(∙)是一个单调递增函数,其分类的效果不变。特别在对于最小误差率分类,选择下列任何一种函数都可以得到相同的分类结果,但是其中一些比另一些计算更为简便:一个典型的模式识别系统是由特征提取和模式分类两个阶段组成的,而其中模式分类器(Classifier)的性能直接影响整个识别系统的性能。 因此有必要探讨一下如何评价分类器的性能,这是一个长期探索的过程。分类器性能评价方法见:三、基本的Bayes分类器实现这里将在MATLAB中实现一个可以对两类模式样本进行分类的贝叶斯分类器,假设两个模式类的分布均为高斯分布。模式类1的均值矢量m1 = (1, 3),协方差矩阵为S1 =(1.5, 0; 0, 1);模式类2的均值矢量m2 = (3, 1),协方差矩阵为S2 =(1, 0.5; 0.5, 2),两类的先验概率p1 = p2 = 1/2。详细的操作包含以下四个部分:1.首先,编写一个函数,其功能是为若干个模式类生成指定数目的随机样本,这里为两个模式类各生成100个随机样本,并在一幅图中画出这些样本的二维散点图;2.由于每个随机样本均含有两个特征分量,这里先仅仅使用模式集合的其中一个特征分量作为分类特征,对第一步中的200个样本进行分类,统计正确分类的百分比,并在二维图上用不同的颜色画出正确分类和错分的样本;(注:绿色点代表生成第一类的散点,红色代表第二类;绿色圆圈代表被分到第一类的散点,红色代表被分到第二类的散点! 因此,里外颜色不一样的点即被错分的样本。)3.仅用模式的第二个特征分量作为分类特征,重复第二步的操作;4.同时用模式的两个分量作为分类特征,对200个样本进行分类,统计正确分类百分比,并在二维图上用不同的颜色画出正确分类和错分的样本;正确率:可以看到,单单使用一个分类特征进行分类时,错误率较高(多次试验均无法得出较好的分类结果),而增加分类特征的个数是提高正确率的有效手段,当然,这会给算法带来额外的时间代价。四、进一步的Bayes分类器假设分类数据均满足高斯分布的情况下,设计一个判别分类器,实验目的是为了初步了解和设计一个分类器。1.编写一个高斯型的Bayes判别函数GuassianBayesModel( mu,sigma,p,X ),该函数输入为:一给定正态分布的均值mu、协方差矩阵sigma,先验概率p以及模式样本矢量X,输出判别函数的值,其代码如下:2.以下表格给出了三类样本各10个样本点,假设每一类均为正态分布,三个类别的先验概率相等均为P(w1)=P(w2 )=P(w3 )=1/3。计算每一类样本的均值矢量和协方差矩阵,为这三个类别设计一个分类器。3.用第二步中设计的分类器对以下测试点进行分类:(1,2,1),(5,3,2),(0,0,0),并且利用以下公式求出各个测试点与各个类别均值之间的Mahalanobis距离。以下是来自网络的关于马氏距离的解释:马氏距离计算公式:更具体的见: 4.如果P(w1)=0.8, P(w2 )=P(w3 )=0.1,再进行第二步和第三步实验。实验的结果如下:首先是得出三类样本点各自的均值和协方差矩阵:在三个类别的先验概率均为P(w1)=P(w2 )=P(w3 )=1/3时,使用函数进行分类并给出分类结果和各个测试点与各个类别均值之间的Mahalanobis距离。验证当三个类别的先验概率不相等时,同样使用函数进行分类并给出分类结果和各个测试点与各个类别均值之间的Mahalanobis距离。可以看到,在Mahalanobis距离不变的情况下,不同的先验概率对高斯型Bayes分类器的分类结果影响很大~ 事实上,最优判决将偏向于先验概率较大的类别。完整的代码如下由两个函数和主要的执行流程组成:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 产生模式类函数% N:生成散点个数 C:类别个数 d:散点的维数% mu:各类散点的均值矩阵% sigma:各类散点的协方差矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function result = MixGaussian(N, C, d, mu, sigma)color = {'r.', 'g.', 'm.', 'b.', 'k.', 'y.'}; % 用于存放不同类数据的颜色% if nargin <= 3 & N < 0 & C < 1 & d < 1% error('参数太少或参数错误');if d == 1for i = 1 : Cfor j = 1 : N/Cr(j,i) = sqrt(sigma(1,i)) * randn() + mu(1,i);endX = round(mu(1,i)-5);Y = round(mu(1,i) + sqrt(sigma(1,i))+5);b = hist(r(:,i), X:Y);subplot(1,C,i),bar(X:Y, b,'b');title('三类一维随机点的分布直方图');grid onendelseif d == 2for i = 1:Cr(:,:,i) = mvnrnd(mu(:,:,i),sigma(:,:,i),round(N/C));plot(r(:,1,i),r(:,2,i),char(color(i)));hold on;endelseif d == 3for i = 1:Cr(:,:,i) = mvnrnd(mu(:,:,i),sigma(:,:,i),round(N/C));plot3(r(:,1,i),r(:,2,i),r(:,3,i),char(color(i)));hold on;endelse disp('维数只能设置为1,2或3');endresult = r;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 高斯型Bayes判别函数% mu:输入正态分布的均值% sigma:输入正态分布的协方差矩阵% p:输入各类的先验概率% X:输入样本矢量% 输出判别函数值、马氏距离和判别结果%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function GuassianBayesModel( mu,sigma,p,X )% 构建判别函数% 计算点到每个类的Mahalanobis距离for i = 1:3;P(i) = mvnpdf(X, mu(:,:,i), sigma(:,:,i)) * p(i);r(i) = sqrt((X - mu(:,:,i)) * inv(sigma(:,:,i)) * (X - mu(:,:,i))');end% 判断样本属于哪个类的概率最高% 并显示点到每个类的Mahalanobis距离maxP = max(P);style = find(P == maxP);disp(['点[',num2str(X),']关于第一类的判别函数值为:',num2str(P(1))]);disp(['点[',num2str(X),']关于第二类的判别函数值为:',num2str(P(2))]);disp(['点[',num2str(X),']关于第三类的判别函数值为:',num2str(P(3))]);disp(['点[',num2str(X),']到第1类的Mahalanobis距离为:',num2str(r(1))]);disp(['点[',num2str(X),']到第2类的Mahalanobis距离为:',num2str(r(2))]);disp(['点[',num2str(X),']到第3类的Mahalanobis距离为:',num2str(r(3))]);disp(['点[',num2str(X),']属于第',num2str(style),'类']);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%贝叶斯分类器实验主函数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 生成两类各100个散点样本mu(:,:,1) = [1 3]; sigma(:,:,1) = [1.5 0; 0 1];p1 = 1/2;mu(:,:,2) = [3 1]; sigma(:,:,2) = [1 0.5; 0.5 2];p2 = 1/2;% 生成200个二维散点,平分为两类,每类100个aa = MixGaussian(200, 2, 2, mu, sigma);title('两类共200个高斯分布的散点');% 只x分量作为分类特征的分类情况figure;% 正确分类的散点个数right1 = 0;right2 = 0;% 正确率rightRate1 = 0;rightRate2 = 0;for i = 1:100x = aa(i,1,1);plot(aa(:,1,1),aa(:,2,1),'r.');% 计算后验概率P1 = normpdf(x, 1, sqrt(1.5));P2 = normpdf(x, 3, sqrt(1));if P1 > P2plot(aa(i,1,1),aa(i,2,1),'ks');hold on;right1 = right1 + 1;% 统计正确个数elseif P1 < P2plot(aa(i,1,1),aa(i,2,1),'go');hold on;endendrightRate1 = right1 / 100; % 正确率for i = 1:100x = aa(i,1,2);plot(aa(:,1,2),aa(:,2,2),'g.');% 计算后验概率P1 = normpdf(x, 1, sqrt(1.5));P2 = normpdf(x, 3, sqrt(1));if P1 > P2plot(aa(i,1,2),aa(i,2,2),'ks');hold on;elseif P1 < P2plot(aa(i,1,2),aa(i,2,2),'go');hold on;right2 = right2 + 1; % 统计正确个数endendrightRate2 = right2 / 100;title('使用第一个分类特征的分类结果');disp(['只用第一个特征时,第一类分类的准确率为:',num2str(rightRate1*100),'%']);disp(['只用第一个特征时,第二类分类的准确率为:',num2str(rightRate2*100),'%']);% 只使用y分量的分类特征的分类情况figure;% 正确分类的散点个数right1 = 0;right2 = 0;% 正确率rightRate1 = 0;rightRate2 = 0;for i = 1:100y = aa(i,2,1);plot(aa(:,1,1),aa(:,2,1),'r.');% 计算后验概率P1 = normpdf(y, 3, sqrt(1));P2 = normpdf(y, 1, sqrt(2));if P1 > P2plot(aa(i,1,1),aa(i,2,1),'ks');hold on;right1 = right1 + 1; % 统计正确个数elseif P1 < P2plot(aa(i,1,1),aa(i,2,1),'go');hold on;endendrightRate1 = right1 / 100; % 正确率for i = 1:100y = aa(i,2,2);plot(aa(:,1,2),aa(:,2,2),'g.');% 计算后验概率P1 = normpdf(y, 3, sqrt(1));P2 = normpdf(y, 1, sqrt(2));if P1 > P2plot(aa(i,1,2),aa(i,2,2),'ks');hold on;elseif P1 < P2plot(aa(i,1,2),aa(i,2,2),'go');hold on;right2 = right2 + 1; % 统计正确个数endendrightRate2 = right2 / 100; % 正确率title('使用第二个分类特征的分类结果');disp(['只用第二个特征时,第一类分类的准确率为:',num2str(rightRate1*100),'%']);disp(['只用第二个特征时,第二类分类的准确率为:',num2str(rightRate2*100),'%']);% 同时使用两个分类特征的分类情况figure;% 正确分类的散点个数right1 = 0;right2 = 0;% 正确率rightRate1 = 0;rightRate2 = 0;for i = 1:100x = aa(i,1,1);y = aa(i,2,1);plot(aa(:,1,1),aa(:,2,1),'r.');% 计算后验概率P1 = mvnpdf([x,y], mu(:,:,1), sigma(:,:,1));P2 = mvnpdf([x,y], mu(:,:,2), sigma(:,:,2));if P1 > P2plot(aa(i,1,1),aa(i,2,1),'ks');hold on;right1 = right1 + 1;else if P1 < P2plot(aa(i,1,1),aa(i,2,1),'go');hold on;endendendrightRate1 = right1 / 100;for i = 1:100x = aa(i,1,2);y = aa(i,2,2);plot(aa(:,1,2),aa(:,2,2),'g.');% 计算后验概率P1 = mvnpdf([x,y], mu(:,:,1), sigma(:,:,1));P2 = mvnpdf([x,y], mu(:,:,2), sigma(:,:,2));if P1 > P2plot(aa(i,1,2),aa(i,2,2),'ks');hold on;else if P1 < P2plot(aa(i,1,2),aa(i,2,2),'go');hold on;right2 = right2 + 1;endendendrightRate2 = right2 / 100;title('使用两个分类特征的分类结果');disp(['同时使用两个特征时,第一类分类的准确率为:',num2str(rightRate1*100),'%']);disp(['同时使用两个特征时,第二类分类的准确率为:',num2str(rightRate2*100),'%']);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 进一步的Bayes分类器%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% w1,w2,w3三类散点w = zeros(10,3,3);w(:,:,1) = [-5.01 -8.12 -3.68;...-5.43 -3.48 -3.54;...1.08 -5.52 1.66;...0.86 -3.78 -4.11;...-2.67 0.63 7.39;...4.94 3.29 2.08;...-2.51 2.09 -2.59;...-2.25 -2.13 -6.94;...5.56 2.86 -2.26;...1.03 -3.33 4.33];w(:,:,2) = [-0.91 -0.18 -0.05;...1.30 -.206 -3.53;...-7.75 -4.54 -0.95;...-5.47 0.50 3.92;...6.14 5.72 -4.85;...3.60 1.26 4.36;...5.37 -4.63 -3.65;...7.18 1.46 -6.66;...-7.39 1.17 6.30;...-7.50 -6.32 -0.31];w(:,:,3) = [ 5.35 2.26 8.13;...5.12 3.22 -2.66;...-1.34 -5.31 -9.87;...4.48 3.42 5.19;...7.11 2.39 9.21;...7.17 4.33 -0.98;...5.75 3.97 6.65;...0.77 0.27 2.41;...0.90 -0.43 -8.71;...3.52 -0.36 6.43];% 均值mu1(:,:,1) = sum(w(:,:,1)) ./ 10;mu1(:,:,2) = sum(w(:,:,2)) ./ 10;mu1(:,:,3) = sum(w(:,:,3)) ./ 10;% 协方差矩阵sigma1(:,:,1) = cov(w(:,:,1));sigma1(:,:,2) = cov(w(:,:,2));sigma1(:,:,3) = cov(w(:,:,3));% 各类别的先验概率% p(1) = 1/3;% p(2) = 1/3;% p(3) = 1/3;p(1) = 0.8;p(2) = 0.1;p(3) = 0.1;% 样本矢量X = [1 0 0];% 调用高斯型Bayes判别函数,输出判别函数值、马氏距离和判别结果GuassianBayesModel(mu1,sigma1,p,X);