import numpy as np
# 假设 X 是原始数据
# 1. 数据标准化
X_mean = np.mean(X, axis=0)
X_std = np.std(X, axis=0)
X_normalized = (X - X_mean) / X_std
numpy
库的 np.cov
函数实现。# 2. 计算协方差矩阵
covariance_matrix = np.cov(X_normalized.T)
numpy
库的 np.linalg.eig
函数来计算。# 3. 计算协方差矩阵的特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)
# 4. 选择主成分
# 例如,选择前两个主成分
n_components = 2
indices = np.argsort(eigenvalues)[::-1]
principal_components = eigenvectors[:, indices[:n_components]]
np.argsort
函数返回的是数组值从小到大的索引值。对特征值数组 eigenvalues
使用 np.argsort
将给出排序后特征值的索引。[::-1]
是Python中的切片操作,它将数组反转。因为我们想要从大到小的顺序,所以需要反转 np.argsort
的结果。n_components
指定了要选择的主成分的数量。indices[:n_components]
选择了特征值最大的前 n_components
个特征向量的索引。eigenvectors[:, indices[:n_components]]
则根据这些索引从特征向量矩阵中提取对应的列,即选择了最重要的 n_components
个特征向量作为主成分。principal_components
包含了数据集的前 n_components
个主成分。这些主成分是降维后数据的基础,它们捕获了数据中最大的方差。# 5. 转换到新的坐标系
X_pca = np.dot(X_normalized, principal_components)
PCA常用于减少数据集的维度,同时尽可能保留原始数据的特性。它在图像处理、语音识别、基因数据分析等领域有广泛应用。
协方差矩阵在统计学和数据分析中扮演着关键角色,尤其是在理解多个变量之间关系的上下文中。
Cov ( X , Y ) = E [ ( X − μ X ) ( Y − μ Y ) ] \text{Cov}(X, Y) = E[(X - \mu_X)(Y - \mu_Y)] Cov(X,Y)=E[(X−μX)(Y−μY)]
其中, E E E 是期望值运算符, μ X \mu_X μX 和 μ Y \mu_Y μY分别是 X X X 和 Y Y Y 的均值。
矩阵转置是将矩阵的行转换为列,或将列转换为行的操作。在PCA中,数据转置通常是必要的预处理步骤。
np.linalg.eig
函数在数学和数据分析中,特征值和特征向量是理解线性变换的关键概念。np.linalg.eig
函数来自Python的NumPy库,用于计算方阵的特征值和特征向量。
对于给定的方阵 A A A,特征向量 v v v 和对应的特征值 λ \lambda λ 满足以下等式:
A v = λ v A \mathbf{v} = \lambda \mathbf{v} Av=λv
这里, A A A 是一个方阵, v \mathbf{v} v 是一个非零向量, λ \lambda λ 是一个标量(特征值)。
np.linalg.eig
函数的应用np.linalg.eig
用于找出协方差矩阵的特征向量和特征值。import numpy as np
# 假设 A 是一个方阵
A = np.array([[4, 2], [1, 3]])
# 使用 np.linalg.eig 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
# 输出特征值和特征向量
print("特征值:", eigenvalues)
print("特征向量:", eigenvectors)
在主成分分析(PCA)中,数据投影到选定的主成分上是核心步骤之一。这一步骤通过矩阵乘法实现,将原始数据转换到由主成分定义的新坐标系中。
假设 X normalized X_{\text{normalized}} Xnormalized 是标准化后的数据矩阵,其中每一行代表一个样本,每一列代表一个特征。
X pca X_{\text{pca}} Xpca 是投影后的数据,其中包含了主成分分析降维后的数据。
主成分(由特征向量构成)存储在矩阵 P P P 中,每一列是一个主成分。
投影的数学表达式为:
X pca = X normalized ⋅ P X_{\text{pca}} = X_{\text{normalized}} \cdot P Xpca=Xnormalized⋅P
这里, X normalized X_{\text{normalized}} Xnormalized 与 P P P 的矩阵乘法将原始数据投影到主成分定义的新坐标系中。
import numpy as np
# 假设 X_normalized 是标准化后的数据
# principal_components 是主成分,即选定的特征向量
# 数据投影到主成分
X_pca = np.dot(X_normalized, principal_components)
# 输出投影后的数据
print("投影后的数据:", X_pca)
在这段代码中,使用 np.dot 函数完成了矩阵乘法,将标准化后的数据矩阵 X_normalized 与主成分矩阵 principal_components 相乘,得到投影后的数据 X_pca。这是实现PCA算法的关键步骤之一,用于降维和提取数据中最重要的特征。