pca全稱是principle component analysis,譯為主成分分析,比如描述乙個人資訊時會用體重、身高、髮型、愛好、收入、職業等資訊,有時根據乙個人的體重、身高、髮型基本可以確定其性別,例如說乙個女孩子是假小子,可能這個女孩有乙個板寸頭、身材很高,從眾多屬性中選取一兩個,而無需其他屬性作為參考就確定了乙個分類,pca就是這樣乙個處理資料常用手段,即利用較少的屬性對一組資料分類,pca是乙個降維的資料處理手段,現實中的資料在計算機中可以用乙個m行n列矩陣表示,n列可以是體重、身高、髮型、愛好、收入、職業等屬性資訊,每一行就代表乙個具體人。利用pca降維的過程是利用線性代數處理資料的過程,先介紹與pca有關的線性代數知識。
一、基變換(座標變換)
基變換利用線性空間不同基表示同乙個向量時,向量本身沒有發生變化,變化的只是向量在不同基下座標值。基變換實現降維後原座標向量變為稀疏向量,即大部分座標值變為0,而座標向量非零部分所對應的基為資料的主要特徵部分,基變換的目的就是要找到滿足以上條件的基,線性空間不同基之間可以相互轉化,接下來介紹過渡矩陣的概念。
二、線性對映與線性變換
將乙個rm向量對映成乙個rn向量則稱為乙個線性對映,比如將乙個三維向量(2,1,3)對映成二維向量(2,1),也可以維度變大,如對映成(2,1,3,10),如果線性對映後的向量維度和原來一樣即rm對映成rm,這種線性對映稱為線性變換。可以將線性對映理解為函式,那麼兩者之間很多概念是對應的,比如m維線性空間有m個基,通過線性對映將這m個基對映為乙個n維空間,新生成的n維空間相當於函式中值域。
線性變換和基變換都在乙個空間裡將乙個向量對映成另乙個向量,所不同的是,基變換對映的向量與原向量是一一對映(單射、滿射),並且是恒等對映,即前後表示的是乙個向量;線性變換則不同,例如將乙個三維座標(1,2,3)通過線性變換變成了(1,2,0)即將z軸座標變為0,這代表將任意三維向量投影到xoy平面,相應的(1,2,3),(1,2,4),(1,2,5)等等都可以變換為(1,2,0),這就導致三維空間產生向量之間多對一對映關係。線性變換的過程也可以用乙個矩陣來描述,該矩陣叫做線性變換的矩陣表示。
當矩陣表示是滿秩時,就能產生一一對映的效果;而矩陣表示不是滿秩即為奇異矩陣時,產生的是多對一對映效果。這是因為線性變換後的值域的維度加上零空間的維度等於原來空間的維度,只有矩陣表示滿秩時,線性變換t的零空間的維度是0(a滿秩時,方程ax=0的解只有全部是0),此時線性變換值域的維度才等於原來的維度。
基變換可以理解為測量乙個1cm的物體,用帶有厘公尺尺子測量時,顯示的刻度是1,而用英吋的尺子測量時刻度是0.39(一厘公尺=0.39英吋),尺子刻度對應同乙個物體在不同座標系的座標值,座標系、基(更換不同單位的尺子)發生變化後,物體本身沒有發生變化。線性變換變換更像乙個熟練工人的工具機,既有很多不同單位尺子(可以實現基變換的效果),也可以加工零件使零件使之可大可小。
觀察(2.1)式,線性空間基變化時座標向量也同時變化,基與座標同時變化就確保了基變換前後表示的是同乙個向量,再來看經過線性變換後向量座標的變化,通過下面敘述,可以認為一次線性變換包含了兩次基切換的過程。
(2.3)中線性變換後基也可以像基變換一樣用(t(α1),t(α2),t(α3),...,t(αn))=(β1,β1,β3,..βn)表示,與公式(2.1)不同的是,線性變換後坐標沒有變化,依然是變換前座標(x1,x2,x3,..xn)。之前說過,基變換時座標同時變化,確保了前後都是同乙個向量,而線性變換後的向量還是沿用之前座標,這就導致線性變換實際上產生了乙個新的向量;另外一點,當線性變換的矩陣表示a不是滿秩時,t(α1),t(α2),t(α3),...,t(αn)一定有0向量,這就是先前敘述的『線性變換後的值域的維度加上零空間的維度等於原來空間的維度』,而基變換中所有的基都是線性不相關的非零向量。
可以看出,線性變換包含了兩次換基的過程:第一次基變為(t(α1),t(α2),t(α3),...,t(αn)),原向量變為新的向量w;第二次再回到基α1,α2,α3,...,αn下,並把向量w用基α1,α2,α3,...,αn線性表示,第二次是基變換過程。由於線性變換最後一步是回到原來基下,所以線性變換的從結果來看是在原線性空間中,將乙個向量變換為另乙個向量。基變換、線性變換也可以這樣歸納:基變換是向量不動,座標系發生變化;而線性變換是座標繫不動(其實是動了2次,結果又回到原來座標系下),向量發生了變化。
三、pca演算法原理
pca演算法使用了用基變換,需要補充一點,本例中基變換的過渡矩陣p是酉矩陣,而酉矩陣是乙個可逆矩陣、標準正交矩陣,同時有性質pt=p-1,將這個等式兩邊取轉置,還可以得到酉矩陣具有下面性質:
接下來結合一段python**來展示pca的演算法過程,選取例子是熟悉的鳶尾花資料。這組鳶尾花資料可以分為三類,分別是山鳶尾 ,北美鳶尾,變色鳶尾,而鳶尾花具有4個屬性,分別是花萼的長度、花萼的寬度、花瓣的長度,花瓣的寬度,演算法展示的是利用其中兩個屬性即完成分類的過程,具體**如下:
import numpy as npimport math
from sklearn.datasets import load_iris
from sklearn.preprocessing import scale
import scipy
import matplotlib.pyplot as plt
plt.rcparams['font.sans-serif']=['simhei']
plt.rcparams['axes.unicode_minus'] = false
data=load_iris()
specimen=data['data']
target=data['target']
specimen_scale=scale(specimen,with_mean=true,with_std=true,axis=0)#1.1
specimen_corr=np.corrcoef(specimen_scale.t)#1.2
eig_val,eig_vec=scipy.linalg.eig(specimen_corr) #1.3
p=eig_vec#1.4 過渡矩陣
#p是酉矩陣 p的逆等於p的轉置矩陣
#下面**可以直接寫成specimen_new_cor=np.dot( specimen_scale, p)
specimen_new_cor=np.dot( specimen_scale, np.linalg.inv(p).t )#1.5
plt.figure(1)
plt.scatter(specimen_new_cor[...,0],specimen_new_cor[...,1],c=target )
plt.xlabel("主成分一")
plt.ylabel("主成分二")
三個不同顏色代表不同鳶尾花類別,上圖說明使用兩個成分就可以較為清晰的將資料分成3類,接下來就幾個關鍵點說明一下。
(注釋為1.1):實現量綱統一
specimen_scale=scale(specimen,with_mean=true,with_std=true,axis=0) 這句**的意思是將每一列資料,即所有來自同乙個屬性的資料做量綱上統一,具體辦法是每個數字減去平均數後除以方差。
(注釋為1.2,1.3):利用特徵向量分解找出資料最大變化的方向,即發現四個新的基。
K L變換和 主成分分析PCA
說pca的話,必須先介紹一下k l變換了。k l變換是karhunen loeve變換的簡稱,是一種特殊的正交變換。它是建立在統計特性基礎上的一種變換,有的文獻也稱其為霍特林 hotelling 變換,因為他在1933年最先給出將離散訊號變換成一串不相關係數的方法。k l變換的突出優點是它能去相關性...
主成分分析逆變換 實驗四主成分變換與逆變換
實驗四 主成分變換和主成分逆變換 一實驗目的 通過本次實習操作,了解遙感影象主成分變換和主成分逆變換的原理和基本變換過程,掌握有關變換操作的基本方法和步驟,深刻理解遙感影象主成分變換和主成分逆變換的意義 並對結果進行比較分析。二實驗原理 k l變換是離散 karhunen loeve 變換的簡稱,又...
線性空間與線性變換
1.1線性空間 廣義的概念 如何證明乙個向量集合是線性空間?1.首先問下什麼是線性空間?2.如何表示該集合中的全部向量?知識點1 首先我們需要知道什麼是空間?空間其實就是向量的集合,而什麼是線性空間呢?定義了線性運算的非空集合。線性運算指的是加法和數乘在非空集合v封閉。定義1.1 數域 乙個對和 差...