LDA算法原理及matlab实现
轉自:http://blog.csdn.net/porly/article/details/8020696
https://blog.csdn.net/dulingtingzi/article/details/53104335
1.?LDA是什么
線性判別式分析(Linear Discriminant Analysis),簡稱為LDA。也稱為Fisher線性判別(Fisher Linear Discriminant,FLD),是模式識別的經典算法,在1996年由Belhumeur引入模式識別和人工智能領域。
基本思想是將高維的模式樣本投影到最佳鑒別矢量空間,以達到抽取分類信息和壓縮特征空間維數的效果,投影后保證模式樣本在新的子空間有最大的類間距離和最小的類內距離,即模式在該空間中有最佳的可分離性。
LDA與前面介紹過的PCA都是常用的降維技術。PCA主要是從特征的協方差角度,去找到比較好的投影方式。LDA更多的是考慮了標注,即希望投影后不同類別之間數據點的距離更大,同一類別的數據點更緊湊。
下面給出一個例子,說明LDA的目標。
?
?????? 可以看到兩個類別,一個綠色類別,一個紅色類別。左圖是兩個類別的原始數據,現在要求將數據從二維降維到一維。直接投影到x1軸或者x2軸,不同類別之間會有重復,導致分類效果下降。右圖映射到的直線就是用LDA方法計算得到的,可以看到,紅色類別和綠色類別在映射之后之間的距離是最大的,而且每個類別內部點的離散程度是最小的(或者說聚集程度是最大的)。
這里還有一個LDA的例子:
?
下圖是一個LDA和PCA區別的例子:
???????兩個類別,class1的點都是圓圈,class2的點都是十字。圖中有兩條直線,斜率在1左右的這條直線是PCA選擇的映射直線,斜率在 -1左右的這條直線是LDA選擇的映射直線。其余不在這兩條直線上的點是原始數據點。可以看到由于LDA考慮了“類別”這個信息(即標注),映射后,可以很好的將class1和class2的點區分開。也就是說,LDA是以分類為導向的,考慮的是如何選擇投影方向使得分類更好,是有監督的;而PCA是一種無監督的降維方式,它只是單純的降維,它考慮的是如何選擇投影面才能使得降維以后的樣本信息保留的最大(而這是通過方差大來體現的)。
2. LDA的一些說明
?? 第一,降維后的維度是多少?
???? PCA降維是直接和數據維度相關的,比如原始數據是n維的,那么PCA后,可以任意選取1維、2維,一直到n維都行(當然是對應特征值大的那些)。LDA 降維是直接和類別的個數相關的,與數據本身的維度沒關系,比如原始數據是n維的,一共有C個類別,那么LDA降維之后,一般就是1維,2維到C-1維進行選擇(當然對應的特征值也是最大的一些),舉個例子,假設圖象分類,兩個類別正例反例,每個圖象10000維特征,那么LDA之后,就只有1維特征,并且這維特征的分類能力最好。
PS:對于很多兩類分類的情況,LDA之后就剩下1維,找到分類效果最好的一個閾值貌似就可以了。
?? 第二,投影的坐標系是否正交
??? PCA投影的坐標系都是正交的,而LDA根據類別的標注,關注分類能力,因此不保證投影到的坐標系是正交的(一般都不正交)。
3. LDA計算過程(兩個類別)
這一節,主要討論只有兩個類別的數據,LDA的計算。現在要找到一個向量w,將數據x投影到w上去之后,得到新的數據y。第一,為了實現投影后的兩個類別的距離較遠,用映射后兩個類別的均值差的絕對值來度量。第二,為了實現投影后,每個類內部數據點比較聚集,用投影后每個類別的方差來度量。
類別i的均值:
???
????類別i投影后的均值(實際上等于mi的投影):
????
????投影后均值差的絕對值:
????
????投影后的方差(這里的y是類別i中數據投影后的數據,即y=w_t * x):
????
????目標優化函數為:
????
????下面通過展開m'和s',定義S_B和S_W:
優化目標J(w)改寫如下,這樣是為了方便推導出計算w的方法。
????
????推導過程忽略了,最后推導結果如下:
??
假設數據是n維特征,m個數據,分類個數為2。那么Sw實際上是每個類別的協方差矩陣之和,每個類別的協方差矩陣都是n*n的,因此Sw是n*n的,m1-m2是n*1的。計算得到的w是n*1的,即w將維特征映射為1維。
PS:這里不用糾結與Sw的協方差矩陣形式,實際上這是拆拆開來w和w_t后的結果,實際上w*Sw*w_t后,仍舊是一個數值,即表示兩個類的投影后方差之和。
4. LDA計算過程(多個類別)
???? 對于S_w,就是“兩個類別的協方差矩陣之和”變成了“多個類別的協方差矩陣之和”。
?? ?
???? 對于S_b,以前是“兩個類別的均值之差的絕對值”,現在多個類別了,怎么計算呢?計算任意兩個類別之間的均值之差的絕對值之和?這樣對于N個類別,需要 C(N,2)次計算,這可能是一個方法,不過LDA使用的方法,計算每個類別的均值與所有類別均值的差異,并且對每個類別的數據量進行加權處理。下式中,m為所有類別的均值,m_i為類別i的均值,n_i為類別i的數據量。
????
?????? 對于n維特征、C個類別、m個樣本的數據,是將n維數據映射為C-1維。即所求的w是一個n*(c-1)的矩陣。S_w是一個n*n的矩陣(沒有除以樣本數的協方差矩陣之和),S_B是一個C*C的矩陣,實際上S_B矩陣的的秩最多是C-1,這是因為n_i*(m_i-m)這c向量實際上是線性相關的,因為他們的和是均值m的常數倍。這導致后面求解w,實際上是求出C-1個向量一個構成的一個w。
具體計算忽略。
下面就是一個三個類別的例子:?
4. LDA其他變種
如果原始數據投影后,仍舊不能很好的分開,那么Kernel LDA是一個解決方法。
LDA在計算量上與數據的維度有關,2DLDA能夠大大減小LDA計算量。
5. LDA的一些問題
第一,LDA最多投影出C-1維特征,如果需要更多特征,則要引入其他方法。
第二,LDA假設數據服從單峰高斯分布,比如下面的復雜數據結構。
5. 參考
Introduction to LDA
Linear Discriminant Analysis - A Brief Tutorial
??http://www.aiaccess.net/English/Glossaries/GlosMod/e_gm_fisher_discriminant.htm
線性判別分析(Linear Discriminant Analysis, LDA)算法分析
轉載自:http://blog.csdn.net/jnulzl/article/details/49894041http://blog.csdn.net/jnulzl/article/details/49894041
一、前言
最近由于研究需要,要用到線性判別分析(LDA)。于是找了很多資料來看,結果發現大部分講的都是理論知識,因此最后還是看的一知半解,后來終于找到了個英文的文檔,作者由PCA引入LDA,看過后豁然開朗,主要是文檔中有詳細的例子,為了保持原版在此就直接粘貼過來了——后面的例子是結合MATLAB實現的!
二、LDA理論詳解
三、LDA實例詳解
下面是作者文檔中配的一個具體例子,其中的代碼是MATLAB代碼。
四、相關的中文LDA資料
除了上面英文版的LDA外,我感覺以下關于LDA的中文文章講的也是挺不錯的:
1、線性判別分析(Linear Discriminant Analysis)(一);
2、線性判別分析(Linear Discriminant Analysis, LDA)算法分析;
3、LDA 線性判別分析;
4、機器學習中的數學(4)-線性判別分析(LDA), 主成分分析(PCA)。
LDA詳細推導:
總結
以上是生活随笔為你收集整理的LDA算法原理及matlab实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Podfile的简单使用
- 下一篇: 4. Podfile 的解析逻辑