机器学习基础-监督学习-训练数据-特征提取之主成分分析(PCA)
主成分分析(Principal Component Analysis,PCA)是一种经典的数据降维方法,可以用于减少高维数据的维数。PCA 的目标是将原始数据映射到一个新的低维空间,使得映射后的数据能够最大程度地保留原始数据的信息。在 PCA 中,新的低维空间被定义为原始数据的主成分,主成分是指方差最大的数据投影方向。
PCA 的原理
假设我们有一个 nnn 个样本、每个样本有 mmm 个特征的数据集 XXX,我们的目标是将 XXX 映射到一个 k(k<m)k (k<m)k(k<m) 维的空间中。PCA 的核心是通过线性变换将原始特征空间中的数据映射到一个新的特征空间,新的特征空间中的每个维度被称为主成分。
PCA 的步骤如下:
-
对原始数据进行中心化处理,即将每个特征的均值归零。
-
计算协方差矩阵 CCC,Ci,jC_{i,j}Ci,j 表示第 iii 个特征和第 jjj 个特征之间的协方差。协方差矩阵是一个对称矩阵,对角线上的元素是每个特征的方差。
C=1n∑i=1n(xi−μ)(xi−μ)TC = \frac{1}{n} \textstyle\sum_{i=1}^{n} (x_i-\mu)(x_i-\mu)^TC=n1∑i=1n(xi−μ)(xi−μ)T其中,xix_ixi 是第 iii 个样本,μ\muμ 是所有样本的均值。
-
计算协方差矩阵的特征值和特征向量。协方差矩阵的特征值表示在该方向上的方差,特征向量是一个与特征值相对应的向量。
-
对特征值进行排序,选择前 kkk 个特征向量作为主成分。
-
使用选定的主成分将原始数据映射到新的低维空间中。
以下是使用 Python 中的 scikit-learn 库实现 PCA 的代码示例:
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
# 加载数据集
iris = load_iris()
X = iris.data
# 使用 PCA 进行降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 输出结果
print("PCA 降维前数据形状:", X.shape)
print("PCA 降维后数据形状:", X_pca.shape)
在示例中,我们使用 PCA 对 iris 数据集进行了降维,并输出了降维前后数据的形状。下面我们将对 PCA 的过程进行详细讲解。
首先,我们需要对数据进行中心化处理,即将每个特征的均值归零。在 scikit-learn 中,PCA 的默认行为是对输入数据进行中心化处理。
接下来,我们计算协方差矩阵 CCC。在 scikit-learn 中,可以使用 sklearn.covariance 模块的 empirical_covariance 函数计算协方差矩阵。以下是示例代码:
from sklearn.covariance import empirical_covariance
# 计算协方差矩阵
cov = empirical_covariance(X)
然后,我们需要计算协方差矩阵的特征值和特征向量。在 scikit-learn 中,可以使用 sklearn.decomposition 模块的 PCA 类来计算。以下是示例代码:
from sklearn.decomposition import PCA
# 计算协方差矩阵的特征值和特征向量
pca = PCA()
pca.fit(X)
# 输出特征值和特征向量
print("特征值:", pca.explained_variance_)
print("特征向量:", pca.components_)
在这个示例中,我们使用 PCA 类计算了协方差矩阵的特征值和特征向量,并输出了它们的值。
最后,我们需要选择前 kkk 个特征向量作为主成分,并使用它们将原始数据映射到新的低维空间中。在 scikit-learn 中,可以在创建 PCA 类时指定 n_components 参数来选择要保留的主成分个数。以下是示例代码:
# 选择前 2 个特征向量作为主成分
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 输出结果
print("PCA 降维前数据形状:", X.shape)
print("PCA 降维后数据形状:", X_pca.shape)
在这个示例中,我们选择前 2 个特征向量作为主成分,并使用它们将 iris 数据集从 4 维降到了 2 维。输出结果表明,降维后的数据形状为 (150, 2),即有 150 个样本,每个样本有 2 个特征。
总的来说,PCA 是一种非常有用的数据降维技术,可以在保留数据信息的同时减少数据的维数。在实际应用中,可以根据需要选择合适的主成分个数,以达到最好的降维效果。
转载自:https://juejin.cn/post/7227410916249321509