PCA降维算法_python实现
简单实现代码-python
import numpy as np
# 数据归一化
def featureNormalize(X):
# (每一个数据-当前列的均值)/当前列的标准差
n = X.shape[1] # 维数
mu = np.zeros((1,n))
sigma = np.zeros((1,n))
Y=np.zeros((X.shape[0],X.shape[1]))
mu = np.mean(X,axis=0) # 列平均值
sigma = np.std(X,axis=0) # 列标准差
for i in range(n):
Y[:,i] = (X[:,i] - mu[i]) / sigma[i]
return Y,mu,sigma
# 映射数据
def reduceDimensionData(X_norm,U,K):
# Z = np.zeros((X_norm.shape[0],K))
U_reduce = U[:,0:K] # 取前K个
Z = np.dot(X_norm,U_reduce)
return Z
def recoverData(Z,U,K):
# X_rec=np.zeros((Z.shape[0],U.shape[0]))
U_recude = U[:,0:K]
X_rec = np.dot(Z,np.transpose(U_recude)) # 还原数据(近似)
return X_rec
def PCA(X,K):
print("原始数据:")
print(X)
x_copy = X.copy()
x_norm,mu,sigma=featureNormalize(x_copy) #归一化
# x_norm = x_copy
print("归一