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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

matlab pca降维_手撸PCA(Python七行代码实现)

發布時間:2024/9/27 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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七行代码实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

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