Python 中的主成分分析 (PCA)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

无监督学习

在砖墙上显示很多字母,其中存在于单词 Principal Component Analysis 中的字母是粗体并用线条连接。 这应该以这样一种方式来说明主成分分析,即只有重要的字母是从一堆不同的字母中提取出来的。 通过省略所有非粗体印刷字母,我们仍然可以形成单词主成分分析,即通过省略其他字母,我们在不丢失太多信息的情况下减小“字母沙拉”的大小。

什么是主成分分析

当我们执行主成分分析 (PCA) 时,我们希望找到数据集的主成分。令人惊讶不是吗?那么,数据集的主要组成部分是什么,我们为什么要找到它们,它们告诉我们什么?数据集的主成分是数据集中变化最大的“方向”(我假设您对术语方差有基本的了解。如果没有,请在此处查找。简单来说,第一个主成分是数据集是沿数据集变化最大的方向。

考虑以下数据集,我在其上绘制了由不同颜色箭头表示的不同“方向”。你怎么看,哪个箭头指向数据集方差最大的方向?

说明数据集中的三个不同颜色的箭头。 箭头应该说明数据集的主要组成部分。 橙色箭头指向方差最大的方向

好吧,通过肉眼我们看到橙色箭头可能指向方差最大的方向。

好的,但是为什么我们需要这个方向?

我们希望有这个方向(方差最大的方向),因为将来我们希望使用数据集的主成分来降低数据集的维度,或者通过将其减少到三个或更少的维度来使其“可绘制”,或者只是在不丢失太多信息的情况下减小数据集的大小。降低数据集的维度就像通过组合列来创建新列,使得新==组合的列数小于原始列数。

想象一个只有两列 A 和 B 的数据集,那么这个数据集就被称为是二维的。如果我们现在将这两列合并为一列,例如通过简单地添加第一列和第二列,数据集就会减少到一维。决定应该组合哪些列以及我们应该如何组合它们是 PCA 的目标。请注意,此插图并非 100% 正确,因为 PCA 的目标是转换数据,而不是简单地切掉或组合某些内容,而是此插图应该对它进行第一步。

也就是说,我们希望减小数据集的大小以使算法更容易使用,或者通过将数据变为 2 维或 3 维来简单地可视化数据。

但是等等,我说减小数据集的大小,这有点“丢失一些东西”,对吗?正确的!通过减少数据集的维数,我们会松散维度,即我们会松散信息。想象一个 3D 电影,我们移除了第三维,使得剩下的电影是二维的。我们仍然可以观看电影,但我们丢失了一些信息。我们必须找到答案的问题是:哪些维度包含数据集的最多信息,哪些维​​度只包含很少信息——因此可以在不丢失太多信息的情况下被截断。

找到这些维度(主成分)并使用这些主成分将数据集转换为较低维度的数据集是 PCA 的任务。如上所述,最后我们使用找到并选择的主成分来转换我们的数据集,即使用这些主成分来投影我们的数据集(投影是通过矩阵乘法完成的)。通过这样做,我们得到了一个维度减少(即减小的大小)的数据集,而不会丢失太多信息——希望如此——。

好的,要继续,为了理解,我们必须退后一小步。我们想要找到主成分,因为这些是具有最高方差的数据集的“方向”。你问自己:为什么方差最大?好吧,事实证明具有最高方差(主成分)的方向是信息量最大的方向。让我们用一个小图形说明清楚这一点:

说明三个不同颜色的三角形和球,其中三角形都分配有相同的重量(10 公斤),球的重量分别为 10 公斤、15 公斤和 20 公斤

由于分配给三角形的值(假设单位为 kg)都相同,因此方差为 0,而球的方差为 16.66  克G2

现在让我们进一步假设有人选择了一个球和一个三角形,告诉您分配的权重,并希望您对颜色进行预测。无论人选择什么三角形,重量总是 10 公斤,因此你没有机会根据公斤数正确预测三角形的颜色。但是,球的重量不同(它们的方差比三角形更大),无论人们告诉您什么重量,您都可以根据数字预测颜色。为了更清楚地说明这一点,假设在下一步中,此人希望您做同样的事情,但现在他或她没有告诉您确切的数字,而只是告诉您一个接近上述数字之一的数字。例如,11公斤。

根据这个数字,你可以预测球的颜色为蓝色,因为 11 比 15 更接近 10。因此,分配的权重越远,即方差越大,你就越容易预测颜色。请把上述作为主要思想,为什么我们可以使用方差作为信息量的衡量标准,而不是声称 100% 的数学正确性。

好的,现在我们已经明白为什么我们想要具有最高方差(主成分)的方向。但在我们的路上,主要问题仍未得到解答。*我们如何获得这些主成分?* 我们通过找到具有最高方差的方向来获得这些主成分。

聪明的家伙……我们已经知道了。这句话包含两个重要的词:方向和方差——找到*方差*最高的*方向*——。好吧,我们可以做和我上面做的完全一样的事情,只需在数据集中画一条任意线。要知道这条线的好坏,我们必须沿着这条线测量数据的方差。现在我们知道(总体的)方差的公式是:

v一个r(X)=∑一世=1n(X一世-X¯)2n

但是这里 x 是一维的,我们的数据集有两个维度 x 和 y,因此:我们应该使用它们中的哪一个作为 X在方差计算中?我们应该计算 x 或 y 的方差吗?答案是:没有一个是正确的。为什么?看下图:

说明方向 x 和 y

在这张图中,我画了两个箭头,一个指向 x 轴的方向,一个指向 y 轴的方向。如果我沿着这些箭头计算方差会发生什么?好吧,我计算沿特征 x 和沿特征 y 的方差。数据集如下所示:

import  pandas  as  pd 
import  matplotlib.pyplot  as  plt 
from  matplotlib  import  style 
style 使用( "fivethirtyeight" )
 numpy 导入 np


数据 =  np 阵列([[ 2.5 ,0.5 ,2.2 ,1.9 ,3.1 ,2.3 ,2 ,1 ,1.5 ,1.1 ],[ 2.4 ,0.7 ,2.9 ,2.2 ,3.0 ,2.7 ,1.6 ,1.1 ,1.6 ,0.9 ]])
打印(数据)
无花果 =  plt 图()
ax0  =add_subplot ( 111 )

轴0 分散(数据[ 0 ],数据[ 1 ])

PLT 显示()

输出:  

[[2.5 0.5 2.2 1.9 3.1 2.3 2. 1. 1.5 1.1] [2.4 0.7 2.9 2.2 3. 2.7 1.6 1.1 1.6 0.9]]

其中第一个列表表示 x 特征,第二个列表表示 y 特征。考虑下面的代码。如果我们沿着*x-箭头* 和*y-箭头* 计算数据集的方差会发生什么?我们计算沿特征 x 和 y 的方差!我们通过分别忽略另一个维度(特征)x 或 y 来隐式地做到这一点。也就是说,通过忽略 x 或 y,我们将数据投影到 x 或 y 轴上,从而降低维度,即切掉一维。

import  pandas  as  pd 
import  matplotlib.pyplot  as  plt 
from  matplotlib  import  style 
style 使用( "fivethirtyeight" )
 numpy 导入 np


数据 =  np 阵列([[ 2.5 ,0.5 ,2.2 ,1.9 ,3.1 ,2.3 ,2 ,1 ,1.5 ,1.1 ],[ 2.4 ,0.7 ,2.9 ,2.2 ,3.0 ,2.7 ,1.6 ,1.1 ,1.6 ,0.9 ]])
打印(数据)
无花果 =  plt 图()
ax0  =add_subplot ( 111 )

轴0 分散(数据[ 0 ],数据[ 1 ])
ax0 散射(数据[ 0 ],NP ones_like (数据[ 1 ])*分钟(数据[ 1 ])- 0.2 ,颜色= “红” )
AX0 散射(NP ones_like (数据[ 0 ])*min ( data [ 0 ]) - 0.2 , data [ 1 ], color = "blue" ) 
ax0 箭头( min ( data [ 0 ]) - 0.2 , min ( data [ 1 ]) - 0.2 , 0 , max ( data [ 1 ]) - 0.5 , width = 0.01 , color ="blue" , alpha = 0.4 , length_includes_head = "True" ) 
ax0 箭头( min ( data [ 0 ]) - 0.2 , min ( data [ 1 ]) - 0.2 , max ( data [ 0 ]) - 0.3 , 0 , width = 0.01 , color = "red" , alpha = 0.4 ,length_includes_head = "True" ) 
ax0 vlines ( data [ 0 ], min ( data [ 1 ]) - 0.2 , data [ 1 ], colors = "red" , linestyles = "--" , linewidth = 0.7 ) 
ax0 hlines ( data [ 1 ], min ( data [ 0 ]) - 0.2 ,数据[ 0 ],颜色= “蓝色” ,线型= “--” ,线宽= 0.7 )


PLT 显示()

输出:  

[[2.5 0.5 2.2 1.9 3.1 2.3 2. 1. 1.5 1.1] [2.4 0.7 2.9 2.2 3. 2.7 1.6 1.1 1.6 0.9]]

现在您可以看到选择 x 和 y 轴作为我们的主要组件的效果。我们将数据投影到 x 和 y 轴上。我

python_主成分分析(PCA)降维 主成分分析(principal component analysis)是一种常见的数据降维方法,其目的是在“信息”损失较小的前提下,将高维的数据转换到低维,从而减小计算量。   PCA的本质就是找一些投影方向,使得数据在这些投影方向上的方差最大,而且这些投影方向是相互正交的。这其实就是找新的正交基的过程,计算原始数据在这些正交基上投影的方差,方差越大,就说明在对应正交基上包含了更多的信息量。 阅读详情

相关推荐

Python的sklearn库进行PCA主成分分析

python的sklearn的库里面集成很多机器学习算法的库,其中也包括主成分分析的方法。 接下来讲讲怎么在python里面使用pca算法 首先要导入库: from sklearn.decomposition import PCA 下面是官网上的例子: >>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3

puredreammer的博客 15万+

使用Python实现主成分分析PCA

主成分分析算法通过寻找数据中的主成分(即方差最大的方向)来实现降维。它首先计算数据的协方差矩阵,然后通过特征值分解或奇异值分解来找到协方差矩阵的特征向量,这些特征向量构成了新的坐标系。PCA算法会选择最大的k个特征值对应的特征向量,这些特征向量构成了数据的主成分,然后将原始数据投影到这些主成分上,从而实现降维。

Echo_Wish 1379

主成分分析PCA)及其可视化——python

一、主成分分析的原理 主成分分析是利用降维的思想,在损失很少信息的前提下把多个指标转化为几个综合指标的多元统计方法。通常把转化生成的综合指标称之为主成分,其中每个主成分都是原始变量的线性组合,且各个主成分之间互不相关,这就使得主成分比原始变量具有某些更优越的性能。这样在研究复杂问题时就可以只考虑少数几个主成分而不至于损失太多信息,从而更容易抓住主要矛盾,揭示事物内部变量之间的规律性,同时使问题得到简化,提高分析效率。 主成分分析正是研究如何通过原来变量的少数几个线性组合...

PY洋洋 10万+

(6-4-2 )

主成分分析(Principal Component Analysis,PCA)是一种线性降维方法,通过将数据投影到新的低维子空间,保留最大方差的特征,以实现维度降低和噪声削减。例如下面是一个使用PyTorch实现主成分分析PCA)方法进行特征抽取的例子,本实例将使用PCA降低图像数据的维度,并使用降维后的数据训练一个简单的神经网络模型。接下来,定义了一个简单的神经网络模型,使用降维后的数据进行训练。下面是一个使用TensorFlow使用主成分分析PCA)方法进行特征抽取的例子,并保存处理后的模型。

码农三叔 1113

Python机器学习13——主成分分析

主成分分析,主成分回归,主成分得分可视化,核载矩阵

weixin_46277779的博客 2万+

python主成分分析_Python机器学习笔记:主成分分析PCA)算法

一:引入问题首先看一个表格,下表是某些学生的语文,数学,物理,化学成绩统计:首先,假设这些科目成绩不相关,也就是说某一科目考多少分与其他科目没有关系,那么如何判断三个学生的优秀程度呢?首先我们一眼就能看出来,数学,物理,化学这三门课的成绩构成了这组数据的主成分(很显然,数学作为第一主成分,因为数据成绩拉的最开)。那么为什么我们能一眼看出来呢?当然是我们的坐标轴选对了!!下面,我们继续看一个表格,下...

weixin_39570530的博客 2254

Python实现主成分分析PCA)降维

主成分分析是我十分喜欢的一个将为丰富,在之前学习并总结过其matlab的实现方法。

qq_36108664的博客 1万+

Python-sklearn之PCA主成分分析

文章目录写在前面一、PCA主成分分析1、主成分分析步骤2、主成分分析的主要作二、Python使用PCA主成分分析 写在前面 作为大数据开发人员,我们经常会收到一些数据分析工程师给我们的指标,我们基于这些指标进行数据提取。其中数据分析工程师最主要的一个特征提取方式就是PCA主成分分析,下面我将介绍Python的sklearn库中是如何实现PCA算法及其使用。 一、PCA主成分分析 什么是PCA主成分分析。百度百科给出如下定义: 1、主成分分析步骤 对于一个PCA主成分分析,一般分为以下几个步骤: 去除平均

m0_43405302的博客 7988

主成分分析 (PCA)Python实现

一句话概括主成分分析 主成分分析是采取一种数学降维的方法,找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,而且彼此之间互不相关。这种将把多个变量化为少数几个互相无关的综合变量的统计分析方法就叫做主成分分析或主分量分析。 主成分分析步骤 对原始数据进行标准化处理 计算标准化数据协方差矩阵 求协方差矩阵的特征值和特征向量 将特征值按照从大到小的顺序排序,选择其中...

weixin_42565558的博客 4088

python进行主成分分析PCA

一、简介  这篇文章简单介绍了PCA的原理、思想和一些定义,本文将介绍如何用python进行PCA。 二、实现 2.1 标准化数据  在对数据进行PCA前,需要先将数据进行中心标准化,即使特征的平均值为000,方差为111。 from sklearn.preprocessing import StandardScaler StandardScaler(*, copy=True, with_mean=True, with_std=True) 使用说明: 实例化:scaler = StandardScale

TSzero的博客 1万+

python实现主成分分析PCA

python实现主成分分析PCApython应用实例:如何用python实现主成分分析背景iris数据集简介算法的主要步骤代码实现查看各特征值的贡献率 python应用实例:如何用python实现主成分分析 主成分分析(Principal Component Analysis,PCA)是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。 背景 在许多机器学习、深度学习的应用中,往往需要处理大量样本或大的矩阵,多变量大样本无疑会为研究和应用提供丰富

ruoff的博客 4万+

主成分分析(PCA)及其python实现

主成分分析法(Principal Component Analysis,PCA)是一种用于把高维数据降成低维,使分析变得更加简便的分析方法。本文给出了PCA的推导过程以及python实现,多为学习后的个人理解,如有错误还请指出。...............

Castria的博客 4万+

PCA主成分分析以及Python实现(阅读笔记)

简述 PCA日常使用,但还没有研究过其理论,这让我很好奇。 理论部分 《机器学习》中是这样开始的: 对于正交属性空间的样本点,如何用一个超平面来对所有的样本点进行表达。 超平面和半空间是优化领域的两个重要概念 简单来说,矩阵方程W∗X+b=0W*X+b = 0W∗X+b=0表示的是超平面,W∗X+b≥0W*X+b \geq 0W∗X+b≥0表示的就是半空间。 显然超平面是直线在高维空间的扩展。(...

gc.collect() 1万+

主成分分析法(PCA)的理解(附python代码案例)

主成分分析(Principal Component Analysis, PCA)是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。换一种说法:PCA去除噪声和不重要的特征,将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息,而且可以提升数据处理的速度。为什么会出现PCA呢?因为每个变量都在不同程度上反映了所研究问题的某些信息,并且指标之间彼此有一定的相关性,因而所得的统计数据。

(:3|❀)我要睡觉了,请帮我关一下灯,谢谢 3万+

python主成分分析PCA

主成分PCA分析的基本步骤: · 对数据进行归一化处理(代码中并非这么做的,而是直接减去均值) · 计算归一化后的数据集的协方差矩阵 · 计算协方差矩阵的特征值和特征向量 · 保留最重要的k个特征(通常k要小于n),也可以自己制定,也可以选择一个阈值,然后通过前k个特征值之 和减去后面n-k个特征值之和大于这个阈值,则选择这个k · 找出k个特征值对应的特征向量 · 将m...

fanc的博客 3702

【数学建模】评价模型——主成分分析 PCA SPSS实现、Python实现

文章目录PCA介绍SPSS实现python实现简单的主成分分析主成分分析用于综合评价Notice PCA介绍 主成分分析(Principal Component Analysis,PCA):利用降维的方法,把多指标转化为几个综合指标的多元统计方法; 实际问题中,为了全面分析问题,往往提出很多与此有关的变量(因素),每个变量在不同程度上包含了结果的部分信息; 主成分:由原始指标进行线性组合形成的几个新指标,用这几个新指标尽可能地去解释原来指标包含的大部分信息; 比如:一个对国民经济的研究,经过主成分分

CodeLuweir 的博客 1万+

[python数据处理系列] 深入理解与实践:用Python进行主成分分析PCA

本文将详细解析主成分分析PCA)的步骤、作用和参数,并回答一些常见的问题。我们将通过Python代码实现PCA,包括数据导入、降维、查看方差贡献、方差贡献率和累计方差贡献率的可视化等步骤。最后,我们将选择主成分并进行命名,输出降维后的数据,并对主成分分析结果进行可视化。

2301_81199775的博客 6468
上一篇: Python 中的提升算法
下一篇: 【译文】递归函数
程序员孔乙己
博客等级 码龄5年 1189粉丝 81原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值