几种常见的模式识别算法整理和总结
这学期选了门模式识别的课。发现最常见的一种情况就是,书上写的老师ppt上写的都看不懂,然后绕了一大圈去自己查资料理解,回头看看发现,Ah-ha,原来本质的原理那么简单,自己一开始只不过被那些看似formidable的细节吓到了。所以在这里把自己所学的一些点记录下来,供备忘,也供参考。
1. K-Nearest Neighbor
K-NN可以说是一种最直接的用来分类未知数据的方法。基本通过下面这张图跟文字说明就可以明白K-NN是干什么的
简单来说,K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。一个比较好的介绍k-NN的课件可以见下面链接,图文并茂,我当时一看就懂了
http://courses.cs.tamu.edu/rgutier/cs790_w02/l8.pdf
实际上K-NN本身的运算量是相当大的,因为数据的维数往往不止2维,而且训练数据库越大,所求的样本间距离就越多。就拿我们course project的人脸检测来说,输入向量的维数是1024维(32x32的图,当然我觉得这种方法比较silly),训练数据有上千个,所以每次求距离(这里用的是欧式距离,就是我们最常用的平方和开根号求距法) 这样每个点的归类都要花上上百万次的计算。所以现在比较常用的一种方法就是kd-tree。也就是把整个输入空间划分成很多很多小子区域,然后根据临近的原则把它们组织为树形结构。然后搜索最近K个点的时候就不用全盘比较而只要比较临近几个子区域的训练数据就行了。kd-tree的一个比较好的课件可以见下面链接:
http://www.inf.ed.ac.uk/teaching/courses/inf2b/learnnotes/inf2b-learn06-lec.pdf
http://www.math.ucsd.edu/~gptesler/283/pca_07-handout.pdf
4. Linear Discriminant Analysis
LDA,基本和PCA是一对双生子,它们之间的区别就是PCA是一种unsupervised的映射方法而LDA是一种supervised映射方法,这一点可以从下图中一个2D的例子简单看出
图的左边是PCA,它所作的只是将整组数据整体映射到最方便表示这组数据的坐标轴上,映射时没有利用任何数据内部的分类信息。因此,虽然做了PCA后,整组数据在表示上更加方便(降低了维数并将信息损失降到最低),但在分类上也许会变得更加困难;图的右边是LDA,可以明显看出,在增加了分类信息之后,两组输入映射到了另外一个坐标轴上,有了这样一个映射,两组数据之间的就变得更易区分了(在低维上就可以区分,减少了很大的运算量)。
在实际应用中,最常用的一种LDA方法叫作Fisher Linear Discriminant,其简要原理就是求取一个线性变换,是的样本数据中“between classes scatter matrix”(不同类数据间的协方差矩阵)和“within classes scatter matrix”(同一类数据内部的各个数据间协方差矩阵)之比的达到最大。关于Fisher LDA更具体的内容可以见下面课件,写的很不错~
http://www.csd.uwo.ca/~olga/Courses//CS434a_541a//Lecture8.pdf
5. Non-negative Matrix Factorization
NMF,中文译为非负矩阵分解。一篇比较不错的NMF中文介绍文可以见下面一篇博文的链接,《非负矩阵分解:数学的奇妙力量》
http://chnfyn.blog.163.com/blog/static/26954632200751625243295/
这篇博文很大概地介绍了一下NMF的来龙去脉(当然里面那幅图是错的。。。),当然如果你想更深入地了解NMF的话,可以参考Lee和Seung当年发表在Nature上面的NMF原文,"Learning the parts of objects by non-negative matrix factorization"
http://www.seas.upenn.edu/~ddlee/Papers/nmf.pdf
读了这篇论文,基本其他任何介绍NMF基本方法的材料都是浮云了。
NMF,简而言之,就是给定一个非负矩阵V,我们寻找另外两个非负矩阵W和H来分解它,使得后W和H的乘积是V。论文中所提到的最简单的方法,就是根据最小化||V-WH||的要求,通过Gradient Discent推导出一个update rule,然后再对其中的每个元素进行迭代,最后得到最小值,具体的update rule见下图,注意其中Wia等带下标的符号表示的是矩阵里的元素,而非代表整个矩阵,当年在这个上面绕了好久。。
当然上面所提的方法只是其中一种而已,在http://spinner.cofc.edu/~langvillea/NISS-NMF.pdf中有更多详细方法的介绍。
相比于PCA、LDA,NMF有个明显的好处就是它的非负,因为为在很多情况下带有负号的运算算起来都不这么方便,但是它也有一个问题就是NMF分解出来的结果不像PCA和LDA一样是恒定的。
6. Gaussian Mixture Model
GMM高斯混合模型粗看上去跟上文所提的贝叶斯分类器有点类似,但两者的方法有很大的不同。在贝叶斯分类器中,我们已经事先知道了训练数据(training set)的分类信息,因此只要根据对应的均值和协方差矩阵拟合一个高斯分布即可。而在GMM中,我们除了数据的信息,对数据的分类一无所知,因此,在运算时我们不仅需要估算每个数据的分类,还要估算这些估算后数据分类的均值和协方差矩阵。。。也就是说如果有1000个训练数据10租分类的话,需要求的未知数是1000+10+10(用未知数表示未必确切,确切的说是1000个1x10标志向量,10个与训练数据同维的平均向量,10个与训练数据同维的方阵)。。。反正想想都是很头大的事情。。。那么这个问题是怎么解决的呢?
这里用的是一种叫EM迭代的方法。
具体使用方法可以参考http://neural.cs.nthu.edu.tw/jang/books/dcpr/doc/08gmm.pdf 这份台湾清华大学的课件,写的真是相当的赞,实现代码的话可以参考:
1. 倩倩的博客http://www.cnblogs.com/jill_new/archive/2010/12/01/1893851.html 和
2. http://www.cs.ru.nl/~ali/EM.m
当然 Matlab里一般也会自带GMM工具箱,其用法可以参考下面链接:
http://www.mathworks.com/help/toolbox/stats/gmdistribution.fit.html
几种常见的模式识别算法整理和总结相关推荐
- 几种常见的模式识别算法
2019独角兽企业重金招聘Python工程师标准>>> 1. K-Nearest Neighbor K-NN可以说是一种最直接的用来分类未知数据的方法.基本通过下面这张图跟文字说明就 ...
- c语言大小排序算法,七种常见的数组排序算法整理(C语言版本)
---C语言版本--- 冒泡排序 选择排序 直接插入排序 二分插入排序 希尔排序 快速排序 堆排序 #define EXCHANGE(num1, num2) { num1 = num1 ^ num2; ...
- 常见数据结构与算法整理总结(下)
原文链接:https://www.jianshu.com/p/42f81846c0fb 这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算 ...
- 完整性校验用到常见的算法_几种常见的校验算法
素材来源:网络 编辑整理:strongerHuang UART有一个奇偶校验,CAN通信有CRC校验.Modbus.MAVlink.USB等通信协议也有校验信息. 在自定义数据存储时,有经验的工程师都 ...
- 几种常见的排序方法整理
几种常见的排序方法整理 一.直接插入排序 插入排序是一种简单直观的排序算法.通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在从后向前扫描的过程中,需要反复把 ...
- 五种常见的聚类算法总结
目录 一.关于聚类的基础描述 1.1 聚类与分类的区别 1.2 聚类的概念 1.3 聚类的步骤 二.几种常见的聚类算法 2.1 K-means聚类算法 1) K-means算法的流程: 2)K- ...
- 七种常见的排序算法总结
目录 引言 1.什么是排序? 2.排序算法的目的是什么? 3.常见的排序算法有哪些? 一,插入排序 1.基本思想 2.代码实现 3.性能分析 4.测试 二,希尔排序(缩小增量排序) 1.基本思想 2. ...
- access两字段同时升序排序_7 天时间,我整理并实现了这 9 种常见的排序算法
排序算法 回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快在哪里? SelectionSort 选择排序算法详解(java 实现) 然 ...
- 常见数据结构与算法整理总结
转载:http://www.jianshu.com/p/42f81846c0fb?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=to ...
- 10种常见的回归算法总结和介绍
线性回归是机器学习中最简单的算法,它可以通过不同的方式进行训练. 在本文中,我们将介绍以下回归算法:线性回归.Robust 回归.Ridge 回归.LASSO 回归.Elastic Net.多项式回归 ...
最新文章
- 分页场景(limit,offset)为什么会慢?
- 机械工业出版社之道格·赫尔曼《Python 3标准库》目录
- 关于Scrum中sprint的规模估算的对话
- .NET的一点历史故事:Novell的崩溃和Xamarin的重生
- windows下jenkins slave 搭建
- python大数据处理与分析课程目标_《大数据分析与挖掘》课程教学大纲
- sudo修改文件夹名字_【转载】MAC系统修改帐号短名和个人文件夹名称
- Avalon and Indigo CTP- March 2005提供公开下载!
- 【Shell】ps -ef 和ps aux
- C语言开发windows桌面程序,演练:创建传统的 Windows 桌面应用程序 (c + +)
- fofa域名检测存活工具_fofaAPI获取url并批量检测4.22通达oa任意用户登录漏洞
- 天猫精灵打开电脑(网络唤醒)
- RTL8367SC单芯片做千兆2光5电
- java jstat m ccs_jstat命令详解
- CSP-S 2022游记
- 如何安装SwitchyOmega
- 如何获取微信小程序中动态渲染的列表中的某一个数据
- 【深度学习】深度学习中的可解释性(1)
- java——获取配置文件并读写
- 华为鸿蒙a股,来了!华为“鸿蒙”,这一次它会给A股带来哪些惊喜
热门文章
- 在Win10上安装VC6
- 华为畅享max支持鸿蒙,华为手机怎么升级鸿蒙?华为鸿蒙系统支持手机型号大全...
- 钢结构节点输出软件_BIM技术助力桥梁钢结构设计施工一体化建设
- 【廖雪峰python基础】【切片】课后作业
- Matlab2014的下载和安装激活过程
- 计算机组成原理袁春风知识点,计算机组成原理袁春风chap.pdf
- CocosCreator休闲游戏发布到字节跳动平台
- 88se9230 linux raid,Gen10磁盘控制器Marvell 88SE9230阵列RAID设置方法教程图文
- 2021年5月软考网络工程师上午真题(带答案解析)上
- 电脑集成显卡莫名消失与重新恢复的过程,以华硕Z97-K主板为例说明