文章目录
- 一、什么是主成分分析(PCA)?
- 主成分的选取
- 方差的重要性
- 数据降维
- PCA的应用场景
- 二、主成分分析的工作原理
- 1.方差和数据的重要性
- 2.计算协方差矩阵
- 3.特征值和特征向量
- 4.选择主成分
- 三、PCA的实现步骤
- 1.标准化数据集
- 2.计算协方差矩阵
- 3.计算特征值和特征向量
- 4.选择主成分
- 5.转换数据到新的空间
- 四、在`sklearn`库中应用PCA:以鸢尾花数据集为例
- 加载鸢尾花数据集
- 数据标准化
- 应用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)=n−11∑i=1n(Xi−Xˉ)(Yi−Yˉ)
其中, 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,我们能够用较低的维度捕捉到数据的主要特征,并且在可视化中清楚地区分不同的类别。