日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PCA、SVD、ZCA白化理论与实现

發布時間:2023/12/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PCA、SVD、ZCA白化理论与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

在UFLDL中介紹了主成分分析這一塊的知識,而且當時學機器學習的時候,老師是將PCA和SVD聯系起來將的,同時UFLDL也講到了使用PCA做數據白化whitening處理,這個詞經常在論文里面看到。

國際慣例,參考博客:

UFLDL的PCA章節

PRML的第12.1 PCA章節

知乎深入理解PCA與SVD的關系

PCA and SVD explained with numpy

Relationship between SVD and PCA. How to use SVD to perform PCA?

百度百科正交投影

知乎正交投影

SVD(奇異值分解)小結

特征分解

協方差矩陣一定是滿秩的嗎?

PCA、ZCA白化

PCA理論

在PRML中給出了PCA的兩種定義:

  • 數據在低維線性空間上的正交投影,這個線性空間被稱為主子空間,使得投影數據的方差被最大化
  • 平均投影代價最小的線性投影。其中平均投影代價是數據點與投影點之間的平均平方距離。

如下圖就是將二維數據投影一維空間u1u_1u1?

上圖中紅色的二維數據點被正交投影到主子空間(紫色的線),PCA的目的就是想讓投影后的數據(綠色點)具有最大的方差。 其中正交投影被神乎其神的說了一大堆理論,其實就是投影線垂直于投影面。

通常情況下,我們都是用第一個定義去理解PCA的,設每個樣本都有D個屬性,即D維向量,總共有N個樣本。

第一步將數據投影到D維向量u1u_1u1?上,一般來說我們設這個u1u_1u1?是D維空間中的方向向量:
x^=u1Tx\hat{x}=u_1^Tx x^=u1T?x
第二步求投影方差
1N{u1Txn?u1Txˉ}2=u1TSu1\frac{1}{N}\{u_1^Tx_n-u_1^T\bar{x}\}^2=u_1^TSu_1 N1?{u1T?xn??u1T?xˉ}2=u1T?Su1?
其中xˉ\bar{x}xˉ所有樣本均值xˉ=1N∑n=1Nxn\bar{x}=\frac{1}{N}\sum_{n=1}^Nx_nxˉ=N1?n=1N?xn?,注意不是每個樣本所有屬性求均值。

其中SSS是原數據集的協方差矩陣:
S=1N∑n=1N(xn?xˉ)(xn?xˉ)TS=\frac{1}{N}\sum_{n=1}^N(x_n-\bar{x})(x_n-\bar{x})^T S=N1?n=1N?(xn??xˉ)(xn??xˉ)T
【注】協方差反映的是屬性與屬性之間的關系,而非樣本與樣本之間的關系。

第三步約束

上面我們經常約束u1u_1u1?是方向向量,那么
u1Tu1=1u_1^Tu_1=1 u1T?u1?=1
結合這個約束以及為了讓方差最大化的目標,可以利用拉格朗日乘數法建立下式:
u1TSu1+λ1(1?u1Tu1)u_1^TSu_1+\lambda_1(1-u_1^Tu_1) u1T?Su1?+λ1?(1?u1T?u1?)
當上式導數為零時,駐點滿足
Su1=λ1u1Su_1=\lambda_1u_1 Su1?=λ1?u1?
很容易發現u1u_1u1?一定是SSS的特征向量,同時也能發現當λ1\lambda_1λ1?越大,方差越大。所以最大特征值對應的特征向量為第一主成分。同理就能利用特征分解的方法求解到第二、三、…主分量。

綜上,可以得到PCA的一般步驟為:

  • 整理原始矩陣Xn×mX_{n \times m}Xn×m? ,代表n個樣本,每個樣本維度為m

  • 求原始矩陣Xn×mX_{n \times m}Xn×m?的協防差陣Sm×m=Cov(X)S_{m\times m}=Cov(X)Sm×m?=Cov(X)

  • 求解協防差陣的特征值和特征向量。

  • 選取最大的K(人為給定)個特征值所對應的特征向量組成構成矩陣Wm×kW_{m\times k}Wm×k?

  • 直接進行矩陣計算,就得到了降維后的數據

Zn×k=Xn×mWm×kZ_{n\times k} = X_{n\times m }W_{m\times k } Zn×k?=Xn×m?Wm×k?

SVD 理論

一般來說實對稱矩陣可以被分解為A=Q∑QTA=Q\sum Q^TA=QQT的形式,其中QQQ為標準正交矩陣,∑\sum對角陣,對角陣上的元素λi\lambda_iλi?是矩陣A的特征值,對應的特征向量是QiQ_iQi?

那么如果矩陣AAA為非實對稱矩陣的時候,有沒有類似的
A=UΣVTA=U\Sigma V^T A=UΣVT
奇異值分解(singular value decomposition,SVD)做的就是這件事。在SVD的官方術語中,U是(n,n)(n,n)(n,n)維的方陣稱為左奇異向量;Σ\SigmaΣ(n,m)(n,m)(n,m)的對角陣,對角線上的元素稱為奇異值;V 是(m,m)(m,m)(m,m)維度的方陣稱為右奇異向量,并且U和V均為單位正交矩陣,UUT=1UU^T=1UUT=1VVT=1VV^T=1VVT=1

求解方法就是利用AATAA^TAATATAA^TAATA都是對稱陣的特性,得到:
AAT=UΣΣTUTATA=VΣTΣVTAA^T=U\Sigma \Sigma ^T U^T \\ A^TA=V\Sigma^T\Sigma V^T AAT=UΣΣTUTATA=VΣTΣVT
這樣就能求解出U、Σ\SigmaΣ、V。

這篇文章里面有例子。

PCA和SVD的關系

摘自此處,通過協方差矩陣的求解方法建立聯系:

在SVD中:
S=ATX=VΣUTUΣVT=VΣ2VT=VΣ2V?1S=A^TX =V\Sigma U^T U\Sigma V^T =V\Sigma ^2V^T =V\Sigma^2V^{-1} S=ATX=VΣUTUΣVT=VΣ2VT=VΣ2V?1
而在PCA中:
S=u1λ1u1?1S=u_1\lambda_1u_1^{-1} S=u1?λ1?u1?1?
所以:
λ=Σ2u=V\lambda=\Sigma^2\\ u=V λ=Σ2u=V
這一點可以通過代碼驗證:

a=np.array([[1,5,7],[2,3,6],[5,9,3]]) C = np.dot(a.T, a)eigen_vals,eigen_vecs = np.linalg.eig(C) u,sigma,v=np.linalg.svd(a,full_matrices=False,compute_uv=True)print(eigen_vals,sigma**2) ''' [208.58666048 1.52969164 28.88364788] [208.58666048 28.88364788 1.52969164] '''eigen_vecs ''' array([[-0.34088613, -0.85005392, -0.40150339],[-0.72034757, 0.51060491, -0.46944862],[-0.60406625, -0.12919347, 0.78639241]]) '''v.T ''' array([[-0.34088613, -0.40150339, -0.85005392],[-0.72034757, -0.46944862, 0.51060491],[-0.60406625, 0.78639241, -0.12919347]]) '''

使用PCA對mnist數據集降維

其實在這里遇到一個問題:使用eig對手寫數字數據集的協方差矩陣求解特征值時得到了復數特征值和特征向量,這一點暫時沒弄明白,但是使用svd可以得到正常的特征值和特征向量。

sklearn中的pca

from sklearn.decomposition import PCA pca = PCA(n_components=2) result = pca.fit_transform(data)

得到結果圖

numpy手撕PCA

def PCA_numpy(X):#零均值化print(X.shape)X=X-X.mean(axis=0)## 使用特征值和特征向量#協方差矩陣#cov_X = np.cov(X,rowvar=0)#每一列一個特征#eig_val,eig_vec = np.linalg.eig(cov_X) #出現復數了##使用svdU,eig_val,eig_vec = np.linalg.svd(X)#選兩個最大的idx = np.argsort(-eig_val)temp_M=[]for i in range(2):temp_M.append(eig_vec[idx[i]])temp_M = np.array(temp_M).Tresult = np.dot(X,temp_M)return result

同樣得到結果值

這個圖里面每個顏色代表手寫數字數據集里面的0-9數字。

ZCA白化

在UFLDL中還介紹了基于PCA的白化(whitening或者球化sphering)方法,白化的目標有兩個:

  • 特征之間具有盡量少的相關性
  • 特征具有相同的方差

針對第一個目標,前面的使用PCA降維x=uTxx=u^Txx=uTx已經達到了效果。

針對第二個目標,讓每個輸入特征值都具有單位方差(unit variance),只需要除以特征值的開根號即可:
xpcai=xiλix_{pcai}=\frac{x_i}{\sqrt{\lambda _i}} xpcai?=λi??xi??
降維數據的第i列對應第i個特征值。這時候,數據的協方差就是單位陣,這就是所說的PCA白化(數據的不同成分無聯系并且具有單位方差)。

但是我們第二個目標其實是具有相同方差,而具有相同的單位方差并不是唯一的一個情況,也可能是具有相同的非單位方差。在ZCA白化中,又對pca白化做了一次左乘:
xzca=uxpcax_{zca}=ux_{pca} xzca?=uxpca?
這樣雖然把方差不再是1了,但是變換后的數據更加接近原始數據。

有一點需要注意:PCA可以用于降維(取前面一部分主成分),但是zca必須保持原有的維度不變,zca只做去相關,不做降維。

后記

這個學習筆記主要是針對機器學習里面常見的降維方法PCA進行剖析和逐步實現,具體代碼包括手寫數字的讀取和最終降維圖的畫圖,請參看公眾號簡介中的github網址。后續將持續更新其它機器學習理論和算法,敬請關注:

總結

以上是生活随笔為你收集整理的PCA、SVD、ZCA白化理论与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av在线免费观看一区 | 国产精品入口夜色视频大尺度 | 欧美顶级毛片在线播放 | av福利院 | 成人福利一区 | 国产区高清 | 久久亚洲综合国产精品99麻豆精品福利 | 中文字幕一区二区三区av | 97人妻精品一区二区三区 | 在线观看网址你懂的 | 国产中文网 | 久久一级视频 | 九色精品 | 18视频在线观看男男 | 国产麻豆一区二区 | 天天噜夜夜噜 | 日韩伦理一区二区三区 | 国产人成无码视频在线观看 | 欧美色鬼 | 神马九九| 香蕉久久久 | 2025国产精品视频 | 91精品国产综合久久福利 | 222aaa| 国产91在线观看 | 亚洲天堂视频网 | 日韩黄色片在线观看 | 91免费在线视频观看 | 老司机综合网 | 一级免费黄色 | 午夜精品视频一区 | 久久精品一区二区三区黑人印度 | 五月天久久 | 处破痛哭a√18成年片免费 | 久久久观看 | 日韩在线一区视频 | 亚洲国产精品99久久久久久久久 | 在线观看你懂的网址 | 亚洲精品无码久久久久 | 日韩精品一区二区三区丰满 | 啪啪免费av | 日韩不卡av在线 | 亚洲色欧美 | 五月丁香 | 国产婷婷久久 | 中文文字幕一区二区三三 | 欧美激情免费看 | 亚洲天堂久 | 狼人色综合 | 国产综合在线观看 | 性猛交╳xxx乱大交 偷偷操不一样的久久 | 亚洲国产免费看 | 欧美一本| 亚洲国产不卡 | 日韩美女国产精品 | 先锋影音av资源在线 | 男人天堂视频在线观看 | 香蕉国产精品 | 午夜精品久久久久久久久久久久久 | 日韩av片在线播放 | 欧洲美熟女乱又伦 | 精品视频久久久久久久 | 精品亚洲国产成人av制服丝袜 | 青青视频在线免费观看 | 日韩综合第一页 | 一炮成瘾1v1高h | 久久综合久久鬼色 | 熟妇人妻系列aⅴ无码专区友真希 | 亚洲大胆 | 国产调教视频在线观看 | 91九色pron | www.色综合 | 亚洲免费观看视频 | 激情欧美综合 | 熟女人妻视频 | 黄色草逼网站 | 884aa四虎影成人精品一区 | 一区二区视频在线观看 | 三级中文字幕 | 欧美午夜精品一区 | 国产在线精品视频 | 又黄又爽又色的视频 | 无套暴操 | 精品麻豆视频 | 欧美一区二区免费电影 | 香蕉成人网| 天天透天天操 | 性色影院 | 经典三级av在线 | 曰批免费视频播放免费 | 久久99精品国产麻豆婷婷 | 国产乱轮视频 | 向日葵视频在线播放 | 激情五月激情 | 国产精品视频看看 | 亚洲精品理论 | 日韩三级免费观看 | 少妇搡bbbb搡bbb搡小说 | 黄色小说视频 |