朴素贝叶斯分类器与Fisher线性判别实践——水果识别为例( 三 )

< RDN <= 51:rj = 0elif 51 < RDN <= 103:rj = 1elif 103 < RDN <= 155:rj = 2elif 155 < RDN <= 207:rj = 3else:rj = 4# g标识if 0 < GDN <= 51:gj = 5elif 51 < GDN <= 103:gj = 6elif 103 < GDN <= 155:gj = 7elif 155 < GDN <= 207:gj = 8else:gj = 9# b标识if 0 < BDN <= 51:bj = 10elif 51 < BDN <= 103:bj = 11elif 103 < BDN <= 155:bj = 12elif 155 < BDN <= 207:bj = 13else:bj = 14# 开始计算后验概率PB = []app = ST[0][rj] * ST[0][gj] * ST[0][bj] * py[0]bap = ST[1][rj] * ST[1][gj] * ST[1][bj] * py[1]lep = ST[2][rj] * ST[2][gj] * ST[2][bj] * py[2]kip = ST[3][rj] * ST[3][gj] * ST[3][bj] * py[3]PB.append(app)PB.append(bap)PB.append(lep)PB.append(kip)maxv = max(PB)maxIdex = PB.index(maxv)# 打标签biaoqian = ""if maxIdex == 0:biaoqian = "苹果"elif maxIdex == 1:biaoqian = "香蕉"elif maxIdex == 2:biaoqian = "柠檬"else:biaoqian = "猕猴桃"# 显示print(biaoqian)# 例子1 D:\\ThirdGhomework\\classification\\BayesTest\\apple1.JPG# 例子2 D:\\ThirdGhomework\\classification\\BayesSamples\\apple7.jpg
五、实验结果
图七 朴素Bayes分类结果
图八线性判别的拉格朗日极值法和梯度下降分类结果
六、实验分析
(一)朴素贝叶斯
个人编写的朴素贝叶斯分类测试准确率在高亮度测试样本中准确率还可以 , 但是其在提供的测试样本集中准确率很低 。显然 , 造成朴素贝叶斯分类结果较差的原因有很多 , 通过分析 , 我认为主要有如下几点:
1、算法是以统计0-254的五段分段区间的DN值统计来构造先验概率查询表的 , 而且我的想法认为如果均值落于五段中的一段 , 那么其数据也应该基本落于该段(未考虑边缘处) , 此处是明显缺少数学理论支撑的 , 只能感性认识;
2、DN值受到拍摄角度、拍摄曝光等影响较大 , 导致其固定区间无法具有推广性;
3、朴素贝叶斯的原理就是大量样本的特征统计 , 然而我的样本量很少同时质量也较低 。
最后 , 个人编写的朴素贝叶斯代码效率较低 , 其实里面可以有更多的计算改进地方 。
(二)线性判别
线性判别的结果较好 , 梯度下降法和拉格朗日极值法测试正确率均可达到100%(显然这是由于测试样本过少的原因) , 但是由于梯度下降法它具有一个函数收敛过程 , 因此其耗时较长一点 。通过对比朴素贝叶斯 , 我比较疑惑为什么线性判别具有更好的克服光照条件、拍摄角度不一致的能力?很幸运的是 , 我在学习《定量遥感》的课程中也恰巧分到了“基于小样本分类”的选题 。通过学习 , 我了解了距离判别和线性判别分类器对小样本的分类具有较为不错的准确率 , 同时其可迁移性较高 , 普适性较强(后续还需要学习更多的相关知识) 。
七、感悟与收获
(一)在工程数学应用中 , 在我们解求某个目标时 , 我们可以进行一些合理的假设与非严谨完整的数学推理以获得我们的目标即可 。在本次线性二分类判别应用中 , 由于我们关注的只是投影方向 , 因此我们对w的模并不关注 , 对其进行了一定的限定假设 , 由此 , 我们虽然未完全严格求解拉格朗日极值法 , 但是我们得到了我们想要的向量w的方向 , 极大的省略了不必要的计算 。
【朴素贝叶斯分类器与Fisher线性判别实践——水果识别为例】(二)对于极值问题 , 当条件适合时 , 对求极大值转化为求其负值的极小值可能会有一定的简化帮助 , 降低极值求解难度 。