S'S ALGORITHM

PCA:降维算法原理学习


概述

主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术,无监督学习。用于发现数据集中的主要特征,并将数据转换为一个新的坐标系,使得在新坐标系下数据的方差最大化。以下是PCA的基本原理:

  1. 数据中心化(Centering):首先,对原始数据进行中心化处理,即减去各个特征的均值,使得数据的均值为零。这一步是为了消除数据的平移影响,使得PCA能够更好地捕捉数据的变异性。

  2. 计算协方差矩阵(Covariance Matrix):然后,计算中心化后的数据的协方差矩阵。协方差矩阵描述了各个特征之间的相关性和方差。对于一个具有 n 个特征的数据集,协方差矩阵的大小为 n x n。

  3. 特征值分解(Eigenvalue Decomposition):接下来,对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征向量表示了数据集中的主要方向,而特征值表示了数据在这些方向上的方差大小。使用奇异值分解SVD的方法通过保留最大的奇异值和相应的奇异向量来实现。矩阵的奇异值对应矩阵的重要性能或能量。保留最大的奇异值相当于保留了最重要的信息,而忽略不重要的信息或者噪声。

使用Numpy就可以实现奇异值分解:

import numpy as np

# 创建一个示例矩阵
A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

# 使用NumPy的SVD函数进行奇异值分解
U, S, VT = np.linalg.svd(A)

# U、S和VT分别是左奇异向量、奇异值和右奇异向量
print("左奇异向量:\n", U)
print("奇异值:\n", S)
print("右奇异向量转置:\n", VT)

这段代码输出了奇异值分解的结果:U、S和VT。这些结果可以帮助理解数据的结构和特征,或者用于降维、矩阵逆运算等应用中。

具体来说:

通过以下方式使用这些结果:

重构原始矩阵: 原始矩阵可以通过奇异值分解的结果重新构建: A = U x S x V^T

降维: 可以通过保留前几个最大的奇异值来实现矩阵的降维。截断S矩阵,并用截断后的U和VT矩阵进行重构,以实现降维。

求逆: 如果你需要对一个奇异值分解后的矩阵求逆,你可以对S矩阵进行逆运算,并将结果乘以转置后的V矩阵和U矩阵。

特征值分解: 对于实对称矩阵,其奇异值分解等价于特征值分解。

这些是奇异值分解的一些基本应用,具体应用取决于问题和目标。

  1. 选择主成分(Selecting Principal Components):根据特征值的大小,选择前 k 个特征值对应的特征向量作为主成分。通常选择的主成分数 k 小于等于原始特征的数量,以实现数据的降维。

  2. 投影(Projection):将原始数据投影到选定的主成分上,得到新的低维表示。这一步可以通过将原始数据与选定的主成分矩阵相乘来实现。

通过PCA降维后,数据集中的方差会在新的主成分上尽可能地被保留,从而保留了数据的主要信息。这使得PCA成为了数据预处理、可视化和特征提取等领域中一个非常有用的工具。

最佳实践原则

  1. 进行特征缩放scaling非常重要。不同的特征尺寸会影响特征的影响大小。

  2. 一定要找中心位置并进行线性平移。

  3. 需要找出几个特征值?其实是一个找垂直线的过程。

相关Python代码

import numpy as np
from sklearn.decomposition import PCA

# 创建一个示例数据集
X = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])

# 使用sklearn中的PCA进行降维
pca = PCA(n_components=2)  # 指定要降到的维度
X_pca = pca.fit_transform(X)

# 输出降维后的数据
print("原始数据集:")
print(X)
print("降维后的数据集:")
print(X_pca)

sklearn库给出了一个很方便的方法,但是理解其中的原理依然非常重要。