PCA算法分析
這個是在研一的概率論課上做的實驗報告,PCA算法分析,對降維進行了一定程度的了解,并用PCA實現降維,具體語言是Python。
第一章 概率論與隨機過程在降維中的應用——PCA算法分析
1.1 PCA背景
1.1.1降維的意義
在大數據集上進行復雜的分析和挖掘需要很長的時間,數據降維產生更小但保持數據完整性的新數據集,在降維后的數據集上進行分析和挖掘將更有效率
數據降維的意義:
1)降低無效、錯誤的數據對建模的影響,提高建模的準確性。
2)少量且具有代表性的數據將大幅縮減數據挖掘所需要的時間。
3)降低存儲數據的成本。
1.1.2降維的作用
1.1.3降維的方法
降維方法分為線性和非線性降維,非線性降維又分為基于核函數和基于特征值的方法。如圖1-1所示。
1、線性降維方法:PCA 、ICA LDA、LFA、LPP(LE的線性表示)
2、非線性降維方法:
(1)基于核函數的非線性降維方法:KPCA 、KICA、KDA
(2)基于特征值的非線性降維方法(流型學習):ISOMAP、LLE、LE、LPP、LTSA、MVU
圖1-1 降維方法
1.2 PCA原理
主成分分析(Principal Component Analysis,PCA):主成分分析是一種用于連續屬性的數據降維方法,它構造了原始數據的一個正交變換,新空間的基地去除了原始空間基底下數據的相關性,只需要使用少數新變量就能夠解釋原始數據中大部分變量。在應用中通常是選出比原始變量個數少,能夠解釋大部分數據中的變量的幾個新變量,即所謂的主成分,來代替原始變量進行建模。通過線性變化,將原始數據集變化為一組各維度線性無關的表示。
PCA把原先的n個特征用數目更少的n’個特征取代,新特征是舊特征的線性組合,這些線性組合最大化樣本方差,盡量使新的n’個特征互不相關。
例如將三維空間的物體降維至二維空間,如圖1-2所示。
圖1-2 降維示例
1.3 PCA算法流程
1.3.1 PCA推導
首先將原特征空間的樣本點表示為: xi? ,并認為其已經中心化。樣本空間中的所有向量可構成矩陣X。
將降維后的特征空間中的投影點表示為:WTxi ,W=(w1, w2 , …. , wd),其中W為投影變換后的新的坐標系,wi是標準正交基向量。
則投影后樣本點的方差表示為:1ni=1n(WTxi?)2????????????????? ??(1)
公式(1)可將矩陣的乘法展開寫成: 1ni=1n(WTxi)(WTxi)T????????? (2) ??
?去掉括號為:?1ni=1nWTxixiTW????????????????????? ??????(3)
由于W與加和符號無關,故提出來:?1nWT?(i=1nxixiT)W? ?????????(4) ????????可以將公式(4)寫成所有樣本點組成的矩陣相乘:?1nWT?(XXT)W??? ??(5)
建立目標函數: J(W)=WT?XXTW ,添加W為單位向量的約束條件:WTW=1
對方差進行拉格朗日乘子法:lw=WT?XXTW-λ(WTW-1),并對w求偏導:???l(w)?w=0??è? XXTW =λW
對協方差矩陣XXT進行特征值分解,最大特征值λ1對應方差,特征向量w1為第一主成分的方向。
1.3.2 PCA算法流程
| PCA |
| 輸入:n維的樣本集D={x1 , x2 , x3 ,…, xm}; 輸出:降到n’ 維的樣本集D’ ; 1:? 對所有樣本進行中心化:xi←xi-1mi=1mxi?; 2:? 計算所有樣本的協方差矩陣 XXT ?; 3: ?對協方差矩陣XXT 做特征值分解 ; 4: ?取出最大的n’ 特征值對應的特征向量 w1 ,w2 ,…, w n’ ?將其標準化,組成新的特征向量矩陣W ; 5:? 對于每一個樣本xi ,轉化為新樣本 zi =WTxi ;? 6:? Return D’ ={z1 , z2 , z3 ,…, zm} ;? |
1.4 PCA應用實例
1.4.1 普通數據降維
?????? 原樣本為二維空間上的數據,如圖1-3所示。
圖1-3 二維空間的樣本數據
實驗環境為:Win10,RAM大小:8G ,CPU:i5-7200U,代碼語言為Python,運行環境:CMD控制臺窗口。
實驗代碼如下:
import numpy as npimport matplotlib.pyplot as pltdata=np.array([[2.5,2.4],[0.5,0.7],[2.2,2.9],[1.9,2.2],[3.1,3.0],[2.3,2.7],[2.0,1.6],[1.0,1.1],[1.5,1.6],[1.1,0.9]])plt.plot(data[:,0],data[:,1],'*')meandata=np.mean(data,axis=0)????????? #計算每一列的平均值data=data-meandata???????????????????? #均值歸一化covmat=np.cov(data.transpose())??????? #求協方差矩陣eigVals,eigVectors=np.linalg.eig(covmat) #求解特征值和特征向量pca_mat=eigVectors[:,-1]??????????????? #選擇第一個特征向量pca_data=np.dot(data,pca_mat)plt.show()print(pca_data)降維后的結果為一維數據,[-0.82797019? 1.77758033 -0.99219749 -0.27421042 -1.67580142?? -0.9129491? 0.09910944? 1.14457216? 0.43804614? 1.22382056],結果如圖1-4所示。
圖1-4 運行結果
?
總結
- 上一篇: 酷栈云桌面开启“3+2”混合办公新趋势
- 下一篇: linux下libnng的移植