好久没有整理最近的一些算法了,今天趁着跑数据的过程整理一下LDA算法。该算法在很多地方都有使用:语音识别,说话人识别等等,那么今天在这里就为大家详细介绍一下,最终把matlab代码放在我的git上,有兴趣的可以去看一下,好了不多说,直接进入主题。
首先介绍一下LDA到底是什么?LDA是一种降维的方法,一提到降维,大家应该很熟悉PCA。那么PCA和LDA的区别是什么呢?我们简单的理解可以理解为PCA是获取那些数据能量集中的子空间,用《模式分类》中的例子:手写字母识别中,Q和O利用PCA能够发现两个字母的相似之处,却很可能把区分字母Q和O的那撇特征去掉。而LDA却不同,它也是是获取一个子空间,在这个子空间中:同类的数据会集中,不同类的数据则分散开来,所以从这个角度来看LDA更适合于分类的任务。那么上面大家对LDA有了一个整体的了解,下面我开始讲解LDA,这里会参照《模式分类》这本书,不过会穿插我的理解,方便大家一步步跟进,那么我们开始。
假设我们有n个d维度的样本:x1,x2,....xn,他们分别属于两个不同的类别,即其中大小为那n1的样本属于类别1,大小为n2 的样本属于类别2【假设我们只有两大类】.如果对x中的各个成分做线性组合,就会得到一个点积,结果就是一个标量: