【主成分分析(PCA)】

一、什么是主成分分析(PCA)?

主成分分析(PCA)是一种统计方法,它利用正交变换技术,将一组可能存在线性关系的变量转换成一组线性不相关的变量,这些新的变量称为主成分。它的核心思想是在减少数据集的维度的同时,尽量减少信息的损失,从而在降低复杂度的同时保留数据集中最重要的特征。

PCA的过程可以被视为发现数据中的模式,以及识别数据结构中的相互关系。它能够揭示数据的内在结构,即便在原始数据集中这种结构不是立即显而易见的。PCA能够有效地识别和压缩数据,去除冗余信息。

主成分的选取

在PCA中,每一个主成分都尝试捕获数据中最大的方差量。第一个主成分捕获了最多的方差,第二个主成分试图捕获剩余数据中最多的方差,且与第一个主成分正交,以此类推。这些主成分作为新的坐标轴,而原始数据可以在这些新轴上被重新表达。

方差的重要性

方差衡量了数据点相对于平均值的偏离程度。在PCA中,具有较大方差的方向含有较多的信息。通过选取能够最大化方差的方向作为主成分,PCA能够保证降维后的数据尽可能保留原始数据的特征。

数据降维

通过移除较小的特征值对应的成分,PCA实现了数据的降维。这个过程可以去除数据中的噪声,并且在保留数据集中最重要信息的同时减小了数据的规模。降维后的数据更易于存储和处理,对于机器学习模型的训练也更为高效。

PCA的应用场景

PCA广泛应用于数据预处理、数据压缩、和特征提取等多个领域。它尤其适用于处理高维数据集,如图像处理、基因数据分析和金融数据分析等领域。通过减少数据的维度,PCA不仅能够帮助我们简化模型,还能提高算法的运行效率,减少过拟合的风险。

二、主成分分析的工作原理

1.方差和数据的重要性

在主成分分析(PCA)中,方差作为数据分布的度量。方差衡量了数据点如何分散在其平均值周围,即数据的波动性。在PCA中,较高的方差通常意味着数据中包含更多的信息,因为这表明数据点在其平均值周围有较大的扩散。因此,PCA寻求那些最大化方差的主成分,以便捕获并保留尽可能多的数据信息。通过这种方式,即使在降低数据维度的过程中,也能够尽量减少信息的损失。

2.计算协方差矩阵

协方差矩阵是PCA的一个关键组成部分,它帮助揭示了数据集中各个特征之间的线性关系。协方差衡量了两个变量如何一同变化,如果两个变量的增加或减少是相关的,它们的协方差就是正值;如果一个变量的增加导致另一个变量减少,协方差就是负值;如果两个变量独立,协方差为零。

为了计算协方差矩阵,首先需要将每个变量(特征)的平均值减去对应的数据点,使其均值为零。然后,使用以下公式计算协方差矩阵:

C o v ( X , Y ) = 1 n − 1 ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) Cov(X,Y)=\frac1{n-1}\sum_{i=1}^n(X_i-\bar{X})(Y_i-\bar{Y}) Cov(X,Y)=n11i=1n(XiXˉ)(YiYˉ)

其中, X \text{X} X Y \text{Y} Y 是两个不同的特征, N \text{N} N 是观测点的数量, X ˉ \bar{X} Xˉ Y ˉ \bar{Y} Yˉ分别是 X \text{X} X Y \text{Y} Y 的平均值。通过计算所有特征对之间的协方差,可以构建协方差矩阵。

3.特征值和特征向量

特征值和特征向量是从协方差矩阵中导出的数学概念,协方差矩阵的特征值反映了数据在新轴上(即主成分)的方差大小,而特征向量则定义了这些新轴的方向。

  • 特征值:每一个特征值对应于协方差矩阵的一个主成分,表示该成分的方差,即数据在该方向上的分散程度。
  • 特征向量:与特征值相对应的是特征向量,它指出了数据在多维空间中分散的方向。每个特征向量都垂直于其他特征向量,代表了一个主成分的方向。

通过计算协方差矩阵的特征值和特征向量,可以确定数据的主成分,即数据最主要的方差来源。

4.选择主成分

选择主成分的过程涉及到对协方差矩阵的特征值从大到小排序,特征值越大,对应的特征向量(主成分)在数据集中就越重要,因为它解释了更多的方差。通常,会选择特征值更大的特征向量。

三、PCA的实现步骤

1.标准化数据集

在进行PCA之前,首先需要对数据进行标准化处理,以确保每个特征的均值为0,标准差为1。PCA对数据的尺度非常敏感。

from sklearn.preprocessing import StandardScaler

# 假设X是一个包含多个特征的数据集
X_standardized = StandardScaler().fit_transform(X)

2.计算协方差矩阵

标准化后,计算数据集的协方差矩阵。协方差矩阵揭示了数据集中各个特征之间的关系。

import numpy as np

cov_matrix = np.cov(X_standardized.T)  # 注意转置,因为np.cov()期望行代表特征,列代表观察值

3.计算特征值和特征向量

计算协方差矩阵的特征值和特征向量,这些特征向量决定了数据在新空间中的方向,而特征值则表示每个方向的重要性。

eigen_values, eigen_vectors = np.linalg.eig(cov_matrix)

# eigen_values 存储了特征值,eigen_vectors 存储了对应的特征向量

4.选择主成分

根据特征值的大小选择最重要的特征向量(主成分)。一般会选择解释最大方差的前几个主成分。

# 对特征值从大到小排序
eigen_value_vector_pairs = [(np.abs(eigen_values[i]), eigen_vectors[:,i]) for i in range(len(eigen_values))]
eigen_value_vector_pairs.sort(key=lambda k: k[0], reverse=True)

# 选择前k个特征向量,k是新空间的维度
k = 2  # 示例中选择2个主成分
matrix_w = np.hstack((eigen_value_vector_pairs[i][1].reshape(-1,1) for i in range(k)))

5.转换数据到新的空间

将原始数据转换到选定的主成分定义的新空间中。

X_transformed = X_standardized.dot(matrix_w)

# X_transformed 是转换后的数据,其中只包含了最重要的k个主成分

四、在sklearn库中应用PCA:以鸢尾花数据集为例

加载鸢尾花数据集

from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data
y = iris.target

X包含了数据集的特征,而y包含了对应的标签。

数据标准化

from sklearn.preprocessing import StandardScaler

X_std = StandardScaler().fit_transform(X)

应用PCA

使用sklearn.decomposition.PCA来执行主成分分析。将数据降维到2维,便于可视化。

from sklearn.decomposition import PCA

# 初始化PCA对象,设置主成分数为2
pca = PCA(n_components=2)

# 对标准化后的数据进行PCA处理
X_pca = pca.fit_transform(X_std)

通过上述步骤,X_pca现在包含了原始数据在两个主成分上的投影。

可视化结果

使用matplotlib库来绘制数据点:

import matplotlib.pyplot as plt

# 为每个目标类别设置不同的颜色
colors = ['r', 'g', 'b']
target_names = iris.target_names

plt.figure()
for color, i, target_name in zip(colors, [0, 1, 2], target_names):
    plt.scatter(X_pca[y == i, 0], X_pca[y == i, 1], color=color, lw=2, label=target_name)

plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('PCA of IRIS dataset')
plt.show()

散点图展示了降维后的数据点在两个主成分方向上的分布,不同的颜色代表不同的鸢尾花类别。通过PCA,我们能够用较低的维度捕捉到数据的主要特征,并且在可视化中清楚地区分不同的类别。

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武帝为此

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值