当前位置: 首页 > 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…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...