PCA主成分分析-原理详解

目录

相关背景

理论基础

协方差

特征值和特征向量

方差最大化

应用背景

技术挑战和限制

PCA详解

核心思想

1. 方差最大化

2. 协方差和数据的线性关系

3. 正交性和去相关

4. 维度降低与信息保留

5. 数据解释性的提高

数学定义

算法流程

1. 数据标准化(样本去中心化)

2. 计算协方差矩阵

3. 计算协方差矩阵的特征值和特征向量(对协方差矩阵进行特征值分解)

4. 选择主成分

5. 构建投影矩阵

6. 转换数据到新的空间

PCA代码实例

参考


相关背景

主成分分析(Principal Component Analysis,PCA)的背景和发展可以追溯到20世纪初,是多元统计分析领域的一个基石。PCA最早由卡尔·皮尔逊(Karl Pearson)在1901年提出,目的是通过数学变换简化复杂数据的维度,同时尽量保留原始数据的重要信息。后来,哈罗德·霍特林(Harold Hotelling)在1933年进一步发展了这一理论。自那以后,PCA成为了多个领域,包括统计学、数据分析、机器学习等领域内一个非常重要和广泛使用的工具。

PCA的主要思想是将原始的数据通过线性变换映射到一个新的坐标系统(特征空间),这个新的坐标系统的基是数据集的协方差矩阵的特征向量,这些特征向量称为主成分。转换后的数据在新的坐标系中的坐标被称为主成分得分。这样,原始数据集中的大部分变异性可以由少数几个主成分来表示。

PCA利用正交变换来对一系列可能相关的变量的观测值进行线性变换,从而投影为一系列线性不相关变量的值,这些不相关变量称为主成分(Principal Components)。具体地,主成分可以看做一个线性方程,其包含一系列线性系数来指示投影方向。PCA对原始数据的正则化或预处理敏感(相对缩放)。

理论基础

PCA的数学基础建立在线性代数、统计学的概念之上,尤其是向量空间、特征值与特征向量、协方差矩阵等。PCA通过寻找数据的协方差矩阵的特征向量和特征值,确定数据中方差最大的方向,这些方向称为主成分。每个主成分都是原始数据在某个特定方向上的投影,这些方向互相正交(在数学上表示为特征向量之间的正交性)。

PCA的数学基础依赖于线性代数和统计学中的几个关键概念:

  • 协方差

衡量两个变量如何一起变化。如果两个变量同时增加或减少,它们具有正协方差;如果一个变量增加而另一个减少,则协方差为负。

假设我们有两个随机变量 X 和 Y,它们各自有 n 个观测值,分别表示为x_{1},x_{2},...,x_{n} 和 y_{1},y_{2},...,y_{n}。X 和 Y 的协方差可以用下面的公式计算:

其中,\overline{x} 是 X 的样本均值,\overline{y} 是 Y 的样本均值,计算方式如下:

  • 特征值和特征向量

一个矩阵的特征值和特征向量表征了这个矩阵的某些基本特性。在PCA中,协方差矩阵的特征值和特征向量用于确定数据的主要变化方向。

给定一个方阵 A,一个非零向量 v 被称为 A 的一个特征向量,如果 A 与 v 的乘积只是 v 的一个标量扩展。这个标量称为特征值。数学上,这可以表示为:

其中,A 是一个 n×n 方阵,λ 是特征值,v 是对应的特征向量。

  • 方差最大化

PCA通过方向的选择来最大化方差,这些方向(即主成分)代表了数据中最主要的结构和模式。

应用背景

自从它的提出,PCA已经被广泛应用于各个领域,包括:

  • 统计学和数据分析:PCA广泛用于探索性数据分析、可视化以及数据压缩。通过降维,它可以帮助识别数据中的模式和结构,简化数据,使其易于分析和理解。
  • 生物信息学:在基因表达数据分析、蛋白质组学和其他高通量生物技术中,PCA用于识别样本之间的关系以及重要的生物标志物。
  • 金融:PCA在风险管理、资产定价等方面有应用,例如,通过分析不同金融工具之间的相关性来识别主要的市场风险因素。
  • 图像处理:在图像压缩和特征提取中,PCA可以减少存储空间,同时保留图像的关键信息。
  • 机器学习:PCA常用于预处理步骤,以减少模型训练所需的特征数量,提高训练效率和减轻过拟合。
  • 社会科学:调查数据分析,识别关键因素。

技术挑战和限制

虽然PCA是一种强大的工具,但它也有局限。例如,PCA依赖于线性假设,即主要的信息可以通过数据的线性组合来捕获。对于非线性结构的数据,PCA可能无法有效地识别底层模式。此外,PCA对数据的尺度非常敏感,不同的尺度会导致不同的主成分。因此,在应用PCA之前,通常需要对数据进行标准化处理。

PCA详解

核心思想

主成分分析(PCA)的核心思想是通过降维来简化数据的复杂性,同时尽量保留原始数据集中的重要信息。具体来说,PCA旨在从多维数据中提取出最重要的几个特征(即主成分),这些特征能够捕捉数据集中的大部分变异性或信息。以下是PCA的几个核心概念

1. 方差最大化

PCA试图找到数据中方差最大的方向。这是基于一个假设:数据的重要性可以通过它们的方差来衡量。方差大意味着数据在这个方向上分布得更广,因此可能包含更多的信息。

2. 协方差和数据的线性关系

通过分析数据特征间的协方差,PCA能够识别哪些维度(特征)之间存在最强的线性关系。这种关系的识别有助于理解数据中变量间的相互作用,同时帮助确定数据投影的方向。

3. 正交性和去相关

PCA通过正交变换将原始数据变换到一组线性无关的变量上,这组变量构成了数据的新基。这意味着提取的主成分彼此正交(在数学上相互独立),确保了新特征之间没有相关性。这样做的好处是简化了数据结构,使得每个主成分都捕捉到了数据中不同的信息。

4. 维度降低与信息保留

PCA的目的是在减少数据集的特征数量的同时,尽可能保留原始数据的信息。这通过在保留最大方差的同时,去除那些对解释数据变异性贡献较小的成分来实现。这种方法特别有用于处理高维数据集,其中许多特征可能是冗余的或者不太重要。

5. 数据解释性的提高

通过减少无关或冗余特征的数量,PCA有助于提高数据的解释性。通过集中在少数几个主要成分上,研究人员和数据分析师可以更容易地识别数据中的模式和趋势,从而提供洞察力和做出决策。

核心思想如下:

  • 将坐标轴中心移到数据的中心,然后旋转坐标轴,使得数据在C1轴上的方差最大,即全部n个数据个体在该方向上的投影最为分散。意味着更多的信息被保留下来。C1成为第一主成分
  • C2第二主成分:找一个C2,使得C2与C1的协方差相关系数)为0,以免与C1信息重叠,并且使数据在该方向的方差尽量最大。
  • 以此类推,找到第三主成分,第四主成分……第p个主成分。p个随机变量可以有p个主成分。

数学定义

设有一个随机向量 X=(x_{1},x_{2},...,x_{n})^{T},其中包含了 n 个随机变量,每个变量有 m 个观测值。我们的目标是将这些变量转换为新的一组变量 Y=(y_{1},y_{2},...,y_{n})^{T},这些新变量是原始变量的线性组合,且满足以下条件:

1. 线性不相关:新变量(主成分)之间相互正交(线性不相关)。

2. 方差递减:第一个主成分 Y_{1} 有最大的方差,第二个主成分 Y_{2}​ 有次大的方差,以此类推。每个主成分捕获了数据中尽可能多的信息(方差)。

算法流程

要详细展开主成分分析(PCA)的数学计算步骤,我们首先需要有一个数据集,并从这个数据集出发,步骤如下:

1. 数据标准化(样本去中心化)

给定一个 m×n 的数据矩阵 X,其中 m 是样本数,n 是特征数。首先,对数据进行标准化处理,确保每个特征的均值为0,标准差为1。对于矩阵 X 中的每个元素,执行:

其中,μ 是每个特征的平均值,σ 是每个特征的标准差。

2. 计算协方差矩阵

3. 计算协方差矩阵的特征值和特征向量(对协方差矩阵进行特征值分解)

求解协方差矩阵 C 的特征值 λ 和对应的特征向量 v:

4. 选择主成分

将特征值从大到小排序,并选择前 k 个特征值及其对应的特征向量,其中 k 是新的特征空间的维数(k≤n)。排序确保了选择的主成分是最能代表原始数据集方差的。

5. 构建投影矩阵

将选中的 k 个特征向量组合成一个投影矩阵 P,矩阵的每一列都是一个特征向量:

6. 转换数据到新的空间

最后,将原始数据矩阵 X_{std} 通过投影矩阵 P 转换到新的空间,得到降维后的数据矩阵 Y:

此时,Y 就是主成分得分矩阵,其维度为 m×k,表示原始数据在选定的 k 个主成分方向上的投影。通过上述步骤,PCA 将原始数据集从一个可能高度相关的空间转换到了一个低维、线性不相关的新空间中,这个新空间由数据最重要的方向(即主成分)定义。

PCA代码实例

下面是一个简单的Python示例,演示如何使用sklearn库来执行主成分分析(PCA)。该示例包括生成一些模拟数据、执行PCA以及可视化结果的步骤。

如果你还没有安装sklearnmatplotlib,可以通过运行下面的命令来安装:

pip install scikit-learn matplotlib

Python代码示例如下

import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# 生成模拟数据
np.random.seed(0)
mean = [0, 0]
cov = [[1, 0.8], [0.8, 1]]  # 协方差矩阵
X = np.random.multivariate_normal(mean, cov, 100)

# 执行PCA
pca = PCA(n_components=2)  # n_components设置为2,意味着我们想要投影到一个2维空间
pca.fit(X)
X_pca = pca.transform(X)

# 原始数据和PCA转换后的数据可视化
plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], alpha=0.8)
plt.title('Original Data')
plt.xlabel('X1')
plt.ylabel('X2')

plt.subplot(1, 2, 2)
plt.scatter(X_pca[:, 0], X_pca[:, 1], alpha=0.8)
plt.title('Data after PCA')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')

plt.tight_layout()
plt.show()

# 打印主成分方向和解释的方差比例
print("Principal components direction:\n", pca.components_)
print("Variance explained by each component:\n", pca.explained_variance_ratio_)

参考

https://zh.wikipedia.org/wiki/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晨晨丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值