文章目录
1.PCA简介与原理
2.PCA的一种算法-基于协方差矩阵的特征值分解算法
1) 原理
2)代码实现
import matplotlib.pyplot as plt
import numpy as np
# 加载数据
def loaddata():
data = np.loadtxt('data/pca_data.csv', delimiter=',')
return data
# 协方差矩阵的特征值分解算法
# 特征归一化
def featureNormalize(X):
# reshape(1,-1)表示转换成一行,reshape(-1,1)表示转换成一列
mu = np.mean(X, axis=0).reshape(1, -1)
sigma = np.std(X, axis=0, ddof=1).reshape(1, -1)
X = (X - mu) / sigma
return X, mu, sigma
# 实现pca
def pca(X, K):
# 计算协方差矩阵
m = len(X)
sigma = np.dot(X.T, X) / (m - 1)
# 计算协方差矩阵的特征向量
eigenvalues, eigenvectors = np.linalg.eig(sigma)
# 返回的特征值是要排序的,依照特征值进行从大到小排
index = np.argsort(-eigenvalues)
# 特征向量对应于特征值的顺序
eigenvectors = eigenvectors[:, index]
# 降维后的数据
# 取出特征向量的前k维
u_reduce = eigenvectors[:, 0:K]
return np.dot(X, u_reduce), eigenvectors
# 将降维后的数据还原
def recoverData(Z, U, K):
U_reduce = U[:, 0:K]
X_rec = np.dot(Z, np.transpose(U_reduce))
return X_rec
def plotdata(X_orgin, X_rec):
plt.scatter(X_orgin[:, 0