模式识别+Matlab 最大似然分类(MLC)【贝叶斯(Bayes)分类法】

最近(2020/6/14)模式识别课程 老师让用最大似然分类法对一个遥感影像进行分类,在CSDN 上有很多大佬都写过类似的文章,本人阅读之后,犹如醍醐灌顶,对这些大佬们的钦佩之情犹如绵绵江水滔滔不绝。此篇博客就简单记录一下 这段时间对MLC 的学习,希望可以帮助到大家。


一、预备知识

关于MLC,百度百科 中,最大似然分类(MaximumLikelihood Classification )被定义为 在两类或多类判决中,用统计方法根据最大似然比贝叶斯判决准则法建立非线性判别函数集,假定各类分布函数为正态分布,并选择训练区,计算各待分类样区的归属概率,而进行分类的一种图像分类方法。 其又称为贝叶斯(Bayes)分类法,是根据Bayes准则对遥感影像进行分类的。

1. 一篇大佬的博客

下面是 liangdas(CSDN博主)对MLC 的一些介绍,我觉得挺好的,就摘抄下来了,其中缺失部分也做了一些补充。

原文链接:https://blog.csdn.net/liangdas/article/details/19294951

前言:

最小距离分类法只考虑了待分类样本到各个类别中心的距离,而没有考虑已知样本的分布,所以它的分类速度快,但精度不高。今天要介绍的是另外一种分类方法——最大似然分类法,它也是分类里面用得很多的一种分类方法,它在分类的时候,不仅考虑了待分类样本到已知类别中心的距离,而且还考虑了已知类别的分布特征,所以其分类精度比最小距离分类法要高。

下面有一个图,黄色所示类别A的分布,蓝色是类别B的分布,类别A和B的类别中心都红色的点表示出来了,那么有一个未知类别的样本p,假设p到类别A的距离是Ap,到类别B的距离是Bp,现在Ap=Bp,那么如果用最小距离分类法,我们是不能判断样本p到底是属于A类还是B类的,所以这就是最小距离分类法的局限性。
在这里插入图片描述

感性认识:

假设在我们读书的时候,在一个月内,30天,你发现晚上11点以后实验室还亮着灯,你很好奇,每次推门进去,发现这30天内,实验室中不是甲就是乙,或者他们同时都在,你做了统计,是甲的天数是28天,是乙的次数是4天,然后有一天晚上11点,你发现实验室的灯又亮了,你同学问你:“你猜现在是谁在实验室呀?”,你会回答“应该是甲吧”。这其实就是生活中我们利用最大似然来分类的一个例子。

另外一个例子:现在我们有两个盒子:甲和乙,每个里面都装了100个球,其中甲中装了95个红球,5个黑球,乙中装了60个红球,40个黑球,现在有人从盒子里面取出了一个球,发现是红球,然后让你猜:“他是从哪个盒子里面取出来的?”,想必你会猜“甲”吧。

好了,其实我们生活中,已经对最大似然估计有了自己的经验体会,是不是还没有意识到它就是最大似然分类法呢?呵呵。(不是我呵呵的)

基本原理:

假设有两个事件A,B,我们通过先验的知识,知道A发生的条件下,x也发生的概率是P(x|A); B发生的条件下,x也发生的概率是P(X|B),那么,现在有一个事件x发生了,我们能否判断这个事件x是在A条件下,还是在B条件下发生的可能性大些呢?也就是要求出P(A|x)和P(B|x)哪一个最大?对分类问题而言,哪一个概率大,我们就说x属于哪一类。

我们回忆下贝叶斯公式:P(A|B)=P(B|A)*P(A)/P(B)

从贝叶斯公式中我们可以看到,求概率P(A|B)的问题转化成了求P(B|A),P(A)和P(B)的问题,其实里面真正的精华是:概率P(A|B)和P(B|A)的转换。因为通常,我们事先能知道P(A),P(B);或者是P(A)和P(B)在分类问题中是公共的项,可以约去;再或是他们的差异可以忽略不计,所以,要P(A|B)最大,也就是要P(B|A)最大!而对于P(B|A),我们可以从事先已经发生的事件中,通过统计等数学方法计算得到,这样这个分类问题就好解了!我们可以提炼下面的目标函数:
在这里插入图片描述
贝叶斯公式的经典之处就是将后验概率的问题转化成了先验概率的问题!

再回到上面的盒子和白球的问题中,A和B分别代表盒子甲和乙,事件x就是红球发生的概率,我们先验已经知道P(x|A)= 95/100=0.95,P(x|B)=60/100=0.6,我们要求的是P(A|x)和P(B|x),然后比较哪个最大?

P(A|x)= P(A)*P(x|A)/P(x)
P(B|x)= P(B)*P(x|B)/P(x)

对于P(A), P(B),因为我们目前总共只有两个盒子甲和乙,也就是A和B,它们各有一个,所以P(A)=P(B)=1/2=0.5。

对于P(x),因为P(A|x)和P(B|x)的贝叶斯表达式中都有P(x)这一项,所以,P(x)作为公共项,我们可以不考虑。如果硬是想知道它的值,那么因为是随机取一个球,P(x)=(95+60)/(100+100)。
这样我们就可以轻松的知道P(A|x)大,还是P(B|x)大了。
最大似然分类又叫贝叶斯分类。

N 维空间的最大似然分类法原理:

上面的例子中, x都是二项分布的,也就是x的取值只取两个值,通常为0,1,发生或者不发生等,但是在实际问题中,x往往不是服从这么一个简单的二项分布,而很有可能是其他更复杂一些的分布。

在统计学和模式识别中,对某一个待研究的集合,在经验的基础上,我们通常假设它是一个服从正太分布的变量集合,如一群人的身高、某各班级某一科目的考试成绩、某个类别的某一维特征,我们都假定它是服从正态分布的,也叫高斯分布,即用均值 μ \mu μ,和方差 σ \sigma σ来描述的一组样本分布。对一维正态分布,其定义为:

若随机变量 X X X 服从一个位置参数为 μ \mu μ、尺度参数为 σ \sigma σ 的正态分布,记为: X ∼ N ( μ , σ 2 ) X \sim N( \mu , \sigma^2 ) XN(μ,σ2)

则其概率密度函数为 f ( x ) = 1 σ 2 π    e − ( x − μ ) 2 2 σ 2  ⁣ {\displaystyle f(x)={\frac {1}{\sigma {\sqrt {2\pi }}}}\;e^{-{\frac {\left(x-\mu \right)^{2}}{2\sigma ^{2}}}}\!} f(x)=σ2π 1e2σ2(xμ)2

其含义为:变量 x 在此正态分布中出现的概率。

通常,为了描述某一个对象,我们会从这个对象抽象出多个属性,每一个属性代表一个一维空间,多个属性就组成一个多维空间。对于多维空间的中的变量,它也有其正态分布的概率密度函数:(大佬的博客中,这部分有些内容缺失了,我按我的理解补充一下,有可能不是大佬本意)
在这里插入图片描述
上面已经指出了,最大似然分类的目标函数是:
在这里插入图片描述
p(Ci) 通常可以根据已知条件计算得到,或者其区别可以忽略不计。
p(x) 是公共项,所以不用考虑其具体的值。

N 维空间的最大似然分类法的化简:

在这里插入图片描述

2. 一些基础概念

学了模式识别,我都学到了啥?下面列的一些概念是这门课程中涉及到的,有可能与本篇博文讲的东西关联性不是很强。(本来想一下写到这里的,可后来发现要点太多,就另开了一篇博客。)

https://blog.csdn.net/Gou_Hailong/article/details/106747589

有一点,我觉得有必要单独列出来:

模式识别系统设计 / 评价过程
系统评价原则: 为了更好地对模式识别系统性能进行评价,必须使用一组独立于训练集的测试集对系统进行测试。

训练集: 是一个已知样本集,在监督学习方法中,用它来开发出模式分类器。

测试集: 在设计识别和分类系统时没有用过的独立样本集。
在这里插入图片描述

二、着手编程

前面已经提到,最大似然分类又称 Bayes 分类法,是根据 Bayes 则对遥感影像进行分类的。其具体内容是什么呢?请看下面原理部分,我们从头开始。

1. 原理

最大似然分类法将卫星遥感多波段数据的分布当作多维正态分布来构造判别分类函数。其基本思想是:各类的已知像元的数据在平面或空间中构成一定的点群;每一类的每一维数据在自己的数轴上形成一个正态分布,该类的多维数据就构成该类的一个多维正态分布,有了各类的多维分布模型,对于任何一个未知类别的数据向量,都可反过来求它属于各类的概率;比较这些概率的大小,看属于哪一类的概率大,就把这个数据向量或这个像元归为该类。

基于该基本思想,我们有如下步骤(由于这里用到的数据有可能不是各位人手都有的,所以权当我抛砖引玉,这里就当是看一个对遥感影像进行分类的例子吧):

首先先介绍一下实验数据:实验数据是 191 Band Hyperspectral Image: HYDICE image of Washington DC Mall (Dcmall),测试数据集,训练数据集。也就是一张191波段的 16位 的高光谱图像,还有两个已经分类好的数据集,所以大家应该知道我为什么要把“模式识别系统设计 / 评价过程”在上面单独列出来了吧😜

1.用 训练数据集 将各类的 类概率密度函数 确定下来。训练数据集中数据被分为了5类:训练grass116.txt、训练path50.txt、训练road110.txt、训练roof431.txt、训练tree49.txt 都被保存在如上的 txt 文件当中,其中后面的数字代表有多少个像素点。

(这里要吐槽一下,本来想直接在这里插公式的,但是看了好多篇博客,从Mathtype 复制粘贴了好多次都没有成功,最终我还是放弃了,有朋友知道怎么解决的 还请指点迷津)

在这里插入图片描述

2. 编程日志

6.14 开始准备相关事宜

6.15 将最大似然法的思路捋顺

6.16 因为matlab基础不牢,求方差卡脖子,费了一下午时间搞清楚了,并发现了之前思路里边的一个小错误:

https://blog.csdn.net/Gou_Hailong/article/details/106788580

6.17 【上午】发现之前想做191个波段的分类完全是异想天开,因为算出来的协方差矩阵太nm离谱 大到没边儿了(求判别函数都是inf)。猜想训练数据集的获得也并不是将191个波段完全考虑的,所以决定用各类方差都比较小的188、190、191这三个波段进行分类。【下午】憨憨,还没归一化。但是归一化之后分类结果都是归成了一类,怎么解?

6.18 今天找到了原因,原来是我个铁憨憨没有改变待分类样本的数据,一直都是对第一个像素点进行的判别。今天没有编程,先写了写论文,洋洋给我了一些启发:用测试样本集计算混淆矩阵来评定其精度,开篇博文介绍了一下混淆矩阵:

https://blog.csdn.net/Gou_Hailong/article/details/106842879

6.19 今天有巨大的突破,多亏了洋洋。混淆矩阵顺利成章做出来了,和洋洋的结果差不多。我想说的大突破是找到了可以表示分类结果的方法:以不同的颜色代表不同的类别,然后按像素点所在的位置将其染色。前提条件是了解怎么用Matlab 来画图(这个画图不是画数学函数曲线,是那种画画),方法加到了之前写的一个博客当中:

https://blog.csdn.net/Gou_Hailong/article/details/106242250

6.20 今天就是扫尾工作了,K 均值法之前写过,只不过将 2 维变 n 维就好了。n维算法也已经补充到了博客:

https://blog.csdn.net/Gou_Hailong/article/details/106027047

3. 源码

慎重考虑,我决定还是不提供源码了,我怕之后有学弟学妹们偷懒+蜂蜜毒药+老师找我喝茶 😨 😨 😨
在这里插入图片描述
为了下次看代码方便,我还是上传一张结构图吧。
在这里插入图片描述

引用/参考 文章

[1] liangdas-CSDN博主:https://blog.csdn.net/liangdas/article/details/19294951
[2] 百度文库:https://wenku.baidu.com/view/12a5de46a8956bec0975e364.html
MATLAB模式识别实现指标分类评估预测如环境业绩等-Training_NPR.m 最近看到很多会员需要使用MATLAB神经网络做如下的事情: 1:MATLAB神经网络对水的质量的分类、评估、预测 (属于环境类分类、评估预测) 2:MATLAB神经网络对空气质量的分类、评估、预测 (属于环境类分类、评估预测) 2:MATLAB神经网络对土壤质量的分类、评估、预测 (属于环境类分类、评估预测) 3:MATLAB神经网络对学员的个人表现进行分类、评估、预测 (属于个人业绩鉴定) 4:MATLAB神经网络对医学、生物学上的细胞、疾病等分类、评估等(属于医学、生物学) 5:MATLAB神经网络对交通、物流等效率方面的分类、评估、预测等(属于交通、物流管理) 6:MATLAB神经网络用于故障诊断 7:概括来讲,就是使用神经网络对某些指标(如空气质量、水质量、个人业绩等)进行“有限”的分类、预测、评价等。 在这里,我特别强调“有限”两个字,因为这正是模式识别工具箱可以解决的问题。我看到很多会员使用不同的神经网络(如模糊识别,RBF, SVM等)。根据我多年的使用经验,其实基于多层BP网络的模式识别是最容易实现、效果非常满意、且结果非常具有说服力。很多会员没有掌握模式识别的精髓,或者网络训练好以后不知道如何评估、使用等。现在我用一个完整的例子来给大家展示一下它的优点。 不知道什么是模式识别,什么是BP网络的会员,请先看一下这个视频:MATLAB模式识别工具箱视频教学 用MATLAB模式识别工具箱(函数)来对某些指标(如空气质量、水质量、个人业绩等)进行分类、评估、预测,分为三步: 数据准备训练和评估预测 下面我来一步一步讲解,先谈数据的准备: 确保输入数据(包括训练以及将来要预测的数据)在比较接近的范围里(归一化是其中一种方式)。 这一个步骤不仅仅是在模式识别里,其实在任何一种网络里,这一步都是必须的。比如说你有400组数据,每组数据对应一个中国县城的空气质量。假设每组数据含有6个指标(称之为A,B,C,D,E,F,G), 如果数据A的范围是10^5-10^7, F的范围是0.1-0.5, 如果用这些数据来训练,很容易导致网络的权重也有同样的数量级的差别,结果是你的网络会非常的“敏感”(可以想象一下,如果F对应的权重是10^10,那么即使F稍微变化一下,都有可能导致网络的输出结果不同。而有时候这样的敏感度并不是你想要的,你可以对数据进行归一化处理,把数据都转换到0-1的区间内。 MATLAB模式识别工具箱可以自动对输入数据进行归一化处理,所以你只要明白这个过程,但是并不需要你额外写程序来处理这些数据。对输出数据进行二进制量化 通常情况下,用于测试的输入数据所对应的输出数据不是量化数据,比如说:优、良,或者是一级、二级等等。那么通常我们用二进制来表达,两位数字的二进制可以表示3类(01,10,11),三位数字的二进制可以表示7类(001,010,011,100,101,110,111,通常我们不使用000)。二进制的顺序不重要,比如说优可以对应001,也可以用010来表示。 经过简单处理,输入数据和新添加的二进制输入数据如下图所示: 神经网络——输入数据模式识别.png MATLAB模式识别实现指标分类、评估、预测 原始训练数据下载: training_data.xls MATLAB模式识别实现指标分类、评估、预测 把数据导入到MATLAB程序里close all clear all clc x=xlsread; y=xlsread; inputs = x'; targets = y';复制代码 我们再谈谈网络的训练和评估: 你可以使用MATLAB自带的模式识别工具箱界面来导入数据、调整参数等,然后得到结果。我通常第一次这样使用,得到一个基础架构以后,然后生成m代码,再在代码上修改。这里我演示给大家,如果通过程序来实现。下面是用来做模式识别的代码(工具箱产生的函数): % 创建一个模式识别网络(两层BP网络),同时给出中间层神经元的个数,这里使用20 hiddenLayerSize = 20; net = patternnet; % 对数据进行预处理,这里使用了归一化函数(一般不用修改) % For a list of all processing functions type: help nnprocess net.inputs{1}.processFcns = {'removeconstantrows','mapminmax'}; net.outp
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值