数据降维(data dimension reduction)
在機(jī)器學(xué)習(xí)和統(tǒng)計(jì)學(xué)領(lǐng)域,降維是指在某些限定條件下,降低隨機(jī)變量個(gè)數(shù),得到一組“不相關(guān)”主變量的過(guò)程。對(duì)數(shù)據(jù)進(jìn)行降維一方面可以節(jié)省計(jì)算機(jī)的儲(chǔ)存空間,另一方面可以剔除數(shù)據(jù)中的噪聲并提高機(jī)器學(xué)習(xí)算法的性能。(實(shí)際上通過(guò)降維還可以實(shí)現(xiàn)數(shù)據(jù)可視化,但是前提是將原始數(shù)據(jù)降到2D或者3D才可以)。
數(shù)據(jù)降維的根本:降低數(shù)據(jù)維度、降維后的數(shù)據(jù)能盡可能的代表原始數(shù)據(jù)。
數(shù)據(jù)降維和特征選擇是存在差異的,二者最終的目的都是想減少特征的維度,但是二者的實(shí)現(xiàn)方式上有本質(zhì)的區(qū)別。數(shù)據(jù)降維是將原始數(shù)據(jù)映射到低維子空間,以達(dá)到降低維數(shù)的目的,但是這個(gè)過(guò)程中數(shù)據(jù)的特征發(fā)生了本質(zhì)的變化,新的子空間的特征再是原來(lái)的特征,所以通常不容易賦予經(jīng)過(guò)降維后的數(shù)據(jù)新特征的物理意義。特征選擇是在原來(lái)的n個(gè)特征中選取其中的s個(gè)(s<= n),選取的s個(gè)特征是原來(lái)特征空間的子集,它還是有著和原來(lái)特征一樣的物理意義。這也實(shí)現(xiàn)了降低特征維數(shù)的目的。
降維技術(shù)有很多種,這篇文章介紹常見(jiàn)的5種數(shù)據(jù)降維技術(shù):主成分分析(Principal Component Analysis,PCA)、因子分析(Factor Analysis)、獨(dú)立成分分析(Independent Component Analysis,ICA)、奇異值分解(singular value decomposition,SVD)、線性判別分析(linear discriminant analysis,LDA)。
目錄
1. 主成分分析(PCA)
1.1 對(duì)矩陣進(jìn)行中心化
1.2 協(xié)方差矩陣
1.3 特征分解
1.4 PCA的實(shí)現(xiàn)
2. 線性判別分析(LDA)
2.1 LDA原理
3. 獨(dú)立成分分析(ICA)
4. 奇異值分解(SVD)
參考文獻(xiàn)
1. 主成分分析(PCA)
PCA是一種常用的降維技術(shù),既然是降維,我們當(dāng)然希望能夠把特征矩陣通過(guò)某種方式使得新的特征矩陣的維度降低。實(shí)際上下面先簡(jiǎn)要說(shuō)明一下PCA的原理和實(shí)現(xiàn)步驟。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PCA 的原理:通過(guò)正交變換將一組可能存在相關(guān)性的變量轉(zhuǎn)換為一組線性不相關(guān)的變量,轉(zhuǎn)換后的這組變量叫主成分。主成分是原特征的線性組合。(前提是變換后的矩陣需要保留變換前矩陣的主要信息,不然降維沒(méi)有意義)
既然要進(jìn)行正交變換,那么我們就得需要一組正交基向量,求解這組正交基向量就成了主成分分析的關(guān)鍵。
PCA的步驟:
1. 對(duì)特征矩陣進(jìn)行中心化,即對(duì)矩陣按列求均值得到行向量,然后用特征矩陣減去行向量(由于python的廣播機(jī)制,行向量擴(kuò)充為和特征矩陣同等維度的矩陣)得到矩陣X
2. 求矩陣X的協(xié)方差矩陣,并對(duì)協(xié)方差矩陣進(jìn)行特征分解,得到特征值和其對(duì)應(yīng)的特征向量
3. 對(duì)特征值按照從大到小的順序排序,假設(shè)取前k 個(gè)特征值,然后取這k 個(gè)特征值對(duì)應(yīng)的特征向量作為一組基向量
4. 用矩陣X 和基向量相乘,就可以把矩陣X 變換到維度更低的子空間,得到新的矩陣Y ,它就是降維后的矩陣。
PCA 的原理和步驟都很簡(jiǎn)單,其程序?qū)崿F(xiàn)也很簡(jiǎn)單。但是PCA中還是有幾個(gè)需要注意的點(diǎn)。為什么要先進(jìn)行中心化?為什么要選擇協(xié)方差矩陣,直接對(duì)中心化后的矩陣進(jìn)行特征分解不可以嗎?為什么要對(duì)協(xié)方差矩陣進(jìn)行特征分解,特征分解的意義何在,特征分解后得到的特征值和特征向量又有什么用?接下來(lái),逐一進(jìn)行分析。
1.1 對(duì)矩陣進(jìn)行中心化
為什么要對(duì)數(shù)據(jù)矩陣進(jìn)行中心化,直接對(duì)數(shù)據(jù)矩陣進(jìn)行處理不可以嗎。首先我們先說(shuō)下什么是中心化,中心化又稱為零均值化,中心化就是指變量減去均值。中心化后的數(shù)據(jù)的均值為0。比如有5個(gè)數(shù)據(jù)(1,9,2,4,5),首先這5個(gè)數(shù)的均值為4.2,將其中心化后得到的數(shù)據(jù)為(-3.2,4.8,-2.2,-0.2,0.8),可以看出,中心化后的數(shù)據(jù)的均值為0。那么這有什么用呢,中心化可以把樣本點(diǎn)移動(dòng)到原點(diǎn)附近。以上面的5個(gè)數(shù)為例,其在中心化前后的圖分別如下:
? ? ?? ? ? ? ? ? ? ? ? ? ? ?
可以看到,通過(guò)中心化后,數(shù)據(jù)點(diǎn)移動(dòng)到了原點(diǎn)附近。在二維空間中,中心化前后的對(duì)比圖如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???
數(shù)據(jù)點(diǎn)的中心移動(dòng)到了(0,0)。通過(guò)中心化,能夠更好的描述主成分的方向。
1.2 協(xié)方差矩陣
通過(guò)上面的中心化后我們得到了新的矩陣X,像上面所疑惑的,我們?yōu)槭裁床恢苯訉?duì)中心化后的矩陣X進(jìn)行操作而是選擇其協(xié)方差矩陣進(jìn)行操作。我們知道,PCA的作用主要有兩種:數(shù)據(jù)壓縮(即去除冗余)、去噪聲(提高算法性能)。那么這兩種作用跟協(xié)方差矩陣又有什么關(guān)系呢。
首先對(duì)于數(shù)據(jù)壓縮來(lái)說(shuō),我們希望特征間的相關(guān)性盡可能低,相關(guān)性低能代表什么呢,這能代表信息的冗余低,留下的數(shù)據(jù)都是包含主要信息的數(shù)據(jù)。比如在某個(gè)數(shù)據(jù)集中,我有3個(gè)特征都是表示某物體的長(zhǎng)度,但是這3個(gè)特征表示的長(zhǎng)度的單位不同,分別是cm、m、inches。顯然這三個(gè)特征見(jiàn)得相關(guān)性很高,因?yàn)閷?duì)于長(zhǎng)度來(lái)說(shuō),我們完全可以用一種單位長(zhǎng)度來(lái)表示假設(shè)用cm來(lái)衡量物體的長(zhǎng)度,那么以m和inches來(lái)衡量物體長(zhǎng)度的那兩個(gè)特征就是冗余信息,那我們可不可以直接把冗余的特征去掉呢?嗯。。。。,實(shí)際上應(yīng)該是可以的,但是PCA并不是這樣做的,這也是降維和特征選擇的主要區(qū)別,PCA是對(duì)舊特征通過(guò)線性變換而得到一些新的特征,而新特征能很好的描述某一物體,且通常情況下新特征的數(shù)量要比舊特征的數(shù)量少。那么特征間的相關(guān)性我們應(yīng)該如何衡量呢,可以通過(guò)協(xié)方差來(lái)衡量特征間的相關(guān)性。協(xié)方差越小,特征間的相關(guān)性越小。而我們同時(shí)還希望留下來(lái)的特征,此處是以cm為衡量長(zhǎng)度的特征的方差盡量大,我們都知道,數(shù)據(jù)的最大方差代表數(shù)據(jù)的最重要的信息,所以特征本身的方差也是我們需要關(guān)注的。那么有沒(méi)有什么數(shù)據(jù)結(jié)構(gòu)既能存儲(chǔ)特征間的協(xié)方差又能存儲(chǔ)各特征本身的方差呢,協(xié)方差矩陣。
那么同樣的,對(duì)于去噪聲來(lái)說(shuō),我們希望我們需要的信號(hào)的能量要盡可能大,這樣它包含的信息量才大,所以我們需要信號(hào)的方差要大;同時(shí)為了避免干擾,我們希望信號(hào)和噪聲之間的相關(guān)性要低,如果信號(hào)和噪聲的相關(guān)性高的話,我們就分不清哪個(gè)是信號(hào),哪個(gè)是噪聲了,這里的相關(guān)性同樣需要用協(xié)方差來(lái)描述。那么同時(shí)存儲(chǔ)協(xié)方差和方差的數(shù)據(jù)結(jié)構(gòu)我們同樣需要協(xié)方差矩陣的登場(chǎng)。現(xiàn)在一切都變的明朗了,這就是為什么要研究特征矩陣的協(xié)防差矩陣的原因。
那么什么是協(xié)方差矩陣呢,協(xié)方差矩陣又稱:離差矩陣、方差-協(xié)方差矩陣。假設(shè)有3個(gè)樣本a、b、c按行組成維度為3*n的矩陣X,如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
那么矩陣X對(duì)應(yīng)的協(xié)方差矩陣為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
可以看到,協(xié)方差矩陣是一個(gè)對(duì)稱矩陣,而且對(duì)角線上的元素為方差;非對(duì)角線上的元素為協(xié)方差。這樣一個(gè)矩陣完美的包含了方差和協(xié)方差。
1.3 特征分解
得到了特征矩陣X的協(xié)方差矩陣后,為什么要對(duì)它進(jìn)行特征分解呢,特征分解后得到的特征值和特征向量又有什么用呢。在上一小節(jié)提到過(guò),我們希望特征間的相關(guān)性越小越好,而希望特征本身的能量越大越好,這對(duì)應(yīng)到協(xié)方差矩陣中就是,我們希望協(xié)方差矩陣的非對(duì)角線的元素越小越好甚至為0更好,而希望對(duì)角線上的元素越大越好,但是并不希望對(duì)角線上的每個(gè)元素的值都很大,這樣的話我們就不能降低特征矩陣的維度了,理想的情況是,對(duì)角線上有些元素的值比較大,比如k(k<<n)個(gè)元素的值占到所有元素值總和的90%或更多,這樣我們就可以只取這k個(gè)元素對(duì)應(yīng)的特征就能夠代表原特征矩陣的大部分信息了。
說(shuō)了這么多,說(shuō)出了我們的期望的協(xié)方差矩陣的樣子,但是實(shí)際獲得的協(xié)方差矩陣并不能滿足:非對(duì)角線上的元素為0,對(duì)角線上k個(gè)元素的值的和占到所有元素值的和的90%或者更多。這時(shí)候,特征分解就出現(xiàn)了,特征分解可以找到一個(gè)矩陣,這個(gè)矩陣可以協(xié)方差矩陣相似,且可以滿足我們期望的矩陣的樣子,這個(gè)操作就是把協(xié)方差矩陣對(duì)角化。把一個(gè)矩陣進(jìn)行對(duì)角化這是本科線性代數(shù)中就學(xué)過(guò)的知識(shí)。但是并不是所有的矩陣都可以相似對(duì)角化的,因?yàn)閰f(xié)方差矩陣是是對(duì)稱矩陣,所以它一定可以相似對(duì)角化。協(xié)方差矩陣可以用下面的式子表示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
其中是一個(gè)對(duì)角矩陣,且對(duì)角線上的元素是協(xié)方差矩陣的特征值。而P就是由特征值對(duì)應(yīng)的特征向量組成的矩陣。這時(shí),我們可以把對(duì)角線上的值按照從小到大的順序排序,取前k個(gè)特征值,其對(duì)應(yīng)的k個(gè)特征向量就可以作為一組基向量,把中心化后的特征矩陣從高維空間通過(guò)線性變換映射到低維空間。
1.4 PCA的實(shí)現(xiàn)
? ? ??
上面就是PCA的一個(gè)簡(jiǎn)單的程序?qū)崿F(xiàn)。我們使用sklearn.decomposition中的函數(shù)PCA,有關(guān)它的參數(shù)如下圖:?
? ? ? ? ? ? ? ? ?
關(guān)于參數(shù)的詳細(xì)說(shuō)明可以自行參考PCA的函數(shù)說(shuō)明。在這里我只說(shuō)明一點(diǎn),就是參數(shù)random_state的使用,它默認(rèn)是None,它也可以接收一個(gè)int數(shù)。random_state實(shí)際上就相當(dāng)于隨機(jī)種子,即random.seed()。那么這個(gè)東西它有什么作用呢,接下來(lái)先通過(guò)實(shí)際的程序來(lái)觀察一下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
當(dāng)不設(shè)置種子點(diǎn)的時(shí)候,每次隨機(jī)生成20-78之間的整數(shù)的時(shí),得到的10個(gè)數(shù)都是不同的。接下來(lái),我們?cè)O(shè)置一個(gè)隨機(jī)種子點(diǎn)如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
我們?cè)O(shè)置了種子點(diǎn)random.seed(1),兩次隨機(jī)生成的整數(shù)是一樣的。需要注意的是,種子點(diǎn)是設(shè)置在了test()方法中,所以在if __name__ == '__main__':中創(chuàng)建的兩個(gè)test()對(duì)象得到的內(nèi)容是一樣的,無(wú)論運(yùn)行多少次,得到的都是這10個(gè)數(shù);如果把種子點(diǎn)設(shè)置在test()方法的外邊,那么if __name__ == '__main__':中的兩個(gè)test()對(duì)象得到的隨機(jī)數(shù)是不同的,但是每個(gè)單獨(dú)的test()在多次運(yùn)行中生成的隨機(jī)數(shù)都是一樣的。比如第一個(gè)test()生成的隨機(jī)數(shù)為(22,34,56,76,45,67,48,57,77,49),第二個(gè)test()生成的隨機(jī)數(shù)為(22,23,24,25,26,34,56,48,69,71),那么無(wú)論運(yùn)行多少次程序,第一個(gè)test()生成隨機(jī)數(shù)都是(22,34,56,76,45,67,48,57,77,49);第2個(gè)test()生成的隨機(jī)數(shù)都是(22,23,24,25,26,34,56,48,69,71)。
接下來(lái)隨便我們換一個(gè)種子點(diǎn):random.seed(13),如下所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???
無(wú)論運(yùn)行多少次,得到的序列都是不變的。我們可以發(fā)現(xiàn),種子點(diǎn)設(shè)置的不同,最后生成的序列也是不同的,但是一旦種子點(diǎn)固定下來(lái),生成的序列就是一成不變的。random_state和random.seed()的作用是一樣的。
那么為什么要設(shè)置random_state這個(gè)參數(shù)呢,這是為了讓不同的人在運(yùn)行這個(gè)程序時(shí)得到相同的結(jié)果,而且這個(gè)參數(shù)一般只會(huì)只存在于有隨機(jī)性的方法中,比如train_test_split、SVC等。還需注意的一點(diǎn)是,一般在調(diào)參的時(shí)候,我們不要改變r(jià)andom_state的值。
上面的說(shuō)的都是線性降維,對(duì)于非線性降維,可以使用sklearn.decomposition的kernel-PCA來(lái)實(shí)現(xiàn)。
以上就是關(guān)于PCA的主要內(nèi)容,如果想了解更多關(guān)于PCA的內(nèi)容,可以查看參考文獻(xiàn)中的文章。
2. 線性判別分析(LDA)
在機(jī)器學(xué)習(xí)領(lǐng)域,LDA對(duì)應(yīng)著兩種不同的模型,其中一個(gè)模型就是這一小節(jié)要講的,Linear Discriminant Analysis(線性判別分析),主要用于分類和降維;而另一個(gè)模型為?,Latent Dirichlet Allocation(潛在狄利克雷分布),其在主題模型中有非常重要的地位,主要用于文本分類。
LDA的思想很簡(jiǎn)單:把樣本點(diǎn)投影到一條直線上,使得同類樣本的投影點(diǎn)盡可能接近、異類樣本的投影點(diǎn)盡可能遠(yuǎn)離。如下圖所示(圖片來(lái)自周志華老師的《機(jī)器學(xué)習(xí)》):
? ? ? ? ? ? ? ? ? ? ? ? ??
而我們需要的就是尋找這樣的直線或超平面,對(duì)于同樣的樣本點(diǎn),投影到不同的直線會(huì)得到完全不同的投影點(diǎn)。如下圖所示:
? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
顯然,我們更愿意得到右邊的投影直線,因?yàn)樗鼭M足了我們的需求:類內(nèi)樣本點(diǎn)距離近而類間樣本點(diǎn)有明顯的界限。通過(guò)這樣一條直線,我們把原本在二維空間的樣本點(diǎn)投影到了一維空間,實(shí)現(xiàn)了降維。同時(shí),實(shí)現(xiàn)了分類。
這是直觀上的需求,那么我們應(yīng)該通過(guò)什么來(lái)度量或者怎么通過(guò)數(shù)學(xué)來(lái)得出這樣一條直線或超平面呢。接下來(lái)以二分類為例,對(duì)LDA的原理進(jìn)行說(shuō)明。
2.1 LDA原理
給定數(shù)據(jù)集。令表示第i示例的集合,有個(gè)樣本,其中。如果將兩類樣本的樣本點(diǎn)投影到直線y上,那么。在x的特征空間上定義均值向量為:,那么在特征空間y上的均值向量為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
我們說(shuō)過(guò),將樣本點(diǎn)投影到直線上時(shí)想讓同一類別的樣本點(diǎn)盡可能距離近,而不同類別的樣本點(diǎn)盡可能遠(yuǎn)離。那么我們可以用特征空間y上兩種類別的均值向量的距離來(lái)表示類間距離,即,我們希望讓盡可能大。
那么同類投影點(diǎn)的盡可能近該怎么表示呢。在x特征空間上定義協(xié)方差,那么在特征空間y上的均值向量為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ? ??
要想使同類樣本點(diǎn)的投影點(diǎn)盡可能接近,那么只需讓同類樣本點(diǎn)的投影點(diǎn)的協(xié)方差盡可能小,即盡可能小。綜合考慮類內(nèi)間距和類間間距兩種因素,我們可以得出目標(biāo)函數(shù):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
定義為類內(nèi)散度矩陣(within-class scatter matrix):?? ??? ??
定義為類間散度矩陣(between-class scatter matrix):??
那么目標(biāo)函數(shù)可重寫為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
我們的目的是使目標(biāo)函數(shù)的分母(類內(nèi)間距)盡可能小,而目標(biāo)函數(shù)的分子(類間間距)盡可能大。那么我們需要最大化目標(biāo)函數(shù)。
對(duì)于最大化目標(biāo)函數(shù)我們有兩種方式,其中一種是對(duì)求導(dǎo)數(shù),并令求得w的值。具體求解過(guò)程如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
另一種求解方法是西瓜書中的求解,即令,那么求解?的最大值就變成了有約束條件問(wèn)題:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
由拉格朗日乘子法得到拉格朗日函數(shù):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ?
對(duì)求偏導(dǎo)并令其等于0有:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
最后得到:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ?
注意到,? ,對(duì)這個(gè)式子兩邊同時(shí)乘以得? ? ,因?yàn)閥的特征空間為以為空間,所以是標(biāo)量,不妨令為,那么可寫為:
將其帶入可解出為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
3. 獨(dú)立成分分析(ICA)
有關(guān)獨(dú)立成分分析的原理,請(qǐng)參考這篇文章。ICA的使用,建議參考sklearn中的文檔。
4. 奇異值分解(SVD)
有關(guān)奇異值分解的內(nèi)容,請(qǐng)參考這篇文章
參考文獻(xiàn)
1.?如何通俗易懂地講解什么是 PCA 主成分分析??https://www.zhihu.com/question/41120789/answer/474222214
2.?PCA的數(shù)學(xué)原理(轉(zhuǎn))? ? ??https://zhuanlan.zhihu.com/p/21580949
3.?中心化(又叫零均值化)和標(biāo)準(zhǔn)化(又叫歸一化)? ?https://blog.csdn.net/GoodShot/article/details/80373372
4.?如何理解矩陣特征值和特征向量?? ? ? ??https://www.matongxue.com/madocs/228.html.?
5. 機(jī)器學(xué)習(xí)實(shí)戰(zhàn)
6. 《機(jī)器學(xué)習(xí)》---3.4 線性判別分析? ? ? ? 周志華
7.?史上最好的LDA(線性判別分析)教程? ? ??https://blog.csdn.net/jnulzl/article/details/49894041
總結(jié)
以上是生活随笔為你收集整理的数据降维(data dimension reduction)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分享:笔记本电脑有杂音解决技巧
- 下一篇: 99 埃及分数 c语言,埃及分数数学文化