滕州本地网站建设wordpress 增加站长统计
web/
2025/9/26 3:32:49/
文章来源:
滕州本地网站建设,wordpress 增加站长统计,高品质网站开发,下城网站建设这学期选了门模式识别的课。发现最常见的一种情况就是#xff0c;书上写的老师ppt上写的都看不懂#xff0c;然后绕了一大圈去自己查资料理解#xff0c;回头看看发现#xff0c;Ah-ha#xff0c;原来本质的原理那么简单#xff0c;自己一開始仅仅只是被那些看似formidab… 这学期选了门模式识别的课。发现最常见的一种情况就是书上写的老师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 当然kd-tree有一个问题就是当输入维数跟训练数据数量非常接近时就非常难优化了。所以用PCA(稍后会介绍)降维大多数情况下是非常有必要的 2. Bayes Classifier 贝叶斯方法一篇比較科普的中文介绍能够见pongba的平庸而奇妙的贝叶斯方法: http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/实际实现一个贝叶斯分类器之后再回头看这篇文章感觉就非常不一样。 在模式识别的实际应用中贝叶斯方法绝非就是post正比于prior*likelihood这个公式这么简单一般而言我们都会用正态分布拟合likelihood来实现。 用正态分布拟合是什么意思呢贝叶斯方法式子的右边有两个量一个是prior先验概率这个求起来非常easy就是一大堆数据中求某一类数据占的百分比就能够了比方300个一堆的数据中A类数据占100个那么A的先验概率就是1/3。第二个就是likelihoodlikelihood能够这么理解对于每一类的训练数据我们都用一个multivariate正态分布来拟合它们(即通过求得某一分类训练数据的平均值和协方差矩阵来拟合出一个正态分布)然后当进入一个新的測试数据之后就分别求取这个数据点在每一个类别的正态分布中的大小然后用这个值乘以原先的prior便是所要求得的后验概率post了。 贝叶斯公式中另一个evidence对于刚開始学习的人来说可能会一下没法理解为什么在实际运算中它不见了。实则上evidence仅仅是一个让最后post归一化的东西而在模式分类中我们仅仅须要比較不同类别间post的大小归一化反而添加了它的运算量。当然在有的地方这个evidence绝对不能省比方后文提到的GMM中须要用到EM迭代这时候假设不用evidence将post归一化后果就会非常可怕。 Bayes方法一个不错的參考网页可见以下链接 http://www.cs.mcgill.ca/~mcleish/644/main.html 3. Principle Component Analysis PCA译为主元分析或者主成份分析是一种非常好的简化数据的方法也是PR中常见到不能再常见的算法之中的一个。CSDN上有一篇非常不错的中文博客介绍PCA《主元分析(PCA)理论分析及应用》能够见以下链接 http://blog.csdn.net/ayw_hehe/archive/2010/07/16/5736659.aspx 对于我而言主元分析最大的意义就是让我明确了线性代数中特征值跟特征向量到底代表什么从而让我进一步感受到了线性代数的博大精深魅力无穷。- -||| PCA简而言之就是依据输入数据的分布给输入数据又一次找到更能描写叙述这组数据的正交的坐标轴比方以下一幅图对于那个椭圆状的分布最方便表示这个分布的坐标轴肯定是椭圆的长轴短轴而不是原来的x y。 那么怎样求出这个长轴和短轴呢于是线性代数就来了我们求出这堆数据的协方差矩阵(关于什么是协方差矩阵详见本节最后附的链接)然后再求出这个协方差矩阵的特征值和特征向量相应最大特征值的那个特征向量的方向就是长轴(也就是主元)的方向次大特征值的就是第二主元的方向以此类推。 关于PCA推荐两个不错的tutorial: (1) A tutorial on Principle Component Analysis从最主要的数学原理到应用都有让我在被老师的讲课弄晕之后瞬间开悟的tutorial: http://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf (2) 里面有一个非常生动的实现PCA的样例还有告诉你PCA跟SVD是什么关系的对编程实现的帮助非常大(当然大多数情况下都不用自己编了): 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、LDANMF有个明显的优点就是它的非负由于为在非常多情况下带有负号的运算算起来都不这么方便可是它也有一个问题就是NMF分解出来的结果不像PCA和LDA一样是恒定的。 6. Gaussian Mixture Model GMM高斯混合模型粗看上去跟上文所提的贝叶斯分类器有点相似但两者的方法有非常大的不同。在贝叶斯分类器中我们已经事先知道了训练数据(training set)的分类信息因此仅仅要依据相应的均值和协方差矩阵拟合一个高斯分布就可以。而在GMM中我们除了数据的信息对数据的分类一无所知因此在运算时我们不仅须要估算每一个数据的分类还要估算这些估算后数据分类的均值和协方差矩阵。。。也就是说假设有1000个训练数据10租分类的话须要求的未知数是10001010(用未知数表示未必确切确切的说是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 转载于:https://www.cnblogs.com/mengfanrong/p/4174510.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81982.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!