步骤:
- 均值标准化、特征缩放(可选)
- 计算协方差矩阵Σ及其特征向量
def pca(X):
# 归一化
X = (X - X.mean()) / X.std()
# compute the covariance matrix
X = np.matrix(X)
# 计算协方差矩阵
cov = (X.T * X) / X.shape[0]
# perform SVD
U, S, V = np.linalg.svd(cov)
return U, S, V
现在我们有主成分(矩阵U),我们可以用这些来将原始数据投影到一个较低维的空间中。 对于这个任务,我们将实现一个计算投影并且仅选择顶部K个分量的函数,有效地减少了维数。
def project_data(X, U, k):
U_reduced = U[:,:k]
return np.dot(X, U_reduced)
恢复原始数据的结构:
def recover_data(Z, U, k):
U_reduced = U[:,:k]
return np.dot(Z, U_reduced.T)
升维后的数据就是降维数据在原维空间的显示。