主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术,无监督学习。用于发现数据集中的主要特征,并将数据转换为一个新的坐标系,使得在新坐标系下数据的方差最大化。以下是PCA的基本原理:
数据中心化(Centering):首先,对原始数据进行中心化处理,即减去各个特征的均值,使得数据的均值为零。这一步是为了消除数据的平移影响,使得PCA能够更好地捕捉数据的变异性。
计算协方差矩阵(Covariance Matrix):然后,计算中心化后的数据的协方差矩阵。协方差矩阵描述了各个特征之间的相关性和方差。对于一个具有 n 个特征的数据集,协方差矩阵的大小为 n x n。
特征值分解(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矩阵。
特征值分解: 对于实对称矩阵,其奇异值分解等价于特征值分解。
这些是奇异值分解的一些基本应用,具体应用取决于问题和目标。
选择主成分(Selecting Principal Components):根据特征值的大小,选择前 k 个特征值对应的特征向量作为主成分。通常选择的主成分数 k 小于等于原始特征的数量,以实现数据的降维。
投影(Projection):将原始数据投影到选定的主成分上,得到新的低维表示。这一步可以通过将原始数据与选定的主成分矩阵相乘来实现。
通过PCA降维后,数据集中的方差会在新的主成分上尽可能地被保留,从而保留了数据的主要信息。这使得PCA成为了数据预处理、可视化和特征提取等领域中一个非常有用的工具。
进行特征缩放scaling非常重要。不同的特征尺寸会影响特征的影响大小。
一定要找中心位置并进行线性平移。
需要找出几个特征值?其实是一个找垂直线的过程。
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库给出了一个很方便的方法,但是理解其中的原理依然非常重要。