主頁 > 軟體設計 > LDA演算法——線性判別

LDA演算法——線性判別

2021-09-13 10:14:03 軟體設計

目錄

一、前言

二、什么是LDA?

三、LDA原理

1.二分類問題

2.多分類問題

3.幾點說明

四、演算法實作


一、前言

之前我們已經介紹過PCA演算法,這是一種無監督的降維方法,可以將高維資料轉化為低維資料處理,然而,PCA總是能適用嗎?

考慮如下資料點:

由PCA的原理我們可知,這些資料點在經PCA處理后會被映射到x軸上,如下所示:

可以發現,投影后,紅色資料點和藍色資料點并不能很好地區分開,思考其背后的原因,在這個例子中,我們的資料點有了類別標簽,而PCA是一種無監督學習演算法,它會對所有類別的資料點 一視同仁,所以在分類問題中,PCA總是顯得乏力,事實上,相比于X軸,將資料點投影到Y軸是一個更優選擇:

如上圖所示,將資料點投影到Y軸可以將兩個類別的資料點很好地區分開來,那么我們該如何找到這種投影方式呢,下面我們將介紹一種新的降維方法——LDA演算法,

二、什么是LDA?

線性判別分析(LDA),同PCA類似,也是一種降維演算法,不一樣的是,LDA是一種監督演算法,它需要用到類別資訊,LDA演算法的思路同PCA一致,即通過某種線性投影,將原本高維空間中的一些資料,映射到更低維度的空間中,但LDA演算法要求投影后的資料滿足:1.同類別的資料之間盡可能地接近,2.不同類別的資料之間盡可能地遠離,

三、LDA原理

1.二分類問題

從最簡單的二分類問題開始討論,根據LDA的投影目標,我們可以得到我們要優化的目標如下:

J = \frac{\left \| u_1'-u_2' \right \|^2}{S_1'^2+S_2'^2}

其中,u_1',u_2'代表投影后兩個類別的資料的中心點,S_1',S_2'代表投影后兩個類別的資料的標準差,同PCA一致,我們一般用方差來表示資料的離散散程度,觀察優化目標J,分子衡量的是投影后兩個類別的資料中心點的距離,而分母衡量的是投影后兩個類別的資料各自的離散程度,同類別的資料越接近(LDA投影目標1),分母越小,J越大;不同類別的資料越遠離(LDA投影目標2),分子越大,J越大,目標合理,

方便起見,設X為原始資料點,u_1=\sum_{X\in Class1} \frac{X}{N},u_2=\sum_{X\in Class2} \frac{X}{N}分別為原始資料的中心點,w為投影向量,則有:

u_1'=\sum_{X\in Class1} \frac{w^TX}{N}=w^Tu_1

u_2'=\sum_{X\in Class2}\frac{w^TX}{N}=w^Tu_2

S_1'^2=\frac{1}{N}\sum \left \| w^TX-u_1' \right \|^2=\sum w^T\frac{1}{N}(X-u_1)(X-u_1)^Tw=w^TS_1w

S_2'^2=\frac{1}{N}\sum \left \| w^TX-u_2' \right \|^2=\sum w^T\frac{1}{N}(X-u_2)(X-u_2)^Tw=w^TS_2w

優化目標即為:

J(w) = \frac{\left \| u_1'-u_2' \right \|^2}{S_1'^2+S_2'^2}=\frac{\left \| w^T(u_1-u_2) \right \|^2}{w^T(S_1+S_2)w}=\frac{w^T(u_1-u_2)(u_1-u_2)^Tw}{w^T(S_1+S_2)w}

不妨設S_B=(u_1-u_2)(u_1-u_2)^T,S_w=S_1+S_2,則J(w)可簡化為\frac{w^TS_Bw}{w^TS_ww}

J(w)求導,應有:

\frac{d J(w)}{dw}=\frac{2S_Bw(w^TS_ww)-2S_ww(w^TS_Bw)}{\left \| w^TS_2w \right \|^2}=0

化簡,得:

S_Bw(w^TS_ww)-S_ww(w^TS_Bw)=0

等式兩邊同除以w^TS_ww,得:

S_Bw-S_ww\frac{w^TS_Bw}{w^TS_ww}=S_Bw-S_wJw=0

變形,得:

S_w^{-1}S_Bw=Jw

顯然,這又是一個矩陣分解問題,J是矩陣S_w^{-1}S_B的特征值,同時也是我們優化的目標,而w即為對應的特征值,也是投影向量,所以我們將矩陣分解得到的特征值從大到小排列,然后取最大的幾個特征值對應的特征向量作為我們的投影向量,

觀察式子S_Bw-S_wJw=0,由于S_B=(u_1-u_2)(u_1-u_2)^T,代入,得:

(u_1-u_2)(u_1-u_2)^Tw=S_wJw

由于(u_1-u_2)^Tw代表的是投影后兩類資料中心點間的距離,我們可以用常數D代替,于是有:

w=\frac{D}{j}S_w^{-1}(u_1-u_2)

對于投影向量w,我們只需要求得它的方向,對于它的大小(縮放程度)并無要求,所以我們最終求得的投影向量w即為S_w^{-1}(u_1-u_2),通過這種方法,我們并不需要對矩陣進行分解便能求得投影向量,大大減少了計算量,

2.多分類問題

對二分類問題進行推廣,考慮多分類問題,同樣,投影的目的仍是使得同類資料點盡可能近,不同類別的資料點盡可能遠,這里需要對優化目標J做適當改變,如下:

J=\frac{\sum N_i\left \| u_i'-u' \right \|^2}{\sum S_i'^2}

其中,u_i,S_i和二分類問題一致,仍是第i類資料的中心點和標準差,而u則代表所有資料的中心,N_i代表第i個類別的資料個數,仔細觀察,可以發現,目標J的分母仍為各類別資料投影后的離散程度,而分子則是投影后各類別資料中心距所有資料中心點的距離的加權平方和,同樣是衡量不同類別資料點的分離程度,優化的目標同二分類問題一致,重點關注LDA投影目標,萬變不離其宗,

以二分類問題為例進行驗證,有:

\begin{align} S_B&=N_1(u_1-u)(u_1-u)^T+N_2(u_2-u)(u_2-u)^T\\ &=N_1(u_1-u)(u_1-u)^T+N_2(u_2-u)(u_2-u)^T\\ &=N_1(u_1-\frac{N_1u_1+N_2u_2}{N})(u_1-\frac{N_1u_1+N_2u_2}{N})^T+N_2(u_2-\frac{N_1u_1+N_2u_2}{N})(u_2-\frac{N_1u_1+N_2u_2}{N})^T\\ &=N_1(\frac{N_2u_1-N_2u_2}{N})(\frac{N_2u_1-N_2u_2}{N})^T+N_2(\frac{N_1u_2-N_1u_1}{N})(\frac{N_1u_2-N_1u_1}{N})^T\\ &=\frac{N_1N_2^2}{N}(u_1-u_2)(u_1-u_2)^T+\frac{N_1^2N_2}{N}(u_1-u_2)(u_1-u_2)^T\\ &=\frac{N_1N_2}{N}(u_1-u_2)(u_1-u_2)^T \end{align}

同樣,我們只需要知道投影的方向,所以對于常數項\frac{N_1N_2}{N},其只控制投影后資料點的縮放,并不影響最終結果,可以忽略,可以發現,用多分類問題的公式計算出來的結果同二分類的計算公式完全一致,

3.幾點說明

(1).維度必減少

PCA演算法降維可以理解為旋轉坐標軸,新的坐標下每條軸作為一個維度也即成分,對于差距不大的維度可以略去從而達到降維的目的,也就是說實際上PCA演算法可以將N維資料仍然變換為N維資料,然后可視情況刪減維度,但LDA演算法不盡然,使用LDA演算法時,新的坐標維度必會減少,

以二分類為例,觀察式子S_w^{-1}S_Bw=Jw,由于S_B=(u_1-u_2)(u_1-u_2)^T,可知S_B為奇異矩陣(它的秩最多為C-1),從而可以知道S_w^{-1}S_B也必為奇異矩陣,所以它分解后必有一個特征值為0,我們只能得到C-1個投影向量,C為類別個數,

(2).投影后各維度之間不一定正交

S_w^{-1}S_B不一定是實對稱矩陣,所以它分解后得到的特征向量未必正交,

(3).可能無解

當樣本點個數少于樣本維度時,S_w會變為奇異矩陣,無法求逆,在這種情況下可能需要先用PCA降維,再使用LDA,

(4).無法適用

LDA并不是萬能的,當同類別資料組成對角時,如下所示:

對于這種情況,我們可以發現,無論怎么投影均無法將兩類資料點很好地區分開來,事實上,對于這種情況,普通的線性投影均束手無策,應該先增加維度再考慮區分,

此外,當不同類別的資料的中心重合,即u_1=u_2=u時,有S_B=0,此時LDA也不再適用,

(5).對某些分類問題,PCA性能可能優于LDA

當資料重合度過高時,如下所示:

LDA會選擇往Y軸方向進行投影,而PCA 由于不考慮類別資訊,它會選擇往X軸上進行投影,在這種情境下,PCA不失為一種更優選擇,

四、演算法實作

同樣,根據前面的介紹,我們可以得到線性判別分析的一般步驟:給定樣本,先中心化,然后求矩陣S_BS_w,再對矩陣S_w^{-1}S_B進行特征分解,代碼實作如下:

當然,也可以不進行特征分解,直接套用公式w =S_w^{-1}(u_1-u_2)

sklearn庫里直接封裝好了模型,可以直接使用:

三種方法得到的特征向量分別為[0, -1],[0,-2],[0,8],標準化之后均為[0, 1],結果一致,即均投影到y軸上,觀察特征分解結果,可以發現,有一個特征值為0,與前面對LDA的探討一致,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/299725.html

標籤:其他

上一篇:編程之美-字串函式

下一篇:Python基礎語法回顧

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more