机器学习之主成分分析(Principal Component Analysis)

1 主成分分析介绍

1.1 什么是主成分分析

主成分分析(Principal Component Analysis)简称PCA,是一个非监督学习的机器学习算法,主要用于数据的降维,对于高维数据,通过降维,可以发现更便于人类理解的特征。

PCA是实现数据降维的一种算法。正如其名,假设有一份数据集,每条数据的维度是D,PCA通过分析这D个维度的前K个主要特征(这K个维度在原有D维特征的基础上重新构造出来,且是全新的正交特征),将D维的数据映射到这K个主要维度上进而实现对高维数据的降维处理。 PCA算法所要达到的目标是,降维后的数据所损失的信息量应该尽可能的少,即这K个维度的选取应该尽可能的符合原始D维数据的特征。

47fce58d3d34407392859b52bd74fe45.png

 

1.2 为什么需要PCA算法

在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。

因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。主成分分析与因子分析就属于这类降维的方法。

1.3 PCA原理

降维有两种方法,一种是特征消除,另一种是特征提取

  • 特征消除:将会在直接消除那些我们觉得不重要的特征,这会使我们对视这些特征中的很多信息。
  • 特征提取:通过组合现有特征来创建新变量,可以尽量保存特征中存在的信息

PCA是一种常见的数据降维算法,PCA会将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的,于是就可以用较少的综合指标分别代表存在于各个变量中的各类信息。PCA的核心思想是找到一个维数更低的仿射集,然后将所有的数据点在其上做投影,以得到新的在更低维空间中的点作为新的数据。如何选择这样的仿射集,以降维的同时不至于损失过多的信息呢?有两种思路:

  • 最近重构性:样本点到该仿射集的距离要尽量小;
  • 最大可分性:样本点到该放射集的投影要尽可能分开。        

56cb88c65f2c4613877d0197d587f7f6.png

上图所示的左图中有5个离散点,降低维度,就是需要把点映射成一条线。将其映射到右图中黑色虚线上则样本变化最大,且坐标点更分散,这条黑色虚线就是第一主成分的投影方向。

PCA是一种线性降维方法,即通过某个投影矩阵将高维空间中的原始样本点线性投影到低维空间,以达到降维的目的,线性投影就是通过矩阵变换的方式把数据映射到最合适的方向。

降维的几何意义可以理解为旋转坐标系,取前k个轴作为新特征。降维的代数意义可以理解为eq?m%5Ctimes%20n,阶的原始样本X,与eq?n%5Ctimes%20k阶的矩阵W做矩阵乘法运算eq?X%5Ctimes%20W(下面简记为XW),即得到m*k阶的低维矩阵Y,这里eq?n%5Ctimes%20k阶的矩阵W就是投影矩阵。

本次介绍从最大方差理论(最大可分性)的角度理解PCA的原理。最大方差理论主要是指投影后的样本点在投影超平面上尺量分开,即投影方差最大。其中涉及的概念如下:

1.3.1 PCA 涉及的主要问题

(1)对实对称方阵,可以正交对角化,分解为特征向量和特征值,不同特征值对应的特征向量之间止交,即线性无关。特征值表示对应的特征向量的重要程度,特征值越大,代表包含的信息量越多,特征值越小,说明其信息量越少。在等式Av=λv中v为特征向量,λ为特征值。

(2)方差相当于特征的辨识度,其值越大越好。方差很小,则意味着该特征的取值大部分相同,即该特征不带有效信息,没有区分度;方差很大,则意味着该特征带有大量信息,有区分度。

(3)协方差表示不同特征之间的相关程序,例如,考察特征x和y的协方差,如果是正值,则表明x和y正相关,即x和y的变化趋势相同,越大y越大;如果是负值,则表明x和y负相关,即x和y的变化趋势相反,x越小y越大;如果是零,则表明x和y没有关系,是相互独立的。

为计算方便,将特征去均值,设特征x的均值为eq?%5Cbar%7Bx%7D,去均值后的方差为S,特征x和特征y的协方差为cov(x,y),设样本数为m,对应的公式分别为:

974b3cba9d594fa6917d2b7a64e9d5ed.png

当cov(x,y)=0时,表示特征x和y完全独立。当有n个特征时,引用协方差矩阵表示多个特征之间的相关性,例如,有3个特征x、y、z,协方差矩阵为:

01f55611b2ec4bb89b3ad53622af2dab.png

显然,协方差矩阵是实对称矩阵,其主对角线是各个特征的方差,非对角线是特征间的协方差,根据线性代数的原理,该协方差矩阵可以正交对角化,即可以分解为特征向量和特征值,特征向量之间线性无关,特征值为正数。

1.3.2 PCA 的优化目标

(1)构造彼此线性无关的新特征。

PCA的目标之一是新特征之间线性无关,即新特征之间的协方差为0。其实质是让新特征的协方差矩阵为对角矩阵,对角线为新特征的方差,非对角线元素为0,用来表示新特征之间的协方差0,对应的特征向量正交。

基于此目标,求解投影矩阵,具体过程如下。

不考虑降维,即维度不改变的情况下,设原始矩阵X为m个样本,n维特征,转换后的新矩阵Y仍为m个样本,n维特征。

首先对X和Y去均值化,为了简便,仍用X和Y分别表示均值化的矩阵,此时X的协方差矩阵为

8a2c68c8d3ea8206c8c188c6f909b75b.jpeg

,Y的协方差矩阵为

6d21f5566a103101e51eedb7aca96402.jpeg

接着,将eq?m%5Ctimes%20n阶矩阵X变为eq?m%5Ctimes%20n阶矩阵Y,最简单的是对原始数据进行线性变换:Y=XW,其中W为投影矩阵,是一组按行组成的eq?n%5Ctimes%20n矩阵。将公式代人后可得:

d6b109440e3241bba240de3cdb990fae.png

 PCA的目标之一是新特征之间的协方差为0.即eq?C%5E%7B%27%7D为对角矩阵,根据eq?C%5E%7B%27%7D的计算公式可知,PCA的目标就转换为:计算出W,且W应使得eq?W%5E%7BT%7DCW是一个对角矩阵。因为C是一个实对称矩阵,所以可以进行特征分解,所求的W即特征向量。

(2)选取新特征。

PCA的目标之二是使最终保留的主成分,即k个新特征具有最大差异性。鉴于方差表示信息量的大小,可以将协方差矩阵C的特征值(方差)从大到小排列,并从中选取k个特征,然后将所对应的特征向量组成eq?n%5Ctimes%20k阶矩阵eq?W%5E%7B%27%7D,计算出eq?XW%5E%7B%27%7D,作为降维后的数据,此时n维数据降低到了k维。

一般而言,k值的选取有两种方法:

  • 预先设立一个國值,例如0.95,然后选取使下式成立的最小k值:(eq?%5Clambda%20_%7Bi%7D代表特征值)

b7b439deb2d8c64e4d4b922f05fb4415.jpeg

  • 通过交叉验证的方式选择较好的k值,即降维后机器学习模型的性能比较好。

 1.4 PCA 求解步骤

输入:m条样本,特征数为n的数据集,即样本数据

57494efbc139d68e28a02ae89ad55247.jpeg

降维到的目标维数为k。记样本集为矩阵X。

e5d9025bc52ad27fa6467092e16e5ebf.jpeg

其中每一行代表一个样本,每一列代表一个特征,列号表示特征的维度,共n维。

输出:降维后的样本集

6192a2e215bc0cdf01899738501878f8.jpeg

步骤如下:

第一步:对矩阵去中心化得到新矩阵X,即每一列进行零均值化,也即减去这一列的均值eq?%5Cbar%7Bx%7D_%7Bi%7D

1152f2239ee4f435e193a53f05349d1d.jpeg

所求X仍为eq?m%5Ctimes%20n阶矩阵。

 

6a4dbcee2dd536e4351cbabfd594cfcb.jpeg

第二步:计算去中心化的矩阵X的协方差矩

8a2c68c8d3ea8206c8c188c6f909b75b.jpeg

,即eq?n%5Ctimes%20n阶矩阵。

第三步:对协方差矩阵C进行特征分解,求出协方差矩阵的特征值eq?%5Clambda%20_%7Bk%7D,及对应的特征向量eq?v%20_%7Bk%7D,即

e34174ef555b6d06ba8df2bf901b560d.jpeg

第四步:将特征向量按对应特征值从左到右按列降序排列成矩阵,取前k列组成矩阵W,即eq?n%5Ctimes%20k阶矩阵。

第五步,通过eq?Y%3D%20XW计算降维到k维后的样本特征,即eq?m%5Ctimes%20k阶矩阵。

 

2 PCA优缺点

主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维技术,用于将高维数据映射到低维空间。它可以帮助我们发现数据中最重要的特征,并去除其中的噪声,从而简化数据并加快机器学习算法的训练过程。以下是PCA算法的一些优缺点:

2.1 PCA算法优点:

  • 降维:PCA可以将高维数据转换为低维数据,减少数据维度,降低存储和计算开销。

  • 特征提取:PCA可以找到数据中最重要的特征(主成分),这些主成分是原始数据线性组合的结果,能够保留大部分数据的方差信息。

  • 去除噪声:PCA可以过滤掉数据中的噪声,因为噪声通常包含在数据的低方差主成分中,而PCA会保留高方差的主成分。

  • 可解释性:PCA得到的主成分是原始特征的线性组合,因此可以很好地解释数据的变化情况。

  • 数据可视化:降维后的数据可以更方便地在二维或三维空间中进行可视化展示。

2.2 PCA算法缺点:

  • 信息损失:PCA是一种无监督学习算法,它通过最大化方差来选择主成分,但在降维过程中可能会丢失一些重要信息,特别是低方差的主成分往往包含了一些有用的局部模式。

  • 非线性问题处理困难:PCA只能处理线性关系,对于非线性关系的数据降维效果不好。

  • 计算复杂性:PCA需要计算数据的协方差矩阵,其计算复杂性随数据维度的增加而增加,对于大规模数据集可能较为耗时。

  • 可能不适用于稀疏数据:PCA在处理稀疏数据时效果可能不佳,因为稀疏数据的协方差矩阵难以准确估计。

  • 主成分含义复杂:PCA得到的主成分是原始特征的线性组合,可能不易解释,特别是当数据维度较高时,主成分往往难以直观地与实际含义对应。

PCA是一种简单而有效的降维算法,在很多数据处理和特征提取的场景下都有广泛应用。然而,对于一些特定问题,可能需要考虑其他更适合的降维方法,例如流形学习等非线性降维技术。

3 主成分分析应用场景

主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,但它的应用场景不仅限于降维。PCA还可以用于数据预处理、特征提取、去噪等多个领域。以下是主成分分析算法的一些应用场景:

  • 数据降维:PCA最常见的应用场景就是将高维数据降低到低维空间。这在数据分析、可视化和机器学习中都非常有用。通过降维,可以减少计算和存储的开销,同时保留数据的主要信息。

  • 特征提取:PCA可以用于提取数据中最重要的特征。通过找到数据中的主成分,PCA可以把数据映射到一个新的低维空间,新空间中的特征通常更具代表性,有助于提高后续任务的性能。

  • 去噪:当数据中包含噪声或冗余信息时,PCA可以过滤掉低方差的主成分,从而去除部分噪声,使得数据更干净,更容易处理。

  • 数据可视化:由于PCA能够将高维数据映射到低维空间,因此它常用于数据可视化。通过将数据降维到2D或3D空间,可以更方便地进行数据可视化和分析。

  • 特征融合:在某些情况下,数据可能来自不同的特征集或数据源。PCA可以用于将这些特征进行融合,从而得到更综合、更具代表性的特征。

  • 信号处理:在信号处理领域,PCA可以用于提取信号的主要成分,去除噪声和冗余信息,从而帮助提高信号处理的准确性和效率。

  • 图像处理:在图像处理中,PCA可以用于图像压缩和特征提取。通过PCA降低图像维度,可以减少图像的存储空间和传输带宽,同时保留图像中的重要特征。

  • 数据预处理:在机器学习中,PCA常用于数据预处理的步骤,用于减少特征维度,去除冗余信息,并提高后续机器学习模型的训练效率和准确性。

主成分分析在多个领域都有广泛的应用。然而,对于某些特定问题,其他降维或特征提取方法可能更适合,因此在实际应用中,需要根据具体情况来选择合适的方法。

4 基于PCA实现对鸢尾花四维数据进行降维处理

4.1 数据集介绍

Iris 鸢尾花数据集是一个经典数据集,在统计学习和机器学习领域都经常被用作示例。数据集内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于(iris-setosa, iris-versicolour, iris-virginica)三种中的哪一品种。

数据内容:

     sepal_len  sepal_wid  petal_len  petal_wid  label
0          5.1        3.5        1.4        0.2      0
1          4.9        3.0        1.4        0.2      0
2          4.7        3.2        1.3        0.2      0
3          4.6        3.1        1.5        0.2      0
4          5.0        3.6        1.4        0.2      0
..         ...        ...        ...        ...    ...
145        6.7        3.0        5.2        2.3      2
146        6.3        2.5        5.0        1.9      2
147        6.5        3.0        5.2        2.0      2
148        6.2        3.4        5.4        2.3      2
149        5.9        3.0        5.1        1.8      2

4.2 代码实现

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

iris = load_iris()  
Y = iris.target  # 数据集标签 ['setosa', 'versicolor', 'virginica'],山鸢尾、变色鸢尾、维吉尼亚鸢尾
X = iris.data  # 数据集特征 四维,花瓣的长度、宽度,花萼的长度、宽度

pca = PCA(n_components=2)  
pca = pca.fit(X) 
X_dr = pca.transform(X)


# 对三种鸢尾花分别绘图
colors = ['red', 'black', 'orange']
# iris.target_names
plt.figure() 
for i in [0, 1, 2]:
    plt.scatter(X_dr[Y == i, 0],
                X_dr[Y == i, 1],
                alpha=1,
                c=colors[i],
                label=iris.target_names[i])
plt.legend()
plt.title('PCA of IRIS dataset')
plt.show()

4.3 结果展示

b3b6028dc57c4d748016a3096509031e.png

 横坐标代表主成分1,纵坐标代表主成分2,从数据点的分布来看,混杂在一起的数据不多,数据容易进行分类。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/43466.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【stable diffusion】保姆级入门课程01-Stable diffusion(SD)文生图究竟是怎么一回事

目录 学前视频 0.本章素材 1.什么是文生图 2.界面介绍 2.1切换模型的地方 2.2切换VAE 2.3功能栏 2.4提示词 1.提示词的词性 2.提示词的语法 3.提示词的组成 4.提示词的权重调整 2.5参数调整栏 1.采样方法 2.采样迭代步数 3.面部修复 4.平铺图 5.高清修复 6.…

Linux系统入门之-系统编程【open、close函数】

继上一篇环境配置后就正式开始系统编程 RK3568开发板入门之-tftp&nfs的配置 open的使用,使用之前可以先在Ubuntu下查看帮助,了解open的使用和语法,如下: man 2 open对于open函数 *pathname:要打开的文件路径 f…

Linux安装JDK、Redis、MySQL、RabbitMQ、Minio、Nginx.......

文章目录 一、环境准备二、安装JDK三、安装MySQL四、安装Redis三、安装RabbitMQ四、安装Minio五、安装Nginx特殊情况处理Centos7挂载磁盘服务器时间同步MySQL数据库时间同步安装解压软件修改数据库SQL模式 一、环境准备 下载镜像源 中科大镜像源下载至/opt目录下修改yum源为中…

flask 页面新增文件,存在重复文件时,返回错误消息

(40条消息) flask 读取文件夹文件,展示在页面,可以通过勾选删除_U盘失踪了的博客-CSDN博客 项目结构 这是一个基本的Flask应用程序,主要有两个路由,一个是index,用于显示所有存在的文件以及用于删除已选的文件&#…

Java使用 java.util.regex.Pattern 正则表达式校验参数值是否规范

场景: java中我们可以利用 Pattern 注解对某个入参进行规则校验,但有些特殊参数在接口入口处不方便校验,需要在代码中校验 一、使用 Pattern 注解校验 Pattern(regexp "^[a-zA-Z0-9]$", message "xxx号限输入字母、…

4.1 Bootstrap UI 编辑器

文章目录 1. Bootstrap Magic2. BootSwatchr3. Bootstrap Live Editor4. Fancy Boot5. Style Bootstrap6. Lavish7. Bootstrap ThemeRoller8. LayoutIt!9. Pingendo10. Kickstrap11. Bootply12. X-editable13. Jetstrap14. DivShot15. PaintStrap 以下是 15 款最好的 Bootstrap…

百度文心一言文心千帆大模型 ERNIE-Bot-turbo调用示例(golang版本)

百度的文心一言推出来也有一段时间了,但是接口部分一直没有公开,需要进行申请 最近,有朋友提供了文心千帆大模型的api权限,拿到了必须的参数,现在就来测试一下 下面是使用golang封装的文心千帆 ERNIE-Bot-turbo模型的调…

C++面向对象程序设计-基础入门(超详细)

目录 一、c概述 二、初识c 1、第一个c程序 2、c面向对象的三大特性(重要) 三、作用域运算符:: 1、使用关键字namespace创建一个命名空间 2、命名空间只能定义在全局 3、 命名空间嵌套 4、随时将新的成员加入命名空间 5、命…

DXFReader.NET 2023 Crack

DXFReader.NET 是一个 .NET 组件,允许直接从 AutoCAD 图形文件格式 DXF(也称为图形交换格式)查看、操作和打印。 DXFReader.NET 之 DXF 是 Drawing eXchange Format 的首字母缩写。DXF 是图形文件内容的复制,支持将文件从一个 CA…

picgo Request failed with status code 404

今天写picgo的时候,出现了一个错误,如何解决: 这里是repo的配置出现了问题,不过我的是因为粗心,把master写成了mater,emmmm 这里的repo要跟仓库的地址相同就是这一块:把这一块填到repo就行 然…

算法之图论

定义 图通常以一个二元组 G<V, E>表示&#xff0c;V表示节点集&#xff0c;E表示边集。节点集中元素的个数&#xff0c;称为图的阶。 若图G中的每条边都是没有方向的&#xff0c;称为无向图&#xff1b;每条边是由两个节点组成的无序对&#xff0c;例如节点V1和节点V2之…

论文阅读:矩阵乘法GEMM的cache优化,子矩阵的切分方法Anatomy of High-Performance MatrixMultiplication

矩阵乘法优化的知名论文goto paper&#xff1a; 矩阵乘法的优化需要将矩阵切分成子矩阵&#xff0c;用子矩阵相乘的结果组合为原矩阵相乘的结果&#xff1a; 上图是拆分矩阵的方法&#xff0c;M表示矩阵&#xff0c;X方向和Y方向的两个维度都是未知的。P表示横条或竖条&#x…

前端监控一vue指令实现埋点

前端监控一vue指令实现埋点 https://v2.vuejs.org/v2/guide/custom-directive.html 自定义指令 需要在main.js中执行 import Vue from vue // 自定义埋点指令 Vue.directive(track, {//钩子函数&#xff0c;只调用一次&#xff0c;指令第一次绑定到元素时调用。在这里可以…

Linux 下 nc 发送接收 udp、tcp数据

nc&#xff0c;全名叫 netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c;因此&#xff0c;它也常被称为网络工具的 瑞士军刀 。 一、只服务端使用nc 备注&#xff1a;这种方式只能发…

新能源汽车交流充电桩CP信号详解

随着新能源汽车的推广&#xff0c;交流充电桩迎来了巨大的市场需求&#xff0c;人们对车辆充电的便利性、安全性有着越来越高的要求。CP信号主要用于交流充电桩&#xff0c;充电桩和汽车之间只能通过CP信号进行通讯&#xff0c;判断、控制充电电流和状态。 汽车充电桩CP信号…

124.【SpringBoot 源码刨析C】

SpringBoot源码刨析C (三)、SpringBoot核心功能2.Web4.数据响应与内容协商(1).响应JSON&#xff08;1.1&#xff09;jackson.jarResponseBody&#xff08;1.1.1&#xff09;、返回值解析器&#xff08;1.1.2&#xff09;、返回值解析器原理 (1.2).SpringMVC到底支持哪些返回值(…

【STL】模拟实现简易 list

目录 1. 读源码 2. 框架搭建 3. list 的迭代器 4. list 的拷贝构造与赋值重载 拷贝构造 赋值重载 5. list 的常见重要接口实现 operator--() insert 接口 erase 接口 push_back 接口 push_front 接口 pop_back 接口 pop_front 接口 size 接口 clear 接口 别…

Window环境RabbitMq搭建部署

Erlang下载安装及配置环境变量 下载erlang&#xff0c;原因在于RabbitMQ服务端代码是使用并发式语言Erlang编写的 Erlang下载 Erlang官网下载&#xff1a; http://www.erlang.org/downloads Erlang国内镜像下载&#xff08;推荐&#xff09;&#xff1a; http://erlang.org/d…

旧版Xcode文件较大导致下载总是失败但又不能断点续传重新开始的解决方法

问题&#xff1a; 旧版mac下载旧版Xcode时需要进入https://developer.apple.com/download/all/?qxcode下载&#xff0c;但是下载这些文件需要登录。登录后下载中途很容易失败&#xff0c;失败后又必须重新下载。 解决方案&#xff1a; 下载这里面的内容都需要登录&#xff0…

Appium+python自动化(十九)- Monkey(猴子)参数(超详解)

前边几篇介绍了Monkey以及Monkey的事件&#xff0c;今天就给小伙伴们介绍和分享一下Monkey的参数。 首先我们看一下这幅图来大致了解一下&#xff1a; 1、Monkey 命令 基本参数介绍 -p <允许的包名列表> 用此参数指定一个或多个包。指定包之后&#xff0c;mon…