matlab pca降维_手撸PCA(Python七行代码实现)
生活随笔
收集整理的這篇文章主要介紹了
matlab pca降维_手撸PCA(Python七行代码实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
直接上代碼:
x = np.random.rand(10,5) #隨機生成一組樣本 x -= x.mean(axis=0) # 見詳注1 C = x.T.dot(x) # 計算自協方差矩陣 lam,v= lina.eig(C) # 特征分解,v是 new_index = np.argsort(lam)[::-1] # 特征值排序,見詳注2 A = -v[:,new_index] # 得到A w = x.dot(A) # 計算變換后的特征 r = lam[new_index]/lam.sum() # 計算所有特征對應的貢獻率測試一下:
w[:,:2] # 新特征的前2個>>> array([[-0.3939524518, -0.4184678305],[-0.5907434013, 0.2033346207],[-0.4585388051, -0.111367225 ],[ 0.4552495673, -0.0405062598],[-0.2335902798, -0.4260334862],[ 0.4523182771, 0.039755097 ],[ 0.0902288594, 0.1869543779],[ 0.089419155 , 0.7656098218],[ 0.7645053936, -0.3353675658],[-0.1748963144, 0.1360884499]])r # 各個特征值對應的貢獻率>>> array([0.4026073116, 0.2589988934, 0.2088275432, 0.0902665298,0.0392997221])對比SKLEARN實現:
pca = PCA(n_components=2)pca.fit(x) # x還是最開始那個xpca.explained_variance_ratio_>>> array([0.4026073116, 0.2589988934]) # 前2個特征對應的貢獻率(完全一致)pca.transform(x) # 降維變換(完全一致)>>> array([[-0.3939524518, -0.4184678305],[-0.5907434013, 0.2033346207],[-0.4585388051, -0.111367225 ],[ 0.4552495673, -0.0405062598],[-0.2335902798, -0.4260334862],[ 0.4523182771, 0.039755097 ],[ 0.0902288594, 0.1869543779],[ 0.089419155 , 0.7656098218],[ 0.7645053936, -0.3353675658],[-0.1748963144, 0.1360884499]])計算變換后的特征差值:
w1 = w[:,0]w2 = pca.transform(c)[:,0] ((w1-w2)**2).sum() >>> 2.2980196096428498e-30貢獻率的值:
pca.explained_variance_ratio_ - r[:2] >>> array([ 1.1102230246e-16, -1.6653345369e-16])詳細注解見: https://blog.csdn.net/cauchy7203/article/details/107421996
總結
以上是生活随笔為你收集整理的matlab pca降维_手撸PCA(Python七行代码实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java语言中提供了三个日期类_Java
- 下一篇: Python 常用函数 - Pytho