PCA算法
主成分分析(Principal Component Analysis,PCA)是最常用的一種降維方法,通常用於高維數據集的探索與可視化,還可以用作數據壓縮和預處理等。PCA可以把具有相關性的高維變量合成為線性無關的低維變量,稱為主成分。主成分能夠盡可能保留原始數據的信息。PCA的計算涉及到對協方差矩陣的理解,這篇博客提供了協方差矩陣的相關內容。PCA的算法過程:

直接用numpy實現PCA
import numpy as np n = 2 # 取對應特征值最大的n個特征向量 data = np.random.rand(10, 5) # 生成10個樣本,每個樣本5個特征 mean = np.mean(data, axis=0) # 計算原始數據中每一列的均值,axis=0按列取均值 zeroCentred_data = data - mean # 數據中心化,使每個feature的均值為0 covMat = np.cov(zeroCentred_data, rowvar=False) # 計算協方差矩陣,rowvar=False表示數據的每一列代表一個feature featValue, featVec = np.linalg.eig(covMat) # 計算協方差矩陣的特征值和特征向量 index = np.argsort(featValue) # 將特征值按從小到大排序,index是對應原featValue中的下標 n_index = index[-n:] # 取最大的n個特征值在原featValue中的下標 n_featVec = featVec[:, n_index] # 取最大的兩維特征值對應的特征向量組成映射矩陣 low_dim_data = np.dot(zeroCentred_data, n_featVec) # 降維后的數據
下圖可幫助理解:
調用sklearn庫實現PCA
這篇博客介紹了sklearn中PCA函數的具體參數。
import numpy as np from sklearn.decomposition import PCA data = np.random.rand(10, 5) # 生成10個樣本,每個樣本5個特征 pca = PCA(n_components=2) low_dim_data = pca.fit_transform(data) # 每個樣本降為2維
參考資料
[1] Python機器學習應用