主成分分析(Principal Component Analysis,PCA)详解

2023-10-27

PCA是非常重要的统计方法,其实际应用非常广泛,但是很多讲解太过于公式化,很难让初学者消化,本文将从一个实际例子出发,并对数学公式原理及推导过程作出详细解释,即使你的数学基础比较差,在看完这篇博客之后,相信你会对PCA会有一个透彻的认知。


PCA的思想就是将n维特征映射到k维上(k<n),这k维是重新构造出来的全新维度特征,而不是简单的从n维特征去除n-k维特征,这k维就是主成分。


1.导读


如图所示,在三维坐标系中,四种颜色的标记界限并不直观,但是在重新定义的二维坐标系中,四种颜色标记界限非常直观,这就是一个典型的PCA,在降维的同时最大程度的保留了数据的特征,为后续的分析提供更直观的支持。

上图PCA过程中有两步非常重要,一是寻找差异最明显的PC1、PC2坐标系所在的平面,二是如何把Gene1、Gene2、Gene3坐标系中的点映射到PC1、PC2的坐标系中。这也是所有PCA非常重要的两步,一是寻找差异最明显坐标系的新维度,二是把之前多维坐标系中的点映射到新维度的坐标系中。


2.PCA步骤

废话不多说,我们首先来看一下PCA的步骤,一步步的去理解。

1.对数据中心化

2.求特征的协方差矩阵

3.求协方差矩阵的特征值和特征向量

4.取最大的k个特征值所对应的特征向量

5.将样本点投影到选取的特征向量上


看到这里呢,可能很多人不理解,而且有些数学概念不清楚,这都没关系,通过下面的例子你再看这五个步骤你会发现原来如此。


3.PCA实例

现在假设有一组数据如下:


行代表了样例,列代表维度,这里有10个样例,每个样例两个维度。我们如何用一个维度来表示这10个样例。这个可以理解为在直角坐标系的中的十个点,如何找到一个直线,这个直线就是全新的维度,是主成分。让10个样例映射到这个直线上,得到的划分最明显。


第一步:数据中心化。中心化指的是中心化是指数据集中的各项数据减去数据集的均值,中心化的目的是提高训练速度。我们分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。这里x的均值是1.81,y的均值是1.91,那么第一个样例减去均值后即为(0.69,0.49),同理得到



第二步:求特征的协方差矩阵。这里简单的介绍下协方差矩阵,大家都知道方差是用来度量单个变量 “ 自身变异”大小的总体参数,方差越大表明该变量的变异越大。方差一般是用来描述一维数据的,但是我们尝尝面对多维的数据集,比如这个实例目前就是二维的,这时候我们就可以用协方差来度量两个变量之间 互相影响大小的参数。如果结果是正,说明两个变量是正相关。如果结果为负,说明两个变量是负相关。协方差的绝对值越大,则二个变量相互影响越大 ,反之则越小。协方差矩阵代表了样本集在不同维度之间的方差,我们可以理解为协方差矩阵就是来度量各个维度偏离其均值的程度,也就是不同维度之间互相影响的相关性,首先我们来对比一下方差和协方差公式来加深理解:




接下来看一下方差矩阵的表示,我这里没找到二维协方差矩阵的表示,用三维协方差矩阵表示一下:


二维和更多维的同理,这里求的协方差矩阵为:



第三步:求协方差矩阵的特征值和特征向量。

通过上一步,我们已经建立起每个维度之间互相影响相关性的矩阵,绝对值高表示相关度高,绝对值低表示相关性低。我们理想的一维(也就是最终的直线)应该与更多相关性高的方向垂直,这样可以找到一条直线,使二维中的点最大程度的投影在不同的区域,虽然维度降低,但是每个点之间的区分依然非常明显。这是PCA最关键的地方,比较抽象,但是想明白了就觉得很简单。那么我们如何去确定相关性高的方向呢?我们可以用协方差的特征值和特征向量来计算准确的方向。其实协方差的特征向量表示样本集的相关性集中分布在这些方向,而特征值就;反映了样本集在该方向上的相关性大小。PCA正是基于这一点,寻找区分最明显的方向,防止降维使样本集区分不开的状况。

特征值和特征向量的计算公式在这里就不详细介绍,因为占用空间比较多,不懂得可以看一下这篇博客:特征值和特征向量

经过计算,我们得到协方差的特征值和特征向量如下:


第四步:取最大的k个特征值所对应的特征向量。将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
这里特征值只有两个,我们选择其中最大的那个,这里是1.28402771,对应的特征向量是(-0.677873399, -0.735178656)T。这里特征向量的方向也就是我们最终理想直线的方向。

第五步:将样本点投影到选取的特征向量上。将样本点投影到选取的特征向量上。假设样例数为m,特征数为n,减去均值后的样本矩阵为DataAdjust(m*n),协方差矩阵是n*n,选取的k个特征向量组成的矩阵为EigenVectors(n*k)。那么投影后的数据FinalData为FinalData(10*1) = DataAdjust(10*2矩阵) x 特征向量(-0.677873399,-0.735178656)T,得到的结果是


这样,就将原始样例的2维特征变成了1维,这1维就是原始特征在1维上的投影。现在大家回头看第二部分的PCA步骤大纲是不是柳暗花明?



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

主成分分析(Principal Component Analysis,PCA)详解 的相关文章

随机推荐

  • 构建Node.js和Arduino执行控制

    Arduino标准固件 首先 我将向您解释何时以及为什么将Firmata用于Arduino 之后 您将看到如何在Arduino上快速设置Standard Firmata 然后 您将在计算机上创建一个客户端以实际通信并向Arduino发送命令
  • kubelet自签证书

    观察到kubelet的服务端证书过期了 但是集群还是正常的 就想看下kubelet的服务端证书时干什么用的 所在的位置 root zyx dev k8s node cpu 220 0122 pki ls la var lib kubelet
  • c存储类别、连接、内存管理

    目录 1 存储类别 2 变量的3个特质 作用域 链接 存储期 3 自动变量 4 寄存器变量 5 块内 无连接 静态变量 6 外部链接的静态变量 6 1定义和声明 7 内部链接的静态变量 8 函数的储存类别 1 存储类别 解释 内存的使用 声
  • websocket连接状态码

    最近在做websocket 需要用到这些 查资料记录下 官网 https developer mozilla org zh CN docs Web API CloseEvent CloseEvent code 只读 返回一个 unsigne
  • Windows WSL中安装Android Studio

    1 安装WSL 我使用的是Windows10 1803版本 安装的是Ubuntu16 04 LTS版本 参考 Windows Subsystem for Linux Installation Guide for Windows 10 2 配
  • 【C语言基础练习】百钱买百鸡问题。母鸡3元钱一只,小鸡1元钱三只,问100元钱要刚好买100只鸡,编程实现母鸡和小鸡各多少只?

    百钱买百鸡问题 母鸡3元钱一只 小鸡1元钱三只 问100元钱要刚好买100只鸡 编程实现母鸡和小鸡各多少只 1 include
  • major.minor version 51.0

    mavn deploy报错 maven版本低了换个高的或者用IDEA自带的
  • chatgpt赋能python:Python数据框基本操作

    Python 数据框基本操作 Python 是一种流行的编程语言 常用于数据分析 数据科学和机器学习等领域 Python 中数据框是一种非常重要的数据类型 也被称为表格或二维数组 本文将介绍 Python 数据框的基本操作 什么是 Pyth
  • jenkins 公钥配置

    Jenkins所在服务器linuxA 应用服务器LinuxB a生成的公钥 放到B服务器 服务器B 在 root ssh路径下建立authorized keys文件 将服务器A生成的id rsa pub 公钥 内容复制到authorized
  • 前端对json配置文件的读取

    一 JSON文件的数据格式为 名字为 path json ipPath http 10 12 37 11 8085 二 在前端页面中对文件进行读取 其中返回的data的数据类型是object 对path json文件进行读取 getJSON
  • 07 Linux补充|秋招刷题|9月6日

    目录 Linux 结构体内存字节对齐 静态变量static 空指针 Linux 结构体内存字节对齐 结构体内存字节要对 32位系统 4 8 32 64位系统 8 16 24 字节对 字节对 是指在计算机中 各种类型数据按照 定的规则在空间上
  • 解决Win10家庭版没有‘本地用户和组’问题

    win10系统是家庭版 并且没有本地用户和组 处理方法 将系统升至为win10专业版 然后下载microKMS v17 02 14做的激活 1 打开运行窗口 输入 gpedit msc或者secpol msc 点击确定 弹出提示框提示找不到
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)

    FFmpeg 是一个非常优秀的视频处理开源工具 假如你想把avi或者flv转成mpp4的时候 你就不必要用格式工厂很繁琐的方式去转换格式 因为比如flv和mp4他的编码 视频编码和音频编码 都是h 264编码其实并没有变 这是封装格式不一样
  • 算法学习day27

    文章目录 39 组合总和 回溯法 40 组合总和II 回溯 131 分割回文串 回溯 39 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target 找出 candidates 中可以使数字和为目标数
  • mybatis中resultMap和resultType区别,三分钟读懂

    先说结论 resultmap与resulttype的区别为 对象不同 描述不同 类型适用不同 说人话就是 resultmap和resulttype功能差不多 但是resultmap功能更强大 resultType 使用resultType进
  • 成员变量与属性是不同的

    成员变量 在类体的变量部分中定义的变量 也称为字段 属性 官方定义为属性是指get或者set方法名 去掉get或者set后 把剩余的部分首字母改为小写后 即为这个类的属性 例 public class Test private String
  • 基础算法01

    冒泡排序 基本思想是 将相邻的记录的关键码进行比较 若前面记录的关键码大于后面记录的关键码 则将它们交换 否则不交换 bool swapped true do swapped false for int i 0 i
  • 在idea中配置 gitignore忽略文件(一)

    针对一些不用每次提交的文件 设置不让其提交到git的本地仓库中 先在idea中安装gitignore插件 点击File gt Settings 选择plugs 在右边搜索 ignore 点击Install 安装完成后就可以愉快的使用了 不过
  • 界面、线程与Qt线程

    1 当界面的操作频率很高 而且还要考虑用户体验时 耗时的操作会独占系统cpu资源 让界面卡死在那里 这时需要考虑多线程方案 将耗时的操作放在 线程中执行 如下例 界面需要不停地添加字符串 如果不使用线程处理的话界面会卡死 下面我们先使用UC
  • 主成分分析(Principal Component Analysis,PCA)详解

    PCA是非常重要的统计方法 其实际应用非常广泛 但是很多讲解太过于公式化 很难让初学者消化 本文将从一个实际例子出发 并对数学公式原理及推导过程作出详细解释 即使你的数学基础比较差 在看完这篇博客之后 相信你会对PCA会有一个透彻的认知 P