主成分分析

主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维技术和数据分析方法。它通过线性变换将原始高维数据映射到低维空间,从而提取出数据中最重要的特征。

主成分分析的基本原理与数学推导

基本原理

PCA的主要思想是找到一个新的坐标系,将数据投影到这个坐标系上,使得投影后的数据具有最大的方差。这意味着在新的坐标系下,数据的信息尽可能地集中在少数几个维度上,而其他维度的方差较小,可以被忽略。
具体步骤如下:

  1. 对原始数据进行去中心化,使得数据的均值为0。
  2. 计算数据的协方差矩阵。
  3. 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
  4. 根据特征值的大小,选择前k个特征向量作为主成分,其中k是降维后的维度。
  5. 将原始数据投影到选定的主成分上,得到降维后的数据。

数学推导

设原始数据矩阵为X∈Rm×nX \in R^{m \times n}XRm×n,其中mmm为样本数,nnn为特征数。我们的目标是将数据降低到kkk维。

1.1.1. 去中心化

对原始数据矩阵XXX进行去中心化,即将每个特征减去其均值,得到去中心化矩阵ZZZ

Z=X−1m∑i=1mXi Z = X - \frac{1}{m} \sum_{i=1}^{m} X_i Z=Xm1i=1mXi

其中,XiX_iXi表示第iii个样本。

2.2.2. 协方差矩阵

计算去中心化矩阵ZZZ的协方差矩阵CCC,其中:

C=1mZTZ C = \frac{1}{m} Z^T Z C=m1ZTZ

协方差矩阵CCC的各个元素为:

C1,1=1m∑i=1m(zi,1−zˉ1)2C1,2=1m∑i=1m(zi,1−zˉ1)(zi,2−zˉ2)⋯Ci,j=1m∑i=1m(zi,i−zˉi)(zi,j−zˉj)⋯Cn,n=1m∑i=1m(zi,n−zˉn)2 \begin{aligned} C_{1,1} &= \frac{1}{m} \sum_{i=1}^{m} (z_{i,1}-\bar z_1)^2 \\ C_{1,2} &= \frac{1}{m} \sum_{i=1}^{m} (z_{i,1}-\bar z_1)(z_{i,2}-\bar z_2) \\ \cdots \\ C_{i,j} &= \frac{1}{m} \sum_{i=1}^{m} (z_{i,i}-\bar z_i)(z_{i,j}-\bar z_j) \\ \cdots \\ C_{n,n} &= \frac{1}{m} \sum_{i=1}^{m} (z_{i,n}-\bar z_n)^2 \end{aligned} C1,1C1,2Ci,jCn,n=m1i=1m(zi,1zˉ1)2=m1i=1m(zi,1zˉ1)(zi,2zˉ2)=m1i=1m(zi,izˉi)(zi,jzˉj)=m1i=1m(zi,nzˉn)2

其中,zi,jz_{i,j}zi,j表示去中心化矩阵ZZZ中第iii个样本的第jjj个特征,zˉj\bar z_jzˉj是所有样本的第jjj个特征的均值。

3.3.3. 特征值分解

对协方差矩阵CCC进行特征值分解,得到特征值λ1,λ2,⋯ ,λn\lambda_1,\lambda_2,\cdots,\lambda_nλ1,λ2,,λn和对应的特征向量v1,v2,⋯ ,vnv_1,v_2,\cdots,v_nv1,v2,,vn

Cvi=λivi,i=1,2,⋯ ,n Cv_i = \lambda_i v_i, i=1,2,\cdots,n Cvi=λivi,i=1,2,,n

由于协方差矩阵CCC是实对称矩阵,所以其特征向量v1,v2,⋯ ,vnv_1,v_2,\cdots,v_nv1,v2,,vn是正交的单位向量。

4.4.4. 选择主成分

根据特征值的大小,选择前kkk个特征向量,构成投影矩阵P=[v1,v2,⋯ ,vk]P = [v_1, v_2, \cdots, v_k]P=[v1,v2,,vk],其中viv_ivi为第iii个特征向量。这kkk个特征向量就是数据中最重要的kkk个特征,也称为主成分。

5.5.5. 投影

将去中心化矩阵ZZZ投影到选定的主成分上,得到降维后的数据矩阵YYY

Y=ZP Y = ZP Y=ZP

其中,Y∈Rm×kY \in R^{m \times k}YRm×kP∈Rn×kP \in R^{n \times k}PRn×k

代码实现

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

# 加载iris数据集
data = load_iris()
X = data.data
y = data.target

# 创建PCA对象,并设置降维后的维度为2
pca = PCA(n_components=2)

# 使用fit_transform方法进行降维
transformed_data = pca.fit_transform(X)

# 可视化降维结果
colors = ['navy', 'turquoise', 'darkorange']
# 设置线宽
lw = 2
for color, i, target_name in zip(colors, [0, 1, 2], data.target_names):
    plt.scatter(transformed_data[y == i, 0], transformed_data[y == i, 1], color=color, 
                alpha=0.8, lw=lw,label=target_name)

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

上述代码首先加载了iris数据集,并将数据和标签分别存储在X和y变量中。然后,创建了一个PCA对象,并通过设置n_components参数为2,指定降维后的维度为2。接着,使用fit_transform方法对数据进行降维并得到降维后的结果transformed_data。最后,可视化降维结果,并使用不同颜色表示不同类别的数据点。运行代码后,会显示降维结果的散点图(如下图所示)。
PCA-Iris Dataset

总结

主成分分析(Principal Component Analysis,PCA)是一种常用的降维方法,可以用于减少数据的维度并提取出数据的主要特征。其基本原理是找到一个新的坐标系,将数据投影到这个坐标系上,使得投影后的数据具有最大的方差。具体步骤包括去中心化、计算协方差矩阵、进行特征值分解、选择主成分和投影。我们在实践的过程中可以使用sklearn中的PCA对象进行降维,并根据需要选择合适的降维后的维度。总之,PCA是一种简单有效的降维方法,可以在保留主要特征的情况下减少数据的维度,从而提高机器学习算法的效率。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐