主成分分析(PCA)

ops/2024/10/8 18:51:31/

1 主成分分析简介

主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。主成分分析是由卡尔·皮尔逊(Karl Pearson)于1901年发明的。通过维度约减的方式将高维度空间的数据映射到低维度空间的数据。

2 主成分分析基本原理

2.1 线性变换

主成分分析的核心思想是通过将原数据的维度进行线性变换得到一组新的数据维度(主成分)。这组新的数据维度称为主成分。主成分之间线性无关,主成分实际构建了数据新的特征维度,在该特征维度下,数据的维度可能进行了压降,数据的运算会变得更加容易。

有n个p维的样本,构成样本矩阵

X=\begin{bmatrix} x_{11} &x_{12} &... & x_{1n}\\ x_{21} &x_{22} &... & x_{2n} \\ .& .&... & . \\ x_{p1} &x_{p2} &... & x_{pn} \end{bmatrix}=\begin{bmatrix} x_{1}\\ x_{2} \\ ... \\ x_{p} \end{bmatrix}

假设有一组向量(数据)可以通过x_{1},x_{2},...,x_{p}线性表达

\left\{\begin{matrix} y_{1}=a_{11}x_{1}+a_{12}x_{2}+...+a_{1p}x_{p}\\ y_{2}=a_{21}x_{1}+a_{22}x_{2}+...+a_{2p}x_{p} \\ ... \\ y_{m}=a_{m1}x_{1}+a_{m2}x_{2}+...+a_{mp}x_{p} \end{matrix}\right.

当选择合适的系数,会构建满足条件的新的特征维度y_{1},y_{2},...,y_{m},记Y=\begin{bmatrix} y_{1}\\ y_{2} \\ ... \\ y_{m} \end{bmatrix}

记上述变换为Y=AX

其中A=\begin{bmatrix} a_{11} & a_{12} &... &a_{1p} \\ a_{21}&_{22} & ...&a_{2p} \\ .& .& .& .\\ a_{m1}& a_{m2}& ...&a_{mp} \end{bmatrix}

在构建主成分时,要求y_{i},y_{j}(i\neq j)之间线性无关,且在i<j时,X在主成分y_{i}上投影的方差大于在主成分y_{j}上的投影的方差。如此,数据X在主成分上进行了“分解”,且依据数据信息量的程度将主成分进行了区分和排序。当m<p时,实现了对数据的降维操作。

这里的变换矩阵A即为所求的变换矩阵。

2.2 协方差与相关系数

假设样本x_{1}=(x_{11},x_{12},...,x_{1n}),x_{2}=(x_{21},x_{22},...,x_{2n})

则样本x_{1}的均值为\overline{x_{1}}=\frac{1}{n}\sum_{i=1}^{n}x_{1i},方差为s_{1}=\frac{1}{n-1}\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})^{2}

样本x_{1},x_{2}的协方差为cov(x_{1},x_{2})=E(x_{1}-\overline{x_{1}})(x_{2}-\overline{x_{2}})=\frac{1}{n-1}\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})(x_{2i}-\overline{x_{2}})

样本x_{1},x_{2}的相关系数为

r_{12}=\frac{cov(x_{1},x_{2})}{\sqrt{s_{1}s_{2}}}=\frac{\frac{1}{n-1}\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})(x_{2i}-\overline{x_{2}})}{\sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})^{2}*\frac{1}{n-1}\sum_{i=1}^{n}(x_{2i}-\overline{x_{2}})^{2}}}=\frac{\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})(x_{2i}-\overline{x_{2}})}{\sqrt{\sum_{i=1}^{n}(x_{1i}-\overline{x_{1}})^{2}*\sum_{i=1}^{n}(x_{2i}-\overline{x_{2}})^{2}}}

若将样本x_{1},x_{2}标准化,即\frac{x_{1i}-\overline{x_{1}}}{\sqrt{\frac{1}{n-1}s_{1}}},\frac{x_{2i}-\overline{x_{2}}}{\sqrt{\frac{1}{n-1}s_{2}}},i=1,2,...,n,为便于表达再将其分别记为x_{1},x_{2}

则标准化后的x_{1},x_{2}的均值为0,方差为1,则其协方差矩阵与相关系数均为

r_{12}=\frac{cov(x_{1},x_{2})}{\sqrt{s_{1}s_{2}}}=\frac{1}{n-1}\sum_{i=1}^{n}x_{1i}x_{2i}

在主成分中,由于y_{i},y_{j}(i\neq j)线性无关,故y_{i},y_{j}(i\neq j)的协方差和相关系数均为0。

2.3 特征值与特征向量

现在假设X的分量x_{1},x_{2},...,x_{p}均已按前述操作进行了标准化,则X的协方差矩阵C=\frac{1}{n-1}XX^{T},为p*p的实对称阵。

存在主成分分析对应的矩阵A,使得Y=AX。则Y的协方差矩阵D=\frac{1}{n-1}YY^{T}=\frac{1}{n-1}\begin{bmatrix} y_{1}\\ y_{2} \\ ... \\ y_{m} \end{bmatrix}*\left ( y_{1},y_{2},...,y_{m} \right )

由于y_{i},y_{j}(i\neq j)线性无关,y_{i},y_{j}(i\neq j)的协方差为0,上述矩阵D为对角阵。

D=\frac{1}{n-1}YY^{T}=\frac{1}{n-1}(AX)(AX)^{T}=\frac{1}{n-1}AXX^{T}A^{T}=A(\frac{1}{n-1}XX^{T})A^{T}=ACA^{T}

如此,可以看出主成分分析的问题转化之一的要求是寻找一矩阵A,使得将实对称阵C转化为对角阵D

根据实对称阵的相关代数知识,实对称阵C一定存在一组非负特征值\lambda _{1},\lambda _{2},...,\lambda _{p}和特征向量(单位正交向量)\beta _{1},\beta _{2},...,\beta _{p},使得C\beta _{i}=\lambda _{i}\beta _{i},i=1,2,...,p,其中\beta _{i}p维向量。

B=\left (\beta _{1},\beta _{2},...,\beta _{p} \right ),则CB=B\begin{bmatrix} \lambda _{1} & & & \\ & \lambda _{2} & & \\ & & ... & \\ & & & \lambda _{p} \end{bmatrix}

由于B为正交矩阵,B^{-1}=B^{T},从而将上式左边同时乘以B^{T}得到

B^{T}CB=\begin{bmatrix} \lambda _{1} & & & \\ & \lambda _{2} & & \\ & & ... & \\ & & & \lambda _{p} \end{bmatrix}

A=B^{T},即可找出矩阵A

其对上述特征值,若将其按从大到小排列,即\lambda _{1}\geqslant \lambda _{2}\geqslant ...\geqslant \lambda _{p},则对应的矩阵A主成分分析所求的线性变换矩阵。

如此,问题得解。

当存在特征值为0时,则m<p,起到降维的效果。

2.4 主成分的贡献

主成分的贡献率衡量的是主成分的影响。

主成分y_{i}的贡献率为\frac{\lambda_{i}}{\sum_{j=1}^{p}\lambda _{j}}

主成分的累计贡献率为\frac{\sum_{j=1}^{i}\lambda_{j}}{\sum_{j=1}^{p}\lambda _{j}}

3 主成分分析算法步骤

3.1 数据标准化

将样本X的每一个数据按照以下方式进行标准化:\frac{x_{ki}-\overline{x_{k}}}{\sqrt{\frac{1}{n-1}s_{k}}},其中\overline{x_{k}},s_{k}的定义见前文。不妨将标准化后的数据仍记为x_{ki},x_{k},X,k=1,2,...,p,i=1,2,...,n

3.2 计算协方差矩阵

C=\frac{1}{n-1}XX^{T}=\frac{1}{n-1}\begin{bmatrix} x_{1}\\ x_{2} \\ ... \\ x_{p} \end{bmatrix}*\left ( x_{1},x_{2},...,x_{p} \right )=\frac{1}{n-1}\begin{bmatrix} r_{11} & r_{12} &... &r_{1p} \\ r_{21}& r_{22}& ...& r_{2p}\\ .&. & ...& .\\ r_{p1}&r_{p2} &... &r_{pp} \end{bmatrix}

3.3 求解特征值和特征向量

记特征值为\lambda(\lambda \geqslant 0),特征向量为\beta,有

C\beta =\lambda \beta,得到方程(\lambda E-C)\beta =0   ......  (1)式。
该方程有非零解的充要条件为行列式\left | \lambda E-C \right |=0。这是一个关于\lambda的齐次线性方程组,求解该方程组,得到\lambda,并将其按从大到小排序。再将\lambda代入(1)式,可求解出特征向量\beta,并将特征向量单位化。

3.4 构造主成分

若对主成分的累计贡献率有要求,如选择累计贡献率\geqslant95%的特征值,记为\lambda _{1},\lambda _{2},...,\lambda _{m},对应的单位特征向量为\beta _{1},\beta _{2},...,\beta _{m}

B=\left (\beta _{1},\beta _{2},...,\beta _{m} \right ),令A=B^{T},利用线性变换Y=AX,得到主成分Y

4 主成分分析实例

这里用sklearn中自带的PCA模型及数据进行演示。

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
X = np.array([[-1, -2], [-2, -1], [-3, -2], [2, 1], [2, 1], [3, 2]])
X_std = StandardScaler().fit_transform(X) #数据标准化
pca = PCA(n_components=2)
pca.fit(X_std)
#查看特征值
print(pca.singular_values_)
[3.41436763 0.58488774]
#查看特征向量
print(pca.components_)
[[ 0.70710678  0.70710678][ 0.70710678 -0.70710678]]

5 主成分分析总结

(1)主成分分析的计算步骤简单,主要是求解特征值和特征向量;

(2)主成分分析的各主成分之间正交,数据运算会变得容易;

(3)当主成分的维度小于原数据维度时,可以起到降维的作用;

(4)主成分维度可能不如原数据维度直观,解释性较差;

(5)主成分分析有一些演变的方法,如核主成分分析,解决非线性问题的主成分分析问题。


http://www.ppmy.cn/ops/94910.html

相关文章

【区块链+金融服务】中国银联区块链可信存证服务 | FISCO BCOS应用案例

随着金融行业信息化的快速推进&#xff0c;“互联网 金融”业务产生了海量的电子数据。例如&#xff0c;截止到 2022 年第二季度&#xff0c; 全国累计信用卡发卡数量约 8.07 亿张&#xff0c;累计银行卡应偿信贷余额为 8.66 万亿元&#xff0c;累计信用卡逾期半年未尝信贷 总…

Vue3学习 Day01

创建第一个vue项目 1.安装node.js cmd输入node查看是否安装成功 2.vscode开启一个终端&#xff0c;配置淘宝镜像 # 修改为淘宝镜像源 npm config set registry https://registry.npmmirror.com 输入如下命令创建第一个Vue项目 3.下载依赖&#xff0c;启动项目 访问5173端口 …

C++STL初阶(10):list的简易实现(下)

在上一文中我们完成了链表的多数基本接口&#xff0c;本文主要围绕构造函数进行补充 1. 链表的拷贝 在前文中我们没有手动实现拷贝构造&#xff0c;所以使用的就是编译器自动生成的浅拷贝 先使用一下编译器自动生成的浅拷贝&#xff1a; 我们在打印li2之前给li1加入一个数据&…

在 Spring Boot 中使用工厂模式实现灵活的通知服务

在现代软件开发中&#xff0c;特别是在构建可扩展和易于维护的应用程序时&#xff0c;设计模式扮演着至关重要的角色。其中之一是工厂模式&#xff0c;它允许我们在运行时根据特定条件创建对象&#xff0c;而无需硬编码具体的类名。本篇文章将通过一个具体例子来展示如何在Spri…

实战|uniapp模仿微信实现发送位置消息,解决滚动页面地图层级冲突

前言 在即时通讯应用中&#xff0c;虽然发送位置信息不是核心功能&#xff0c;但在特定场景下&#xff0c;这个功能仍然非常有用。 本文将介绍如何在 uniapp 中实现位置信息的发送和展示&#xff0c;特别是在遇到地图层级问题时的解决方案。 以下内容均基于 uniapp 打包 App …

javaEE WebServlet、SpringWebMVC、SpringBoot实现跨域访问的4种方式及优先级,nginx配置跨域

文章目录 1. 前置知识2. 原理和解决方案总结2.1. 跨域不通过原理流程图2.2. 实现原理&#xff1a;添加以下http响应头2.3. 四种跨域实现方式及优先级&#xff08;从高到低&#xff09; 3. 具体实现代码3.1. 跨域全局配置方式-Filter(全适用)3.2. 跨域全局配置方式-SpringMvc3.3…

Vue3使用el-table实现多级表头合并列

不难发现&#xff0c;需要多级表头的列只需要在外面包一层el-table-column起名字即可 <el-table :data"tableData" style"width: 100%"><el-table-column type"index" label"序号" width"100" align"center&q…

高级java每日一道面试题-2024年8月14日-设计模式篇-你对观察者设计模式了解多少?

如果有遗漏,评论区告诉我进行补充 面试官: 你对观察者设计模式了解多少? 我回答: 在Java高级面试中&#xff0c;对观察者设计模式&#xff08;Observer Pattern&#xff09;的理解是一个重要的考察点。观察者模式是一种基于发布-订阅机制的行为型设计模式&#xff0c;它用于…