Python 中的主成分分析 (PCA)

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

无监督学习

在砖墙上显示很多字母,其中存在于单词 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的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 阅读详情

相关推荐

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

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

qq_36108664的博客 1万+

主成分分析(PCA)原理分析&Python实现

本文的侧重点是从理论上解释PCA每一个步骤理由,便于更加深刻地理解PCA,而不是单纯地机械式的码代码。

Dfreedom.的博客 1万+

使用Python实现主成分分析(PCA)

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

Echo_Wish 1383

Proteus 8.15仿真STM32F103C8,ADC采样总为0?别急着换芯片,先检查这3个配置

本文详细解析了在Proteus 8.15中仿真STM32F103C8时ADC采样值为0的常见原因及解决方法。从供电网络配置、时钟设置到ADC参数调整,提供了系统性的排查指南,帮助开发者快速定位问题,避免不必要的硬件更换。重点关注供电网络、时钟分频和ADC配置等关键环节。

weixin_30425949的博客 366

【两方演化博弈代码复现】:双方演化博弈的原理、概率博弈仿真、相位图、单个参数灵敏度演化

演化博弈论是研究个体在特定环境中如何通过策略选择与其他个体进行互动的学科。这一理论在生物学、经济学和社会科学等多个领域都有广泛应用。本文将深入探讨双方演化博弈的原理及其过程,并解读一段 MATLAB 代码,展示如何模拟这一过程。

当回首往事的时候,不会因虚度年华而悔恨,也不会因碌碌无为而羞愧。 6198

【HarmonyOS 5】鸿蒙APP使用【团结引擎Unity】开发的案例教程

以下是基于团结引擎开发鸿蒙Unity应用的详细案例教程,整合环境配置、工程适配、跨语言通信等核心环节。

2201_75709314的博客 2482

Android-S无线模块前瞻

WiFi - mainlane非强制 S 采用反射的方法直接加载wifiservice,直接hook在systemserver上,无编译依赖。gms可以动态替换wifi服务。 R 采用直接启动service的方式,wifiservice仍然map在systemserver上。 WiFi - 11ad接口支持 11ad被wifi联盟商业化为WIGIG,提供短距的60GHZ载波,理论速度为当前5G 11ac的6倍。市面上基本没有手机支持,需要独立的芯片支撑此功能。 传输距离为3m以内,外界d.

头铁的伦的博客 1042

第十九届全国大学生智能车竞赛越野信标 硬件篇

全国大学生智能汽车竞赛,越野信标组

2301_77568650的博客 4115

yolov8涨点系列之替换幽灵卷积GhostConv

yolov8涨点系列之替换幽灵卷积GhostConv

zhang1379的博客 3564

【软件系统架构】系列十一:面向对象技术—sysML

摘要: SysML(系统建模语言)是UML的扩展,专为复杂系统工程设计,支持硬件、软件、人员等跨领域建模。其核心包括9种图:4种结构图(如块定义图BDD、内部块图IBD)、4种行为图(如活动图AD、序列图SD)和需求图(REQ),覆盖需求、结构、行为及参数约束。相比UML(面向软件),SysML精简图表(9 vs 13),强化需求追踪与性能分析(如参数图PD),并支持MBSE(基于模型的系统工程)。需求关系(如满足、验证、派生)在需求图中明确关联设计实现,形成闭环管理。SysML是UML的子集与系统工程扩展

moton2017的博客 1905

DICOM图像知识:深入详解DICOM的层级关系

解析DICOM的四个主要层级:Patient(患者)、Study(检查)、Series(序列)和SOP(服务-对象对),探讨它们之间的关系、各自的唯一标识符以及在实际应用中的用途

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 3304

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值