1. 程式人生 > >[學習筆記] numpy次成分分析和PCA降維

[學習筆記] numpy次成分分析和PCA降維

image img args svd分解 msh 技術分享 代碼 學習筆記 info

存個代碼,以後參考。

numpy次成分分析和PCA降維

SVD分解做次成分分析

原圖:

技術分享圖片

次成分復原圖:

技術分享圖片

代碼:

import numpy as np
from numpy import linalg
import cv2 as cv
src = cv.imread("/home/xueaoru/圖片/output_3_0.png")
gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY)
S,V,D = linalg.svd(gray)
vv = np.zeros(shape = gray.shape)
h = min(S.shape[0],D.shape[0])
for i in range(int(h * 0.7)):
    vv[h-i-1,h-i-1] = V[h-i-1]
out = np.dot(np.dot(S,vv),D)
cv.imshow("out",out.astype(np.uint8))
cv.waitKey(0)

PCA對隨機10000個數據降維分析

基於霍特林變換。

dataset = np.random.rand(1000,10) * 10 + 5 #(1000,10)
X = dataset
Ex = np.mean(X,axis = 0).reshape(-1,10).T # (p,1)
Rx = np.cov(X.T)
#S,V,D = linalg.svd(Rx)
eigs,D = linalg.eig(Rx) # val(,10) and vec(10,10)
indices = np.argsort(eigs)
U = D[indices[:-6:-1],:] # 5個 (5,10)
Y = U.dot((X.T - Ex)) # (5,1000) 霍特林變換(5,1000)
print(Y.T)

本程序將10維數據降維成5維,基於霍特林變換。、

[學習筆記] numpy次成分分析和PCA降維