当前位置: 首页 > news >正文

主成分分析(PCA)

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)主成分分析有一些演变的方法,如核主成分分析,解决非线性问题的主成分分析问题。

相关文章:

主成分分析(PCA)

1 主成分分析简介 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;&#xff0c; 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。主成分分析是由卡尔皮尔逊(Karl Pearson)于1901年发明的。通过维度约减的方式将高维度…...

python实现生命游戏

“生命游戏”&#xff08;Conway’s Game of Life&#xff09;是由数学家约翰康威提出的一种零玩家游戏。它是一个细胞自动机&#xff0c;由一组简单的规则决定每个细胞的状态。以下是用Python实现“生命游戏”的代码示例&#xff1a; Python代码实现 import numpy as np imp…...

基于vue框架的CIA报价平台的设计与实现1xv02(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,供应商,产品分类,产品信息,在线咨询,资质申请 开题报告内容 基于Vue框架的CIA报价平台的设计与实现 开题报告 一、选题背景 随着市场竞争的日益激烈&#xff0c;企业对于成本控制与效率提升的需求愈发迫切。在采购与供应链管理…...

【Kubernetes】k8s集群Pod控制器

目录 一.Pod控制器作用 二.Pod控制器类型 1.Deployment&#xff08;简称deploy&#xff09; ReplicaSet&#xff08;简称rs&#xff09; 2.StatefulSet&#xff08;简称sts&#xff09; 创建SatefulSet控制器 3.DaemonSet&#xff08;简称ds&#xff09; 4.Job 5.Cron…...

什么是NLP实体识别?

目录 1. 实体识别的基本概念 1.1 什么是实体识别&#xff1f; 1.2 实体识别的应用场景 2. 实体识别的常用方法 2.1 基于规则的方法 2.1.1 规则定义与模式匹配 2.2 基于机器学习的方法 2.2.1 特征工程与传统机器学习模型 2.3 基于深度学习的方法 2.3.1 神经网络模型 …...

掌握Jenkins自动化部署:从代码提交到自动上线的全流程揭秘

Jenkins自动化部署是现代软件开发中不可或缺的一部分&#xff0c;它不仅简化了代码的发布过程&#xff0c;还为整个团队带来了无与伦比的效率和协作力。想象一下&#xff0c;开发者们可以专注于编写高质量的代码&#xff0c;而不是为繁琐的手动部署所烦恼&#xff1b;测试人员能…...

糟糕界面集锦-控件篇09

目前我们还无法确定该把这个问题划到哪个类别中&#xff0c;但是如图所示&#xff0c;在一个列表框中只显示3 个项目无疑是愚蠢的。 这是微软的文件管理器提供的文件关联界面&#xff0c;用户需要把某一个特定类型的文件与一个应用程序关联时会弹出该对话框。如示例&#xff1a…...

喵喵蓝牙热敏打印机(下)

目录 前言一、电量、温度、缺纸检测1.电量检测2.针头温度检测3.缺纸检测 二、蓝牙APP通信打印1.蓝牙初始化2.APP通信打印 三、FreeRTOS任务整合 前言 喵喵蓝牙热敏打印机&#xff08;上&#xff09; 内容有点多&#xff0c;就分为了上下两篇。 一、电量、温度、缺纸检测 先启…...

软件测试第1章 软件测试是什么

目录​​​​​​​ 内容说明 一、软件测试与质量概览需要熟悉什么 二、如何理解质量保证 三、软件测试的误区-程序员和测试的关系 四、软件测试是什么&#xff1f; 五、软件测试的目的 六、软件测试与软件质量保证 七、软件测试的必要性 八、软件测试的基本概念分析 …...

【技术分享】 hysteria2从服务端到客户端部署教程

hysteria2从服务端到客户端部署教程 前言 在如今的网络环境中&#xff0c;尤其是涉及跨国访问的场景中&#xff0c;hysteria2作为一个新兴的传输协议工具&#xff0c;凭借其高效的传输能力和灵活的配置方式&#xff0c;受到了越来越多用户的青睐。本教程将带您一步步完成hyst…...

C++入门基础知识16

C 的关键字&#xff08;接上一篇博文&#xff01;&#xff01;&#xff01;&#xff09; 54. typeid 指出指针或引用指向的对象的实际派生类型。 55. typename typename&#xff08;类型名字&#xff09;关键字告诉编译器把一个特殊的名字解释成一个类型。在下列情况下必须对一…...

浏览器调试工具-Chrome Dev Tools

浏览器调试模式下的各个调试工具是常用的工具集&#xff0c;能够帮助开发者理解、调试和优化网页。 1.打开方式 直接在浏览器中按下F12键右键点击页面上的任一元素&#xff0c;选择“检查”&#xff08;Inspect&#xff09;在浏览器右上角点击菜单按钮&#xff0c;选择“更多…...

基于车联网大数据平台的用户驾驶习惯行为画像分析

近年来&#xff0c;新能源汽车行业的迅速发展推动了汽车智能化的趋势。新能源汽车上配备了成千上万的传感器&#xff0c;这些传感器采集了大量的行车数据被用于车辆运行状况的监控与分析。另一方面&#xff0c;采集到的大量行车数据&#xff0c;也能很好地体现用户的驾驶习惯。…...

Ubuntu24.04搭建maxkb开发环境

接上文&#xff1a;windows10搭建maxkb开发环境&#xff08;劝退指南&#xff09; 上文在windows10环境搭建maxkb开发环境遇到各种坑&#xff0c;后面就转战ubuntu平台&#xff0c;果然比较顺利的完成开发环境搭建。当然遇到相关的问题还是可以参考上文《windows10搭建maxkb开发…...

C++ 指针和引用的区别

1.引用在定义时必须初始化&#xff0c;而指针没有要求 2.引用一旦引用了一个实体就不能在引用其它实体&#xff0c;指针可以在任何时候指向同一类型的指针 3.没有空引用&#xff0c;但是有空指针 4.在sizeof中含义不同&#xff1a;引用结果为引用类型的大小&#xff0c;但指…...

python绘制蕨菜叶分形

一花一叶一世界,一草一木一浮生. 使用了四个不同的线性变换&#xff0c;根据概率选择其中一个变换并更新 x 和 y 坐标。然后将生成的绿色点绘制出来&#xff0c;形成一片蕨菜叶。 import numpy as np import matplotlib.pyplot as pltdef fern_fractal(num_points):# 初始化坐…...

1分钟了解pandas

Pandas 是一个强大的 Python 库&#xff0c;用于数据分析和数据处理。它为 Python 提供了高效的数据结构和数据分析工具&#xff0c;使得数据操作变得简单而直观。Pandas 由 Wes McKinney 在 2008 年创建&#xff0c;并迅速成为数据科学领域中最受欢迎的库之一。 安装 Pandas …...

django-celery应用-定时执行测试cases

1、celery周期性任务 简介-----celery beat 是一个调度程序&#xff0c;它定期启动任务&#xff0c;然后由集群中的可用工作节点执行这些任务。 django-celery-beat celery默认的调度程序是 celery.beat.PersistentScheduler &#xff0c;它简单地跟踪本地 shelve 数据库文件中…...

【C++深度探索】unordered_set、unordered_map封装

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目录…...

CSS——字体背景(Font Background)

一、字体族 1、字体的相关样式&#xff1a; ① color 用来设置字体颜色&#xff08;前景颜色&#xff09; ② font-size 字体的大小 和font-size相关的单位&#xff1a; em 相对于当前元素的一个font-size rem 相对于根元素的一个font-size ③ font-family 字体族&#x…...

秋招突击——8/15——知识补充——Socket通信

文章目录 引言正文基于TCP协议的Socket通信基于UDP协议的Socket通信服务端如何接收更多项目多进程多线程IO多路复用select轮询IO多路复用epoll事件通知 使用Socket实现同一个机器上的多线程通信服务端创建对应socket监听端口客户端发起对应的连接请求 总结 引言 上次面试腾讯的…...

Qt第十四章 模型视图

Model/View(模型/视图&#xff09;结构 文章目录 Model/View(模型/视图&#xff09;结构简介视图组件Model/View结构的一些概念项目控件组&#xff08;item Widgets&#xff09;模型/视图 如何使用项目视图组设置行的颜色交替变换拖拽设置编辑操作其他操作 选择模型自定义选择多…...

硬件工程师必须掌握的MOS管详细知识

MOS管&#xff0c;全称为金属-氧化物半导体场效应晶体管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff0c;MOSFET&#xff09;&#xff0c;是一种重要的半导体器件&#xff0c;广泛应用于电子工业中各种电路的开关、放大、调制、数字电路和模拟电路等…...

希尔排序,详细解析(附图解)

1.希尔排序思路 希尔排序是一种基于插入排序的算法&#xff0c;通过将原始数据分成若干个子序列&#xff0c;然后对子序列进行插入排序&#xff0c;逐渐减小子序列的间隔&#xff0c;最后对整个序列进行一次插入排序。 1.分组直接插入排序&#xff0c;目标接近有序--------…...

【C语言篇】编译和链接以及预处理介绍(下篇)

文章目录 前言#和###运算符##运算符 命名约定#undef命令⾏定义条件编译#if和#endif多个分支的条件编译判断是否被定义嵌套指令 头文件被包含头文件被包含的方式本地文件包含库文件的包含 嵌套文件包含 其他预处理指令 写在最后 前言 本篇接前一篇【C语言篇】编译和链接以及预处…...

利用Llama2 7b自己实现一套离线AI

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c; 可以当故事来看&#xff0c;轻松学习。 离了 ChatGPT 本人简直寸步难行&#xff0c;今天 ChatGPT 大面积宕机&#xff0c;服务直到文章写作&am…...

Ciallo~(∠・ω・ )⌒☆第十七篇 Ubuntu基础使用 其一

Ubuntu是一种基于Linux的操作系统&#xff0c;它是开源的、免费的&#xff0c;并且具有广泛的用户群体。 基本文件操作&#xff1a;Ubuntu使用命令行工具来进行文件操作。以下是一些常用的命令&#xff1a; 切换到用户主目录&#xff1a; cd ~ 切换到上级目录&#xff1a; cd .…...

Linux-零拷贝技术

什么是零拷贝&#xff1f; 在传统的数据传输过程中&#xff0c;数据需要从磁盘读取到内核空间的缓冲区&#xff0c;然后再从内核空间拷贝到用户空间的应用程序缓冲区。如果需要将数据发送到网络&#xff0c;数据还需要再次从用户空间拷贝到内核空间的网络缓冲区。这个过程涉及…...

小区团购管理

TOC springboot254小区团购管理 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&…...

图像文本擦除无痕迹!复旦提出EAFormer:最新场景文本分割新SOTA!(ECCV`24)

文章链接&#xff1a;https://arxiv.org/pdf/2407.17020 git链接&#xff1a;https://hyangyu.github.io/EAFormer/ 亮点直击 为了在文本边缘区域实现更好的分割性能&#xff0c;本文提出了边缘感知Transformer&#xff08;EAFormer&#xff09;&#xff0c;该方法明确预测文…...