本文是在主成分分析(PCA)原理的解讀基礎(chǔ)上添加一些自己的理解。
一、相關(guān)背景
在很多領(lǐng)域的研究和應(yīng)用中,一般需要觀察豐富的多變量數(shù)據(jù),收集大量的數(shù)據(jù)并進(jìn)行分析,尋找規(guī)律。 多元大數(shù)據(jù)集無(wú)疑將為研究和應(yīng)用提供豐富的信息,也在一定程度上減少數(shù)據(jù)采集的工作量。 更重要的是,很多情況下,很多變量之間可能存在相關(guān)性,從而降低了問(wèn)題分析的復(fù)雜度。 如果對(duì)每個(gè)指標(biāo)單獨(dú)進(jìn)行分析,分析往往是孤立的,不能完全依賴數(shù)據(jù)中的信息。 因此,盲目降低指標(biāo)會(huì)丟失很多有用的信息,進(jìn)而形成錯(cuò)誤的推論。
因此,需要找到一種合理的方法,在減少需要分析的指標(biāo)的同時(shí),盡量減少原始指標(biāo)所包含信息的損失,從而達(dá)到對(duì)收集到的數(shù)據(jù)進(jìn)行綜合分析的目的。 由于變量之間存在一定的相關(guān)性,因此可以考慮將密切相關(guān)的變量分成盡可能少的新變量,使這些新變量成對(duì)不相關(guān),這樣就可以用更少的綜合指標(biāo)來(lái)區(qū)分代表每個(gè)變量中存在的各種信息。 主成分分析和因子分析就屬于這種聚類(lèi)算法。
2. 數(shù)據(jù)聚類(lèi)
聚類(lèi)是一種預(yù)處理高維特征數(shù)據(jù)的方法。 聚類(lèi)就是保留高維數(shù)據(jù)中一些最重要的特征并消除噪聲和不重要的特征,從而節(jié)省大量的時(shí)間和成本。 在實(shí)際生產(chǎn)和應(yīng)用中,在一定的信息丟失范圍內(nèi),聚類(lèi)可以為我們節(jié)省大量的時(shí)間和成本。 聚類(lèi)也成為一種非常廣泛使用的數(shù)據(jù)預(yù)處理技術(shù)。
集群有一些優(yōu)點(diǎn):
1)使數(shù)據(jù)集更易于使用。
2)增加算法的預(yù)估成本。
3)消除噪音。
4)使結(jié)果易于理解。
聚類(lèi)算法有很多種,如奇異值分解(SVD)、主成分分析(PCA)、因子分析(FA)、獨(dú)立成分分析(ICA)等。
3. PCA原理解讀 3.1 PCA的概念
PCA(),即主成分分析,是最廣泛使用的數(shù)據(jù)聚類(lèi)算法之一。 PCA的主要思想是將n維特征映射到k維。 這個(gè)k維就是一個(gè)新的正交特征,也稱為主成分,是在原來(lái)的n維特征的基礎(chǔ)上重構(gòu)的k維特征。 PCA的工作是從原始空間中依次找到一組相互正交的坐標(biāo)軸,新坐標(biāo)軸的選擇與數(shù)據(jù)本身密切相關(guān)。 其中,第一個(gè)新坐標(biāo)軸選擇為原始數(shù)據(jù)中殘差最大的方向,第二個(gè)新坐標(biāo)軸選擇為在與第一個(gè)坐標(biāo)軸正交的平面內(nèi)推動(dòng)殘差最大的方向,第三個(gè)新坐標(biāo)軸選擇為在與第一個(gè)坐標(biāo)軸正交的平面內(nèi)推動(dòng)殘差最大的方向。 axis 它是與第 1 軸和第 2 軸正交的平面中的最大殘差。 以此類(lèi)推力的正交分解是什么量,可得到n個(gè)這樣的坐標(biāo)軸。 通過(guò)這些方法得到的新坐標(biāo)軸,我們發(fā)現(xiàn)大部分殘差都包含在上面的k個(gè)坐標(biāo)軸??中,而之前的坐標(biāo)軸中包含的殘差幾乎為0。因此,我們可以忽略剩余的坐標(biāo)軸,并且只保留富含大部分殘差的上k個(gè)坐標(biāo)軸??。 實(shí)際上,這相當(dāng)于只保留包含殘差最多的維度的特征,而忽略包含殘差幾乎為0的特征維度,從而實(shí)現(xiàn)數(shù)據(jù)特征的聚類(lèi)處理。
思考:如何得到這個(gè)包含最大差異的主成分方向?
答:其實(shí)就是通過(guò)估計(jì)數(shù)據(jù)矩陣的共殘差矩陣,得到共殘差矩陣的特征值特征向量,特征最大的k個(gè)特征對(duì)應(yīng)的特征向量組成的矩陣選擇值(即最大殘差)。 這樣就可以將數(shù)據(jù)矩陣變換到新的空間,實(shí)現(xiàn)數(shù)據(jù)特征的聚類(lèi)。 (為什么特征值最大的方向就是殘差最大的方向。n維特征空間中的樣本分布在不規(guī)則區(qū)域,用k維正交單位向量來(lái)表示。特征值*特征向量是k維空間中能夠表示的面積,所以特征值越大,表示的面積越大,對(duì)應(yīng)的樣本在這個(gè)方向上越分散,殘差也越大。參考:)
由于獲取共殘差矩陣的特征值特征向量有兩種方式:特征值分解共殘差矩陣、奇異值分解共殘差矩陣,因此PCA算法的實(shí)現(xiàn)方式有兩種:基于特征值分解共殘差矩陣實(shí)現(xiàn)PCA算法,PCA算法基于SVD分解共殘差矩陣。
既然提到了協(xié)殘差矩陣,我們就簡(jiǎn)單介紹一下殘差和協(xié)殘差的關(guān)系。 然后簡(jiǎn)單介紹了特征值分解矩陣的原理和奇異值分解矩陣的原理。 大致介紹是因?yàn)槲以谥暗奈恼隆毒仃嚪纸猓禾卣髦捣纸猓‥VD)、奇異值分解(SVD)中已經(jīng)介紹過(guò)特征值分解原理和奇異值分解原理,所以這里不再重復(fù)。
3.2 核殘差和散點(diǎn)矩陣
樣本平均值:
樣本殘差:
樣本 X:[10,15,23,11,42,9,11,8,11,21] 樣本 Y:[15,46,21,9,45,48,21,5,12,20] Co -(注意這里的樣本實(shí)際上是指數(shù)據(jù)集的特征):
從前面的公式,我們可以得到以下推論:
(1)殘差的估計(jì)公式是基于一維特征,即對(duì)相同特征的不同樣本的值進(jìn)行估計(jì); 而共殘差必須至少滿足二維特征; 殘差是共同殘差的特殊情況。
(2)殘差和共殘差的除數(shù)為n-1,即得到殘差和共殘差的無(wú)偏可能性。
當(dāng)共殘差為正時(shí),表示X和Y呈正相關(guān); 當(dāng)共同殘差為負(fù)時(shí),表示X和Y負(fù)相關(guān); 當(dāng)co-為0時(shí),表示X和Y相互獨(dú)立。 Cov(X,X)是X的殘差。當(dāng)樣本是n維數(shù)據(jù)時(shí),它們的共殘差實(shí)際上是一個(gè)共殘差矩陣(對(duì)稱方陣)。 例如,對(duì)于3維數(shù)據(jù)(x,y,z)(每個(gè)樣本有三列特征x,y,z,共n個(gè)樣本),估計(jì)的共同殘差為:
散布矩陣定義為:
數(shù)據(jù) X 的散布矩陣為 。 雖然共殘差矩陣和散布矩陣密切相關(guān),但散布矩陣是共殘差矩陣除以(總數(shù)據(jù)量-1)。 因此它們的特征值和特征向量是相同的。 這里值得注意的是,散布矩陣是SVD奇異值分解中的一個(gè)步驟,因此PCA和SVD密切相關(guān)。
3.3 特征值分解矩陣原理
(1) 特征值和特征向量
如果向量v是矩陣A的特征向量,則它必須用以下方式表示:
其中,λ是特征向量v對(duì)應(yīng)的特征值,矩陣的一組特征向量就是一組正交向量。
(2)特征值分解矩陣
對(duì)于矩陣A,有一組特征向量v,對(duì)這組向量進(jìn)行正交化和單位化,得到一組正的電匯向量。 特征值分解就是將矩陣A分解為如下公式:
其中,Q為矩陣A的特征向量組成的矩陣,為對(duì)角矩陣,對(duì)角線上的元素為特征值。
這部分的詳細(xì)內(nèi)容可以看我的文章《機(jī)器學(xué)習(xí)中的SVD總結(jié)》,地址:機(jī)器學(xué)習(xí)中的SVD總結(jié)
3.4 SVD分解矩陣原理
奇異值分解是一種可以應(yīng)用于任何矩陣的分解方法。 對(duì)于任何矩陣 A,總是存在奇異值分解:
假設(shè)A是一個(gè)m*n矩陣,則得到的U是一個(gè)m*m方陣,U上面的正交向量稱為左奇異向量。 Σ 是一個(gè) m*n 矩陣。 不僅Σ對(duì)角線上的其他元素都為0,而且對(duì)角線上的元素稱為奇異值。 是v的轉(zhuǎn)置矩陣,是一個(gè)n*n矩陣,其上的正交向量稱為右奇異值向量。 而且一般來(lái)說(shuō),我們會(huì)將Σ上的值按降序排列。
SVD分解矩陣A的步驟:
(1)求
的特征值和特征向量,使用單位化特征向量形成U。
(2)尋求
的特征值和特征向量,使用單位化特征向量形成V。
(3) 遺囑
或者
然后將特征值的平方根形成Σ。
3.5 PCA算法的兩種實(shí)現(xiàn)
(1)實(shí)現(xiàn)基于特征值分解共殘差矩陣的PCA算法
輸入:數(shù)據(jù)集
,需要降維到k維。
1)去平均(即去中心化),即將每個(gè)特征除以各自的平均值。
2)估計(jì)共殘差矩陣
,注:這里,樣本數(shù)n或n-1劃分與否,雖然對(duì)得到的特征向量沒(méi)有影響。
3)通過(guò)特征值分解的方式求出共殘差矩陣的特征值和特征向量。
4)將特征值從大到小排序力的正交分解是什么量,選擇其中最大的k。 然后,將對(duì)應(yīng)的k個(gè)特征向量作為行向量,構(gòu)成特征向量矩陣P。
5) 將數(shù)據(jù)變換到由k個(gè)特征向量建立的新空間中,即Y=PX。
總結(jié):
1)關(guān)于為什么使用這部分
,其中富含非常復(fù)雜的線性代數(shù)理論推論。 如果你想了解詳情,可以閱讀下面的文章。
-PCA的物理原理
2)關(guān)于矩陣為什么要用特征值來(lái)分解,是因?yàn)?span style="display:none">bca物理好資源網(wǎng)(原物理ok網(wǎng))
它是一個(gè)方陣,可以很容易求出特征值和特征向量。 事實(shí)上,也可以使用奇異值分解,這是求特征值和特征向量的另一種方法。
作為一個(gè)反例:
以X為例,我們使用PCA將這兩行數(shù)據(jù)縮減為一行。
1)由于X矩陣的每一行已經(jīng)是零均值,所以不需要去均值。
2)求共殘差矩陣:
3)求出共殘差矩陣的特征值和特征向量。
求解后的特征值為:
對(duì)應(yīng)的特征向量為:
相應(yīng)的特征向量是通解,可以取任意實(shí)數(shù)。 經(jīng)過(guò)這樣的歸一化后的特征向量為:
4)矩陣P為:
5) 最后,我們將 P 的第一行除以數(shù)據(jù)矩陣 X 以獲得聚類(lèi)表示:
結(jié)果如圖1所示:
圖 1:Data X 聚類(lèi)投影結(jié)果
注意:如果我們用特征值分解共殘差矩陣,那么我們只能得到一個(gè)方向的PCA聚類(lèi)。 該方向是從行(或列)方向?qū)?shù)據(jù)矩陣X進(jìn)行壓縮和聚類(lèi)。
(2)基于SVD分解共殘差矩陣實(shí)現(xiàn)PCA算法
輸入:數(shù)據(jù)集
,需要降維到k維。
1)去平均值,即將每一位特征除以各自的平均值。
2) 估計(jì)共殘差矩陣。
3)通過(guò)SVD估計(jì)共殘差矩陣的特征值和特征向量。
4)將特征值從大到小排序,選擇其中最大的k。 然后,將對(duì)應(yīng)的k個(gè)特征向量作為列向量,構(gòu)成特征向量矩陣。
5)將數(shù)據(jù)變換到由k個(gè)特征向量創(chuàng)建的新空間中。
在PCA聚類(lèi)中,我們需要找到樣本共殘差矩陣
最大的k個(gè)特征向量,然后利用最大的k個(gè)特征向量組成的矩陣做低維投影聚類(lèi)。可見(jiàn),在這個(gè)過(guò)程中,需要找到共殘差矩陣
,當(dāng)樣本數(shù)量很多,樣本特征數(shù)量很多的時(shí)候,這個(gè)估計(jì)還是很大的。 當(dāng)我們使用SVD分解共殘差矩陣時(shí),SVD有兩個(gè)好處:
(1) 有一些SVD實(shí)現(xiàn)算法不需要求共殘差矩陣
還可以找到我們正確的奇異矩陣V。換句話說(shuō),我們的PCA算法可以通過(guò)SVD而不是特征分解來(lái)完成,這在樣本量很大時(shí)非常有效。 事實(shí)上,-learn 的 PCA 算法背后的真正實(shí)現(xiàn)是使用 SVD 而不是特征值分解。
(2) 請(qǐng)注意,PCA 僅使用我們的 SVD 的左奇異矩陣,而不使用右奇異值矩陣。 右奇異值矩陣有什么用?
假設(shè)我們的樣本是一個(gè)m*n的矩陣X,如果我們通過(guò)SVD求出該矩陣
由最大的k個(gè)特征向量組成的k*n矩陣
,那么我們可以執(zhí)行以下操作:
可以得到m*k的矩陣X'。 與我們?cè)瓉?lái)的m*n矩陣X相比,列數(shù)從n減少到k。 可以看出列數(shù)被壓縮了。 也就是說(shuō),左奇異矩陣可以用來(lái)壓縮行數(shù); 右奇異矩陣可用于壓縮列(即特征維數(shù))。 這就是為什么我們使用SVD分解共殘差矩陣來(lái)實(shí)現(xiàn)PCA以獲得兩個(gè)方向(即行和列方向)的PCA聚類(lèi)。
4.主成分分析示例
(1)PCA的實(shí)現(xiàn):
##Python實(shí)現(xiàn)PCA
import numpy as np
def pca(X,k):#k is the components you want
#mean of each feature
n_samples, n_features = X.shape
mean=np.array([np.mean(X[:,i]) for i in range(n_features)])
#normalization
norm_X=X-mean
#scatter matrix
scatter_matrix=np.dot(np.transpose(norm_X),norm_X)
#Calculate the eigenvectors and eigenvalues
eig_val, eig_vec = np.linalg.eig(scatter_matrix)
eig_pairs = [(np.abs(eig_val[i]), eig_vec[:,i]) for i in range(n_features)]
# sort eig_vec based on eig_val from highest to lowest
eig_pairs.sort(reverse=True)
# select the top k eig_vec
feature=np.array([ele[1] for ele in eig_pairs[:k]])
#get new data
data=np.dot(norm_X,np.transpose(feature))
return data
X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
print(pca(X,1))
里面的代碼實(shí)現(xiàn)了對(duì)數(shù)據(jù)X的特征進(jìn)行聚類(lèi),結(jié)果如下:
(2)將PCA與我們的PCA進(jìn)行比較:
##用sklearn的PCA
from sklearn.decomposition import PCA
import numpy as np
X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
pca=PCA(n_components=1)pca.fit(X)
print(pca.transform(X))
結(jié)果如下:
工作了半天,結(jié)果卻不一樣! 我們來(lái)剖析一下吧!
中的PCA由函數(shù)實(shí)現(xiàn),對(duì)奇異值分解結(jié)果進(jìn)行處理。 由于ui*σi*vi=(-ui)*σi*(-vi),即u和v同時(shí)求逆得到的結(jié)果是相同的,而這會(huì)導(dǎo)致PCA聚類(lèi)得到的結(jié)果不同(雖然兩者都是正確的)。 具體可以參考參考文章9或者自己分析PCA的源碼。
5. PCA的理論推導(dǎo)
PCA有兩種容易理解的解釋?zhuān)海?)最大方差理論; (2)最小化聚類(lèi)帶來(lái)的損失。 兩種方法都會(huì)產(chǎn)生相同的結(jié)果。
這里我只介紹最大方差理論:
在信號(hào)處理中,認(rèn)為信號(hào)有較大的殘差,而噪聲有較小的殘差。 幀率是信號(hào)與噪聲的殘差比,越大越好。 樣本在u1上的投影殘差較大,而在u2上的投影殘差較小,因此可以認(rèn)為在u2上的投影是由噪聲引起的。
為此,我們覺(jué)得最好的k維特征是n維樣本點(diǎn)轉(zhuǎn)為k維后,每個(gè)維度的樣本殘差都很大。
例如,我們將右圖中的5個(gè)點(diǎn)投影到某個(gè)維度上,用一條經(jīng)過(guò)原點(diǎn)的直線來(lái)表示(數(shù)據(jù)已經(jīng)居中):
假設(shè)我們選擇兩條不同的直線進(jìn)行投影,那么左右哪一條更好呢? 根據(jù)我們之前的殘差最大化理論,右邊那個(gè)是好的,因?yàn)橥队暗臉颖军c(diǎn)之間的殘差是最大的(也可以說(shuō)投影的絕對(duì)值之和是最大的)。
估計(jì)投影的方法如右圖所示:
圖中,黑點(diǎn)代表樣本,白點(diǎn)代表在u上的投影,其中u是直線的斜率和直線的方向向量,是單位向量。 黑點(diǎn)是在u上的投影點(diǎn),到原點(diǎn)的距離是(即或那么)。
6、選擇聚類(lèi)后的維度K(主成分個(gè)數(shù))
主成分個(gè)數(shù)K如何選擇? 首先定義兩個(gè)概念:
選擇不同的K值,然后利用下面的多項(xiàng)式不斷估計(jì),選出能夠滿足下面多項(xiàng)式條件的最小K值。
t值可以自己確定,例如t值為0.01,說(shuō)明PCA算法保留了99%的主要信息。 當(dāng)你認(rèn)為偏差需要更小時(shí),可以將t值設(shè)置得小一些。 上式也可以用SVD分解時(shí)形成的S矩陣來(lái)表示,例如下面的多項(xiàng)式:
:
(一)主成分分析(PCA)原理解讀
(2)機(jī)器學(xué)習(xí)之PCA主成分分析-steed灬-博客園
(3)簡(jiǎn)單易學(xué)的機(jī)器學(xué)習(xí)算法——主成分分析(PCA)
(4)PCA在機(jī)器學(xué)習(xí)實(shí)戰(zhàn)中的應(yīng)用
(5)機(jī)器學(xué)習(xí)中的物理學(xué)(5)-強(qiáng)大的矩陣奇異值分解(SVD)及其應(yīng)用--博客園
(6) PCA與SVD關(guān)系的補(bǔ)充
(7)-PCA的物理原理
(8)PCA(主成分分析)實(shí)現(xiàn)
(九)主成分分析PCA()在部分源碼中的應(yīng)用與分析