【机器学习】主成分分析实现案例 (PCA)

一、说明

        这篇文章的目的是提供主成分分析(PCA)的完整和简化的解释。我们将逐步介绍它是如何工作的,这样每个人都可以理解并使用它,即使是那些没有强大数学背景的人。

        PCA是网络上广泛覆盖的机器学习方法,并且有一些关于它的很棒的文章,但是许多人在这个主题上花费了太多时间,而我们大多数人只是想知道它是如何以简化的方式工作的。

        主成分分析可以分为五个步骤。我将介绍每个步骤,提供PCA正在做什么的逻辑解释,并简化数学概念,如标准化,协方差,特征向量和特征值,而不关注如何计算它们。

二、如何进行主成分分析?

  • 标准化连续初始变量的范围
  • 计算协方差矩阵以识别相关性
  • 计算协方差矩阵的特征向量和特征值以识别主成分
  • 创建特征向量以决定要保留哪些主成分
  • 沿主分量轴重铸数据

        首先,一些基本(和简短)的背景对于上下文是必要的。

三、主成分分析 (PCA) 概述 

2.1  什么是主成分分析?

        主成分分析(PCA)是一种降维方法,通常用于降低大型数据集的维数,方法是将大型变量集转换为仍包含大型数据集中大部分信息的较小变量集。

        减少数据集的变量数量自然是以牺牲准确性为代价的,但降维的诀窍是用一点准确性来换取简单性。因为较小的数据集更容易探索和可视化,并且使机器学习算法的数据点分析更加容易和快捷,而无需处理无关的变量。

        因此,总而言之,PCA的想法很简单 - 减少数据集的变量数量,同时保留尽可能多的信息。

2.2 PCA的分步说明

        第 1 步:标准化
        此步骤的目的是标准化连续初始变量的范围,以便每个变量对分析的贡献相同。

        更具体地说,在PCA之前执行标准化至关重要的原因是后者对初始变量的方差非常敏感。也就是说,如果初始变量的范围之间存在较大差异,则范围较大的变量将主导范围较小的变量(例如,范围在 0 到 100 之间的变量将主导范围在 0 到 1 之间的变量),这将导致结果偏差。因此,将数据转换为可比较的比例可以防止此问题。

        在数学上,这可以通过减去平均值并除以每个变量的每个值的标准差来完成。

        标准化完成后,所有变量都将转换为相同的比例。

        第 2 步:协方差矩阵计算
        此步骤的目的是了解输入数据集的变量如何与平均值相互变化,或者换句话说,查看它们之间是否存在任何关系。因为有时,变量高度相关,以至于它们包含冗余信息。因此,为了识别这些相关性,我们计算协方差矩阵。

        协方差矩阵是一个 p × p 对称矩阵(其中 p 是维数),其条目是与初始变量的所有可能对关联的协方差。例如,对于具有 3 个变量 x、y 和 z 的三维数据集,协方差矩阵是 3×3 的数据矩阵,来自:

三维数据的协方差矩阵。

        

        由于变量与自身的协方差是其方差(Cov(a,a)=Var(a)),因此在主对角线(从左上到右下)中,我们实际上具有每个初始变量的方差。由于协方差是可交换的(Cov(a,b)=Cov(b,a)),协方差矩阵的条目相对于主对角线是对称的,这意味着上三角形和下三角形部分相等。

        我们作为矩阵条目的协方差告诉我们变量之间的相关性是什么?

        实际上,协方差的符号很重要:

  • 如果为正,则:两个变量一起增加或减少(相关)
  • 如果为负,则:一个增加,另一个减少(负相关)

        现在我们知道协方差矩阵只不过是一个总结所有可能的变量对之间相关性的表,让我们进入下一步。

        步骤 3:计算协方差矩阵的特征向量和特征值以识别主成分
        特征向量和特征值是我们需要从协方差矩阵计算以确定数据主成分的线性代数概念。在解释这些概念之前,让我们首先了解主成分的含义。

        主成分是构造为初始变量的线性组合或混合的新变量。这些组合的完成方式是,新变量(即主成分)不相关,并且初始变量中的大部分信息被压缩或压缩到第一个分量中。所以,这个想法是 10 维数据给你 10 个主分量,但 PCA 试图在第一个分量中放置最大可能的信息,然后在第二个分量中放置最大剩余信息,依此类推,直到得到下面碎石图所示的东西。

每个 PC 的方差百分比(信息)

        以这种方式组织主组件中的信息将允许您在不丢失太多信息的情况下降低维数,这是通过丢弃信息量低的组件并将剩余组件视为新变量来实现的。

        这里要认识到的重要一点是,主成分的可解释性较差,并且没有任何实际意义,因为它们被构造为初始变量的线性组合。

        从几何上讲,主成分表示解释最大方差量的数据方向,即捕获数据大部分信息的线。这里的方差和信息之间的关系是,一条线携带的方差越大,沿它的数据点的离散度就越大,沿一条线的离差越大,它拥有的信息就越多。简单地说,只需将主分量视为新轴,这些轴提供了查看和评估数据的最佳角度,以便更好地看到观测值之间的差异。

三、PCA 如何构造主成分

        由于数据中的变量与变量一样多的主成分,因此主成分的构造方式是,第一个主成分占数据集中最大可能的方差。例如,假设我们数据集的散点图如下所示,我们可以猜出第一个主成分吗?是的,它大约是与紫色标记匹配的线,因为它穿过原点,并且它是点(红点)投影最分散的线。或者从数学上讲,它是最大化方差(从投影点(红点)到原点的平方距离的平均值)的线。

        第二个主成分的计算方式相同,条件是它与第一个主成分不相关(即垂直于)第一个主成分,并且它占下一个最高方差。

        这一直持续到计算出总共 p 个主成分,等于原始变量数。

        现在我们理解了主成分的含义,让我们回到特征向量和特征值。您首先需要了解的是它们总是成对出现,因此每个特征向量都有一个特征值。它们的数量等于数据的维度数。例如,对于三维数据集,有 3 个变量,因此有 3 个特征向量和 3 个相应的特征值。

        事不宜迟,特征向量和特征值是上述所有魔力的幕后推手,因为协方差矩阵的特征向量实际上是方差最大(信息最多)的轴的方向,我们称之为主分量。特征值只是附加到特征向量的系数,它给出了每个主成分中携带的方差量。

        通过按特征值从高到低的顺序对特征向量进行排序,您可以按显著性顺序获得主分量。

3.1 主成分分析示例:

        假设我们的数据集是二维的,有 2 个变量 x,y,协方差矩阵的特征向量和特征值如下:

        如果我们按降序对特征值进行排名,我们得到 λ1>λ2,这意味着对应于第一个主成分 (PC1) 的特征向量是 v1,对应于第二个主成分 (PC2) 的特征向量是v2。

        在获得主分量后,为了计算每个分量所占的方差(信息)的百分比,我们将每个分量的特征值除以特征值的总和。如果我们在上面的例子上应用它,我们发现 PC1 和 PC2 分别承载了 96% 和 4% 的数据方差。

        第 4 步:特征向量
        正如我们在上一步中看到的,计算特征向量并按其特征值降序对它们进行排序,使我们能够按显著性顺序找到主分量。在此步骤中,我们要做的是选择是保留所有这些分量还是丢弃那些重要性较低的分量(低特征值),并与剩余的分量形成一个我们称之为特征向量的向量矩阵。

        因此,特征向量只是一个矩阵,它将我们决定保留的组件的特征向量作为列。这使其成为降维的第一步,因为如果我们选择仅将 p 特征向量(分量)排除在 n 之外,则最终数据集将只有 p 维。

3.2 主成分分析示例:

        继续上一步中的示例,我们可以同时使用特征向量 v1 和 v2 形成一个特征向量:

        或者丢弃特征向量 v 2,这是重要性较小的特征向量,并仅形成 v1 的特征向量:

        丢弃特征向量 v2 会将维数降低 1,从而导致最终数据集中的信息丢失。但鉴于 v 2 只携带了 4% 的信息,因此损失并不重要,我们仍将拥有 v96 携带的 1% 的信息。

        因此,正如我们在示例中所看到的,您可以选择是保留所有组件还是丢弃重要性较低的组件,具体取决于您要查找的内容。因为如果您只想根据不相关的新变量(主成分)来描述数据,而不寻求降低维度,则不需要省略不太重要的组件。

        步骤 5:沿主分量轴重新转换数据
        在前面的步骤中,除了标准化之外,您不会对数据进行任何更改,只需选择主成分并形成特征向量,但输入数据集始终保持原始轴(即初始变量)。

        在此步骤(即最后一步)中,目的是使用使用协方差矩阵的特征向量形成的特征向量,将数据从原始轴重新定向到主分量表示的轴(因此称为主分量分析)。这可以通过将原始数据集的转置乘以特征向量的转置来完成。

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

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

相关文章

3.Hive SQL数据定义语言(DDL)

1. 数据定义语言概述 1.1 常见的开发方式 (1) Hive CLI、Beeline CLI Hive自带的命令行客户端 优点:不需要额外安装 缺点:编写SQL环境恶劣,无有效提示,无语法高亮,误操作率高 (2&…

LangChain大型语言模型(LLM)应用开发(一):Models, Prompts and Output Parsers

LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

ipad手写笔一定要买苹果的吗?苹果平板平替电容笔排行

苹果原装Pencil,无疑是一个性能很出色的电容笔,但是,由于其的价格也很高,如果丢失了,或者弄坏,那就太可惜了。而且购买如此昂贵的苹果原装电容笔,仅仅只用于书写笔记方面,显得有点浪…

【开发问题】sqlserver怎么开启cdc

怎么开启 执行sql1、创建cdc​2.如上执行完毕之后&#xff0c;会在<database_name>数据库下的“系统表”中创建如下六个系统表&#xff1a;3.验证SQLServer库级别CDC是否启用4.启用SQLServer表级别CDC功能&#xff08;针对某一张表&#xff09;5、验证SQLServer表级别是否…

本地部署开源大模型的完整教程:LangChain + Streamlit+ Llama

在过去的几个月里&#xff0c;大型语言模型(llm)获得了极大的关注&#xff0c;这些模型创造了令人兴奋的前景&#xff0c;特别是对于从事聊天机器人、个人助理和内容创作的开发人员。 大型语言模型(llm)是指能够生成与人类语言非常相似的文本并以自然方式理解提示的机器学习模型…

【STM32智能车】小车状态

【STM32智能车】小车状态 搭建智能车 65MM轮径小车所选材料安装说明直行测试智能车可能存在的状态 智能车功能丰富&#xff0c;我们从最基础的开始&#xff0c;先来搭建一个智能车吧~。 搭建智能车 我们之前用了一个测试板子去学习调试电机&#xff0c;是时候拼装一个简单的车来…

Leetcode-每日一题【92.反转链表Ⅱ】

题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4输出&#xff1a;…

详细解释lvs的工作原理

vsl用于集群中的直接路由它的原理如下 如果在公司并发太高了怎么解决 1.加配置cpu 内存 带宽 ssd高效硬盘 2.加服务器 为用户提供服务 横向扩展 集群是什么 由的多台主机构成,相当于一台大型计算机,只提供一个访问入口(域名与ip地址) 集群用在那个场景 高并发场景 vrrp是…

服务无法注册进Eureka

相同的配置&#xff0c;在demo里能注册&#xff0c;在自己项目的无法注册&#xff0c;眼睛都快盯出老花眼了&#xff0c;还是不行&#xff0c;果然出现的问题只有在发现问题以后才觉得简单&#xff08;虽然确实是小问题&#xff0c;但是排查了一整天&#xff0c;值得记录一下&a…

论文阅读:Segment Anything之阅读笔记

目录 引言整体结构介绍论文问答代码仓库中&#xff0c;模型哪部分转换为了ONNX格式&#xff1f;以及如何转的&#xff1f;Mask decoder部分 Transformer decoder block?如何整合image_embedding&#xff0c;image_pe, sparse_prompt_embedding和dense_prompt_embedding的&…

ue4:Dota总结—HUD篇

1.绘制ui&#xff1a; DrawMoney&#xff1a; DrawPower&#xff1a; 点击ui响应事件&#xff1a; 点击响应显示对应的模型&#xff1a; 点击ui拖动模型跟随鼠标移动&#xff1a; 显示ui&#xff1a;PlayerContrler&#xff1a;

内网IP怎么用域名让外网访问,域名动态解析和静态区别?

域名解析是将域名与公网IP进行对应关系&#xff0c;实现访问域名即访问到对应IP应用的方式。域名解析分静态域名解析和动态域名解析的区别&#xff0c;它们的区别在哪&#xff1f;内网IP服务器怎么用域名让外网连接访问&#xff1f;这些都是需要我们有所了解掌握的。 这里不但…

如何基于GeoToolKit/INT实现矢量流线的聚集动画效果示例

继续在上一篇文章的基础上&#xff0c;利用相同的数据处理方法统一了不同年代地层的数据格式&#xff08;目前js解析支持的格式有ZMap、TS、XYZ和XYZA等&#xff09;&#xff0c;本文主要基于GeoToolKit/INT组件&#xff0c;针对地质研究经常在二维等值线基础上模拟计算地层中物…

Quiz 14_2-2: Using Web Services | Python for Everybody 配套练习_解题记录

文章目录 Python for Everybody课程简介Quiz 14_2-2: Using Web Services单选题&#xff08;1-15&#xff09;操作题Autograder 1: Extract Data from JSONAutograder 2: Calling a JSON API Python for Everybody 课程简介 Python for Everybody 零基础程序设计&#xff08;P…

NSS [NSSCTF 2022 Spring Recruit]ezgame

NSS [NSSCTF 2022 Spring Recruit]ezgame 前端小游戏&#xff0c;乐。

Spring源码整体脉络介绍及源码编译

需完成的任务 类------------------------------------------BeanFactory----------------------------------------->Bean【BeanFactory调用getBean()生产出来的】 BeanFactory Spring顶层核心接口&#xff0c;使用了简单工厂模式【根据名字&#xff0c;生产出不同的Bean…

C#:AES的加密解密,用于明文加密

大白话理解&#xff1a;将明眼能看到的字符给用另一种读不懂的语言给翻译&#xff0c;就像是摩斯密码……就像base64加密&#xff0c;都有异曲同工之妙。 建一个新的类&#xff08;这里放了aes加密解密的方法&#xff09; public static class AesPassword{/// <summary&g…

大屏项目也不难

项目环境搭建 使用create-vue初始化项目 npm init vuelatest准备utils模块 业务背景&#xff1a;大屏项目属于后台项目的一个子项目&#xff0c;用户的token是共享的 后台项目 - token - cookie 大屏项目要以同样的方式把token获取到&#xff0c;然后拼接到axios的请求头中…

rain-nowcasting-using-deep-learning github:使用深度学习进行临近降水预报

来源 github地址 是什么 本资料库旨在阐述 "在应用于降雨预报的深度学习模型中合并雷达雨量图像和风速预测 "&#xff08; “Merging radar rain images and wind predictions in a deep learning model applied to rain nowcasting”&#xff09;一文中提出的深度…

群晖NAS搭建WebDV服务手机ES文件浏览器远程访问

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址 转载自cpolar极点云文章&#xff1a;群晖NAS搭建WebDAV服务手机ES文件浏览器远程访问 有时候我们想通过移动设备访问群晖NAS 中的文件,以满足特殊需求,我们在群辉中开启WebDav服…