當(dāng)前位置:
首頁(yè) >
matlab pca降维_手撸PCA(Python七行代码实现)
發(fā)布時(shí)間:2024/9/27
40
豆豆
生活随笔
收集整理的這篇文章主要介紹了
matlab pca降维_手撸PCA(Python七行代码实现)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
直接上代碼:
x = np.random.rand(10,5) #隨機(jī)生成一組樣本 x -= x.mean(axis=0) # 見(jiàn)詳注1 C = x.T.dot(x) # 計(jì)算自協(xié)方差矩陣 lam,v= lina.eig(C) # 特征分解,v是 new_index = np.argsort(lam)[::-1] # 特征值排序,見(jiàn)詳注2 A = -v[:,new_index] # 得到A w = x.dot(A) # 計(jì)算變換后的特征 r = lam[new_index]/lam.sum() # 計(jì)算所有特征對(duì)應(yīng)的貢獻(xiàn)率測(cè)試一下:
w[:,:2] # 新特征的前2個(gè)>>> 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 # 各個(gè)特征值對(duì)應(yīng)的貢獻(xiàn)率>>> array([0.4026073116, 0.2589988934, 0.2088275432, 0.0902665298,0.0392997221])對(duì)比SKLEARN實(shí)現(xiàn):
pca = PCA(n_components=2)pca.fit(x) # x還是最開(kāi)始那個(gè)xpca.explained_variance_ratio_>>> array([0.4026073116, 0.2589988934]) # 前2個(gè)特征對(duì)應(yīng)的貢獻(xiàn)率(完全一致)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]])計(jì)算變換后的特征差值:
w1 = w[:,0]w2 = pca.transform(c)[:,0] ((w1-w2)**2).sum() >>> 2.2980196096428498e-30貢獻(xiàn)率的值:
pca.explained_variance_ratio_ - r[:2] >>> array([ 1.1102230246e-16, -1.6653345369e-16])詳細(xì)注解見(jiàn): https://blog.csdn.net/cauchy7203/article/details/107421996
總結(jié)
以上是生活随笔為你收集整理的matlab pca降维_手撸PCA(Python七行代码实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java语言中提供了三个日期类_Java
- 下一篇: Python 常用函数 - Pytho