在前面我們學(xué)習(xí)了一種有監(jiān)督的降維方法——線性判別分析(Linear Dscriminant Analysis钙态,LDA)。LDA不僅是一種數(shù)據(jù)壓縮方法還是一種分類(lèi)算法,LDA將一個(gè)高維空間中的數(shù)據(jù)投影到一個(gè)低維空間中去,通過(guò)最小化投影后各個(gè)類(lèi)別的類(lèi)內(nèi)方差和類(lèi)間均值差來(lái)尋找最佳的投影空間疯搅。
本文介紹的主成分分析(Principe Component Analysis,PCA)也是一種降維技術(shù)埋泵,與LDA不同的是幔欧,PCA是一種無(wú)監(jiān)督降維技術(shù),因此PCA的主要思想也與LDA不同丽声。LDA是一種有監(jiān)督的分類(lèi)兼降維技術(shù)礁蔗,因此其最大化均值差最小化類(lèi)內(nèi)差的思想夠保證在降維后各個(gè)類(lèi)別依然能夠很好地分開(kāi)。但PCA只用來(lái)降維而無(wú)需分類(lèi)雁社,因此PCA需要考慮的是如何在降維壓縮數(shù)據(jù)后盡可能的減少數(shù)據(jù)信息的損失浴井。在PCA中使用協(xié)方差來(lái)表示信息量的多少,至于為什么能這么表示后面再進(jìn)行介紹霉撵。下面我們從一些基本的線代知識(shí)開(kāi)始磺浙。
線代基礎(chǔ)
在進(jìn)行數(shù)據(jù)分析時(shí)我們的數(shù)據(jù)樣本經(jīng)常被抽象為矩陣中的一組向量,了解一些線代基礎(chǔ)知識(shí)理解PCA非常重要徒坡,但在這里我們并不準(zhǔn)備也不可能將所有的線代知識(shí)都羅列以便撕氧,因此這里我們僅會(huì)復(fù)習(xí)一些對(duì)理解PCA較為重要的東西。更多線代的內(nèi)容可參考下面幾個(gè)鏈接:
- 3Blue1Brown課程:線性代數(shù)的本質(zhì)喇完;
- 馬同學(xué)的課程呵曹,圖文并茂,0基礎(chǔ)可掌握何暮,思想與上面的課程類(lèi)似;
- 從另一個(gè)緯度理解矩陣:理解矩陣(一)奄喂,理解矩陣(二),理解矩陣(三);
- 特征值與特征向量的幾何含義
為了方便海洼,我們這里以一個(gè)二維平面為例跨新。
向量
在前面我們說(shuō)了,在數(shù)據(jù)處理時(shí)我們經(jīng)常講一個(gè)樣本數(shù)據(jù)當(dāng)作一個(gè)向量坏逢。在二維平面中域帐,一個(gè)向量從不同的角度有不同的理解方式,例如對(duì)于向量 (-2, 3)T:
- 物理角度:它是一個(gè)有向箭頭(可表示作用力)是整,由于(長(zhǎng)度相當(dāng)于力的大小肖揣,角度相當(dāng)于作用力的方向)唯一確定,與起點(diǎn)浮入,終點(diǎn)無(wú)關(guān)龙优。二維向量就是平面的一個(gè)箭頭;
- 計(jì)算機(jī)角度:或者更好理解的數(shù)據(jù)處理角度事秀,一個(gè)向量通常用來(lái)表示一個(gè)樣本彤断,不同列表示這個(gè)樣本的不同屬性特征。二維向量可看作一個(gè)具有兩個(gè)特征的樣本易迹;
- 數(shù)學(xué)角度:向量是一個(gè)抽象的概念宰衙。從幾何角度來(lái)看,向量(-2, 3)T表示從原點(diǎn)沿著x軸負(fù)方向走了兩個(gè)單位睹欲,再沿著y軸走了3個(gè)單位供炼。因此兩個(gè)向量的相加可看作沿著x,y軸各走了兩次(一個(gè)向量走一次)窘疮。
基
在我們描述任何東西的時(shí)候其實(shí)都是選擇了一個(gè)參照系的袋哼,也即事物都是相對(duì)的,最簡(jiǎn)單的運(yùn)動(dòng)與靜止(以靜止的事物為參照)考余,說(shuō)一個(gè)有點(diǎn)意思的——人先嬉,人其實(shí)也是放在一個(gè)參考系中的,我們可以將其理解為生物種類(lèi)系統(tǒng)楚堤,拋開(kāi)這個(gè)大的系統(tǒng)去獨(dú)立的定義人是很難讓人理解的疫蔓。向量也是這樣的,雖然我們前面沒(méi)有指明身冬,但是上面的向量其實(shí)是在一個(gè)默認(rèn)坐標(biāo)系(或稱(chēng)為空間)中的衅胀,也即x,y軸酥筝,但是在線性代數(shù)中我們稱(chēng)其為基滚躯。在線代中任何空間都是由一組線性無(wú)關(guān)的(一維空間由一個(gè)基組成)基向量組成。這些基向量可以組成空間中的任何向量。
個(gè)人理解:
理論上掸掏,任何向量都能作為基的茁影,但是使用線性無(wú)關(guān)的基(也即正交基)來(lái)作為一組空間的基更加的“節(jié)約”,試想如果兩個(gè)基是相關(guān)的丧凤,那么必然存在著一些“浪費(fèi)”募闲,即一個(gè)基里面包含著另一個(gè)基的信息(相關(guān))。因此從這個(gè)角度來(lái)看愿待,PCA就是將各個(gè)可能存在線性相關(guān)的特征轉(zhuǎn)換為線性無(wú)關(guān)的特征浩螺,即將每個(gè)特征作為一個(gè)空間的“基向量”,PCA的作用就是將這些線性相關(guān)的基向量投影到一個(gè)基向量為正交(非線性相關(guān))的空間中仍侥。
矩陣與線性變換
現(xiàn)在假設(shè)我們有如下一個(gè)矩陣相乘的式子:
我們可以從兩種視角來(lái)看待矩陣:
- Av 可以理解為在某一個(gè)坐標(biāo)系下(默認(rèn) E )對(duì)向量 v 施加某個(gè)運(yùn)動(dòng)要出;
- Av 也可以理解為坐標(biāo)系 A 下的向量 v (如上的例子,列向量為一組基)农渊。
因此患蹂,上面的例子可以有兩種理解方式:
(1)如果我們將值全為1對(duì)角方陣視為標(biāo)準(zhǔn)坐標(biāo)系,則它表示在 i=(1, -2)T 和 j=(3, 0)T 這組基底下的坐標(biāo) (-1, 2)T 在基底 (1, 0)T腿时、(0, 1)T 下的坐標(biāo)况脆,如下:
(2)他表示在標(biāo)準(zhǔn)坐標(biāo)系下我們對(duì)一個(gè)向量施加了一個(gè)變換,也即矩陣相乘表示著線性變換批糟。
從基變換的角度看線性變換的一點(diǎn)解釋
當(dāng)我們討論向量 (-1, 2)T 時(shí)格了,都隱含了一個(gè)默認(rèn)的基向量假設(shè):沿著x軸方向長(zhǎng)度為1的 i,沿著y軸長(zhǎng)度為1的j徽鼎。
但是盛末,(-1, 2)T 可以是任何一組基底下的向量。例如否淤,他可能是i'=(2,1)T, j'=(-1, 1)T 這組基下的一個(gè)向量悄但。此時(shí)他在我們默認(rèn)坐標(biāo)系 i=(1, 0)T,j=(0, 1)T 下的計(jì)算過(guò)程如下:
我們可以從另一個(gè)角度理解基地變換的過(guò)程:我們先誤認(rèn)為(-1, 2)T是坐標(biāo)系i=(1, 0)T石抡,j=(0, 1)T下的坐標(biāo)檐嚣,此時(shí)我們通過(guò)線性變換[[2, -1], [1, 1]](每個(gè)嵌套列表看做一行)把坐標(biāo)軸i,j(基坐標(biāo))分別變換到了新的位置 i1=(2, 1)T, j1=(-1, 1)T(他們也是用默認(rèn)坐標(biāo)系表示的)啰扛,即[2, -1], [1, 1]]嚎京。此時(shí)我們把“誤解”轉(zhuǎn)換成了真正的向量。如下:
總結(jié)一下計(jì)算過(guò)程:
- 幾何上看:這個(gè)矩陣表示把我們的默認(rèn)坐標(biāo)系轉(zhuǎn)換為新的基坐標(biāo)系隐解;
- 數(shù)值上看:把其他基底表示的坐標(biāo)(-1, 2)T轉(zhuǎn)換成默認(rèn)基底的坐標(biāo)(-4, 1)T鞍帝。
從基變換角度來(lái)看PCA:
假設(shè)我們現(xiàn)在有一些數(shù)據(jù)x,共計(jì)m行n列(即m個(gè)樣本煞茫,每個(gè)樣本n個(gè)特征)帕涌,那么從 x=Ix (I為單位矩陣)可以認(rèn)為 x 是存在于標(biāo)準(zhǔn)坐標(biāo)系(或稱(chēng)默認(rèn)坐標(biāo)系)空間中的一些點(diǎn)∩惴玻現(xiàn)在我們將x放在另一個(gè)空間A中:Ax。當(dāng)A表的維度k小于n時(shí)候便可以認(rèn)為對(duì)數(shù)據(jù)進(jìn)行了降維蚓曼。
特征值與特征向量
在上面我們說(shuō)了矩陣是一種變換亲澡,現(xiàn)在我們繼續(xù)從這個(gè)角度來(lái)理解特征值和特征向量。為了方便理解辟躏,我們?cè)谶@里做一個(gè)類(lèi)比——將變換看作物理中的作用力谷扣。我們知道一個(gè)力必須有速度和方向,而矩陣對(duì)一個(gè)向量施加的變換也是一樣的捎琐。考慮一下特征向量的定義:
借助上圖我們很容易理解:矩陣 A 對(duì)向量v 施加了一個(gè)變換(作用力)裹匙,這個(gè)變換的方向與特征向量v方向相同瑞凑,各個(gè)方向上的力大小對(duì)應(yīng)著特征值 λ 中對(duì)角線上的值對(duì)應(yīng)。
更多關(guān)于特征值和特征向量的解釋可查看特征值與特征向量的幾何含義和如何理解矩陣特征值和特征向量概页?籽御。
PCA原理
上面介紹了一些基本的線性代數(shù)相關(guān)的知識(shí),下面開(kāi)始介紹PCA的原理惰匙。
協(xié)方差矩陣及優(yōu)化目標(biāo)
上面我們討論了選擇不同的基可以對(duì)同樣一組數(shù)據(jù)給出不同的表示技掏,而且如果基的數(shù)量少于向量本身的維數(shù),則可以達(dá)到降維的效果项鬼。但是我們還沒(méi)有回答一個(gè)最最關(guān)鍵的問(wèn)題:如何選擇基才是最優(yōu)的哑梳。或者說(shuō)绘盟,如果我們有一組N維向量鸠真,現(xiàn)在要將其降到K維(K小于N),那么我們應(yīng)該如何選擇K個(gè)基才能最大程度保留原有的信息龄毡?
要完全數(shù)學(xué)化這個(gè)問(wèn)題非常繁雜吠卷,這里我們用一種非形式化的直觀方法來(lái)看這個(gè)問(wèn)題。
為了避免過(guò)于抽象的討論沦零,我們?nèi)砸砸粋€(gè)具體的例子展開(kāi)祭隔。假設(shè)我們的數(shù)據(jù)由五條記錄組成,將它們表示成矩陣形式:
其中每一列為一條數(shù)據(jù)記錄路操,而一行為一個(gè)字段疾渴。為了后續(xù)處理方便,我們首先將每個(gè)字段內(nèi)所有值都減去字段均值寻拂,其結(jié)果是將每個(gè)字段都變?yōu)榫禐?(這樣做的道理和好處后面會(huì)看到)程奠。中心化的數(shù)據(jù)為:
可視化數(shù)據(jù):
現(xiàn)在問(wèn)題來(lái)了:如果我們必須使用一維來(lái)表示這些數(shù)據(jù),又希望盡量保留原始的信息祭钉,你要如何選擇瞄沙?
通過(guò)上一節(jié)對(duì)基變換的討論我們知道,這個(gè)問(wèn)題實(shí)際上是要在二維平面中選擇一個(gè)方向,將所有數(shù)據(jù)都投影到這個(gè)方向所在直線上距境,用投影值表示原始記錄申尼。這是一個(gè)實(shí)際的二維降到一維的問(wèn)題。
那么如何選擇這個(gè)方向(或者說(shuō)基)才能盡量保留最多的原始信息呢垫桂?一種直觀的看法是:希望投影后的投影值盡可能分散师幕。
以上圖為例,可以看出如果向x軸投影诬滩,那么最左邊的兩個(gè)點(diǎn)會(huì)重疊在一起霹粥,中間的兩個(gè)點(diǎn)也會(huì)重疊在一起,于是本身四個(gè)各不相同的二維點(diǎn)投影后只剩下兩個(gè)不同的值了疼鸟,這是一種嚴(yán)重的信息丟失后控,同理,如果向y軸投影最上面的兩個(gè)點(diǎn)和分布在x軸上的兩個(gè)點(diǎn)也會(huì)重疊空镜。所以看來(lái)x和y軸都不是最好的投影選擇浩淘。我們直觀目測(cè),如果向通過(guò)第一象限和第三象限的斜線投影吴攒,則五個(gè)點(diǎn)在投影后還是可以區(qū)分的张抄。
下面,我們用數(shù)學(xué)方法表述這個(gè)問(wèn)題洼怔。
方差
上文說(shuō)到署惯,我們希望投影后投影值盡可能分散,而這種分散程度茴厉,可以用數(shù)學(xué)上的方差來(lái)表述泽台。此處,一個(gè)字段的方差可以看做是每個(gè)元素與字段均值的差的平方和的均值矾缓,即:由于上面我們已經(jīng)將每個(gè)字段的均值都化為0了怀酷,因此方差可以直接用每個(gè)元素的平方和除以元素個(gè)數(shù)表示:
于是上面的問(wèn)題被形式化表述為:尋找一個(gè)一維基,使得所有數(shù)據(jù)變換為這個(gè)基上的坐標(biāo)表示后嗜闻,方差值最大蜕依。
協(xié)方差
對(duì)于上面二維降成一維的問(wèn)題來(lái)說(shuō),找到那個(gè)使得方差最大的方向就可以了琉雳。不過(guò)對(duì)于更高維样眠,還有一個(gè)問(wèn)題需要解決〈渲猓考慮三維降到二維問(wèn)題檐束。與之前相同,首先我們希望找到一個(gè)方向使得投影后方差最大束倍,這樣就完成了第一個(gè)方向的選擇被丧,繼而我們選擇第二個(gè)投影方向盟戏。
如果我們還是單純只選擇方差最大的方向,很明顯甥桂,這個(gè)方向與第一個(gè)方向應(yīng)該是“幾乎重合在一起”柿究,顯然這樣的維度是沒(méi)有用的,因此黄选,應(yīng)該有其他約束條件蝇摸。從直觀上說(shuō),讓兩個(gè)字段盡可能表示更多的原始信息办陷,我們是不希望它們之間存在(線性)相關(guān)性的貌夕,因?yàn)橄嚓P(guān)性意味著兩個(gè)字段不是完全獨(dú)立,必然存在重復(fù)表示的信息懂诗。
數(shù)學(xué)上可以用兩個(gè)字段的協(xié)方差表示其相關(guān)性蜂嗽,由于已經(jīng)讓每個(gè)字段均值為0,則:可以看到殃恒,在字段均值為0的情況下,兩個(gè)字段的協(xié)方差簡(jiǎn)潔的表示為其內(nèi)積除以元素?cái)?shù)m辱揭。
當(dāng)協(xié)方差為0時(shí)离唐,表示兩個(gè)字段完全獨(dú)立。為了讓協(xié)方差為0问窃,我們選擇第二個(gè)基時(shí)只能在與第一個(gè)基正交的方向上選擇亥鬓。因此最終選擇的兩個(gè)方向一定是正交的。
至此域庇,我們得到了降維問(wèn)題的優(yōu)化目標(biāo):將一組N維向量降為K維(K大于0嵌戈,小于N),其目標(biāo)是選擇K個(gè)單位(模為1)正交基听皿,使得原始數(shù)據(jù)變換到這組基上后熟呛,各字段兩兩間協(xié)方差為0,而字段的方差則盡可能大(在正交的約束下尉姨,取最大的K個(gè)方差)庵朝。
協(xié)方差矩陣
上面我們導(dǎo)出了優(yōu)化目標(biāo),但是這個(gè)目標(biāo)似乎不能直接作為操作指南(或者說(shuō)算法)又厉,因?yàn)樗徽f(shuō)要什么九府,但根本沒(méi)有說(shuō)怎么做。所以我們要繼續(xù)在數(shù)學(xué)上研究計(jì)算方案覆致。
我們看到侄旬,最終要達(dá)到的目的與字段內(nèi)方差及字段間協(xié)方差有密切關(guān)系。因此我們希望能將兩者統(tǒng)一表示煌妈,仔細(xì)觀察發(fā)現(xiàn)儡羔,兩者均可以表示為內(nèi)積的形式宣羊,而內(nèi)積又與矩陣相乘密切相關(guān)。于是我們來(lái)了靈感:
假設(shè)我們只有a和b兩個(gè)字段笔链,那么我們將它們按行組成矩陣X:
然后我們用X乘以X的轉(zhuǎn)置段只,并乘上系數(shù)1/m:
這個(gè)矩陣對(duì)角線上的兩個(gè)元素分別是兩個(gè)字段的方差,而其它元素是a和b的協(xié)方差鉴扫。兩者被統(tǒng)一到了一個(gè)矩陣的赞枕。
根據(jù)矩陣相乘的運(yùn)算法則,這個(gè)結(jié)論很容易被推廣到一般情況:
設(shè)我們有m個(gè)n維數(shù)據(jù)記錄坪创,將其按列排成n乘m的矩陣X炕婶,設(shè)C=1/m(XXT),則C是一個(gè)對(duì)稱(chēng)矩陣莱预,其對(duì)角線分別個(gè)各個(gè)字段的方差柠掂,而第i行j列和j行i列元素相同,表示i和j兩個(gè)字段的協(xié)方差依沮。
協(xié)方差矩陣對(duì)角化
根據(jù)上述推導(dǎo)涯贞,我們發(fā)現(xiàn)要達(dá)到優(yōu)化目前,等價(jià)于將協(xié)方差矩陣對(duì)角化:即除對(duì)角線外的其它元素化為0危喉,并且在對(duì)角線上將元素按大小從上到下排列宋渔,這樣我們就達(dá)到了優(yōu)化目的。這樣說(shuō)可能還不是很明晰辜限,我們進(jìn)一步看下原矩陣與基變換后矩陣協(xié)方差矩陣的關(guān)系:
設(shè)原始數(shù)據(jù)矩陣X對(duì)應(yīng)的協(xié)方差矩陣為C皇拣,而P是一組基按行組成的矩陣,設(shè)Y=PX薄嫡,則Y為P對(duì)X做基變換后的數(shù)據(jù)氧急。設(shè)Y的協(xié)方差矩陣為D,我們推導(dǎo)一下D與C的關(guān)系:
現(xiàn)在事情很明白了毫深!我們要找的P不是別的吩坝,而是能讓原始協(xié)方差矩陣對(duì)角化的P。換句話(huà)說(shuō)费什,優(yōu)化目標(biāo)變成了尋找一個(gè)矩陣P钾恢,滿(mǎn)足PCP??是一個(gè)對(duì)角矩陣,并且對(duì)角元素按從大到小依次排列鸳址,那么P的前K行就是要尋找的基瘩蚪,用P的前K行組成的矩陣乘以X就使得X從N維降到了K維并滿(mǎn)足上述優(yōu)化條件。
現(xiàn)在所有焦點(diǎn)都聚焦在了協(xié)方差矩陣對(duì)角化問(wèn)題上稿黍,有時(shí)疹瘦,我們真應(yīng)該感謝數(shù)學(xué)家的先行,因?yàn)榫仃噷?duì)角化在線性代數(shù)領(lǐng)域已經(jīng)屬于被玩爛了的東西巡球,所以這在數(shù)學(xué)上根本不是問(wèn)題言沐。
由上文知道邓嘹,協(xié)方差矩陣C是一個(gè)是對(duì)稱(chēng)矩陣,在線性代數(shù)上险胰,實(shí)對(duì)稱(chēng)矩陣有一系列非常好的性質(zhì):
1)實(shí)對(duì)稱(chēng)矩陣不同特征值對(duì)應(yīng)的特征向量必然正交汹押。
2)設(shè)特征向量λ重?cái)?shù)為r,則必然存在r個(gè)線性無(wú)關(guān)的特征向量對(duì)應(yīng)于λ起便,因此可以將這r個(gè)特征向量單位正交化棚贾。
由上面兩條可知,一個(gè)n行n列的實(shí)對(duì)稱(chēng)矩陣一定可以找到n個(gè)單位正交特征向量榆综,設(shè)這n個(gè)特征向量為e1,e2,?,en妙痹,我們將其按列組成矩陣:則對(duì)協(xié)方差矩陣C有如下結(jié)論:
其中Λ為對(duì)角矩陣,其對(duì)角元素為各特征向量對(duì)應(yīng)的特征值(可能有重復(fù))鼻疮。
以上結(jié)論不再給出嚴(yán)格的數(shù)學(xué)證明怯伊,對(duì)證明感興趣的朋友可以參考線性代數(shù)書(shū)籍關(guān)于“實(shí)對(duì)稱(chēng)矩陣對(duì)角化”的內(nèi)容。
到這里判沟,我們發(fā)現(xiàn)我們已經(jīng)找到了需要的矩陣P:P = ET.
P是協(xié)方差矩陣的特征向量單位化后按行排列出的矩陣耿芹,其中每一行都是C的一個(gè)特征向量。如果設(shè)P按照Λ中特征值的從大到小挪哄,將特征向量從上到下排列猩系,則用P的前K行組成的矩陣乘以原始數(shù)據(jù)矩陣X,就得到了我們需要的降維后的數(shù)據(jù)矩陣Y中燥。
PCA的特征向量的求解除了使用上述最大化方差的矩陣分解方法,還可以使用最小化損失法塘偎,具體可參見(jiàn):機(jī)器學(xué)習(xí)中的數(shù)學(xué)(4)-線性判別分析(LDA), 主成分分析(PCA)疗涉。
PCA算法步驟
總結(jié)一下PCA的算法步驟:
設(shè)有m條n維數(shù)據(jù)。
- 1)將原始數(shù)據(jù)按列組成n行m列矩陣X吟秩;
- 2)將X的每一行(代表一個(gè)屬性字段)進(jìn)行零均值化咱扣,即減去這一行的均值;
- 3)求出協(xié)方差矩陣 C=1/m(XX??)涵防;
- 4)求出協(xié)方差矩陣的特征值及對(duì)應(yīng)的特征向量闹伪;
- 5)將特征向量按對(duì)應(yīng)特征值大小從上到下按行排列成矩陣,取前k行組成矩陣P壮池;
- 6)Y=PX即為降維到k維后的數(shù)據(jù)偏瓤。
PCA與LDA的區(qū)別
LDA和PCA都用于降維,兩者有很多相同椰憋,也有很多不同的地方厅克,因此值得好好的比較一下兩者的降維異同點(diǎn)。
首先我們看看相同點(diǎn):
- 1)兩者均可以對(duì)數(shù)據(jù)進(jìn)行降維橙依;
- 2)兩者在降維時(shí)均使用了矩陣特征分解的思想证舟;
- 3)兩者都假設(shè)數(shù)據(jù)符合高斯分布硕旗。
我們接著看看不同點(diǎn):
- 1)LDA是有監(jiān)督的降維方法,而PCA是無(wú)監(jiān)督的降維方法女责;
- 2)LDA降維最多降到類(lèi)別數(shù)k-1的維數(shù)漆枚,而PCA沒(méi)有這個(gè)限制;
- 3)LDA除了可以用于降維抵知,還可以用于分類(lèi)墙基;
-
4)LDA選擇分類(lèi)性能最好的投影方向,而PCA選擇樣本點(diǎn)投影具有最大方差的方向辛藻。
這點(diǎn)可以從下圖形象的看出碘橘,在某些數(shù)據(jù)分布下LDA比PCA降維較優(yōu)。
當(dāng)然吱肌,某些某些數(shù)據(jù)分布下PCA比LDA降維較優(yōu)痘拆,如下圖所示: