PCA降維的原理及步驟

*****降維的作用*****

①數據在低維下更容易處理、更容易使用;
②相關特徵,特別是重要特徵更能在數據中明確的顯示出來;如果只有兩維或者三維的話,更便於可視化展示;
③去除數據噪聲
④降低算法開銷


*****降維通俗點的解釋*****

一些高維度的數據,比如淘寶交易數據,爲便於解釋降維作用,我們在這假設有下單數,付款數,商品類別,售價四個維度,數據量上百萬條,對於下單數和付款數,我們可以認爲兩者是線性相關的,即知道下單數,我們可以得到付款數,這裏很明顯這兩個屬性維度有冗餘,去掉下單數,保留付款數,明顯能再保證原有數據分佈和信息的情況下有效簡化數據,對於後面的模型學習會縮短不少時間和空間開銷。這就是降維,當然並不是所有數據中都會有過於明顯線性相關的屬性維度,我們降維後最終的目標是各個屬性維度之間線性無關。


*****PCA降維步驟原理******

首先既然要度量那些是否存在相關的屬性,我們就要用到協方差,在博客相關分析中有介紹,這裏不再贅述,協方差衡量的是2維屬性間的相關性,對於n個維度的屬性,就需要協方差矩陣,其對角線爲各維度的方差。

步驟:

                       設有m條n維數據。

                      1)將原始數據按列組成n行m列矩陣X

                      2)將X的每一行(代表一個屬性字段)進行零均值化,即減去這一行的均值

                      3)求出協方差矩陣

                      4)求出協方差矩陣的特徵值及對應的特徵向量r

                      5)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P

                      6)Y=PX即爲降維到k維後的數據


*****關於維數k的選擇******

使用一個公式error=,表示壓縮後的誤差,m所有特徵的個數,然後確定一個閾值x,比如0.01,選取一個K,使得error < x則我們認爲這個m可以接受,否則嘗試其他.



**************python中sklearn庫的pca實現**************************

from sklearn.decomposition import PCA
import numpy as np
from sklearn.preprocessing import StandardScaler

x=np.array([[10001,2,55], [16020,4,11], [12008,6,33], [13131,8,22]])

# feature normalization (feature scaling)
X_scaler = StandardScaler()
x = X_scaler.fit_transform(x)

# PCA
pca = PCA(n_components=0.9)# 保證降維後的數據保持90%的信息
pca.fit(x)
pca.transform(x)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章