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

article/2025/5/16 19:37:26

一、说明

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

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

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

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

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

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

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

3.1  什么是主成分分析?

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

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

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

3.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 个相应的特征值。

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

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

4.1 主成分分析示例:

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

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

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

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

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

4.2 主成分分析示例:

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

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

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

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

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

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


http://chatgpt.dhexx.cn/article/0wIq0BSE.shtml

相关文章

什么是主成分分析?经典案例解析变量降维

1、作用 主成分分析将多个有一定相关性的指标进行线性组合,以最少的维度解释原数据中尽可能多的信息为目标进行降维,降维后的各变量间彼此线性无关,最终确定的新变量是原始变量的线性组合,且越往后主成分在方差中的比重也小&…

比较两篇文章的相似性方法

对于这个题目,开始毫无头绪,后来经过查阅资料现在讲方法总结如下: 1、利用余弦定理 我们知道向量 a,b之间的夹角可用余弦定理求得: 如果夹角的余弦值越小,那么夹角也越大。如果2个向量相等,那么其值为1。利…

Python案例分析|文本相似度比较分析

本案例通过设计和实现有关文本相似度比较的类Vector和Sketch,帮助大家进一步掌握设计Python类来解决实际问题的能力。 01、文本相似度比较概述 通过计算并比较文档的摘要可实现文本的相似度比较。 文档摘要的最简单形式可以使用文档中的k-grams(k个连…

计算机如何判断两篇文章相似性

这个仍然是极客时间上,关于《索引技术核心20讲》的一篇笔记同时结合自己的理解加了点料,这个专栏虽然只有20讲,但是真不错,老师解答问题还是很积极,回答字数经常比问题字数多。有兴趣的朋友可以到我星球(在…

ai写文章检测原理(文章相似度检测)

小编来了!今天要和大家聊一聊关于ai写文章检测原理的评测对比。究竟哪种方法更加高效准确呢?让我们一起来看看吧! 概括:本文将从多个角度对ai写文章检测原理进行评测对比,包括算法准确性、速度、自动化程度、用户体验…

【跨语言剽窃检测】文本相似度分析之一

对比文件1: 2010年的跨语言剽窃检测新方法 作者RaFael Corezola Pereira instituion : UFRGS 摘要: 作者提出一个跨语言剽窃检测新方法,分为5个主要阶段: languange normalization、retrieval of candidate documents、classfier …

文本相似度综述

本文目录 文本相似度的定义文本相似度计算方法基于字符串的方法基于语料库的方法基于词袋VSMLSA、PLSALDA(需要进一步了解) 基于神经网络基于搜索引擎 基于世界知识基于本体基于网络知识 其他方法句法分析混合方法 文本相似度的定义 其中, common&#x…

JAVA-计算两篇文章的相似度

1.场景: 在很多公司的文件管理系统中,都有类似于对比多篇文章的相似度,例如在写公众号推文时,如果标记了原创,就会对比当前文章和库里已存在文章的相似程度,如果相似度过于高,则标记为原创的文章…

免费好用的文章相似度检测软件推荐

相信很多人在写作的时候都会遇到这样的问题,就是怕自己写出的文章被抄袭。为了保证自己的原创性,我们需要使用一些文章相似度检测软件来帮助我们检测文章是否被抄袭。那么,有哪些免费好用的文章相似度检测软件呢?下面就为大家介绍…

判断两篇文章的相似度

判断相似度 基于jieba 关键字提取的方法textrank关键字的提取代码:tf-idf关键字的提取代码:统计数据统计数据的代码:完整代码: 基于jieba 关键字提取的方法 textrank 1,将待抽取关键词的文本进行分词 2,以…

检测文章相似度的方法?文章原创度检测工具免费

免费检测文章相似度的软件,什么是检测文章相似度的软件,简单来说就是原创检测工具,相信不少的朋友都在利用这个功能来检测自己文章的原创度是多少?要做好一篇文章真的只需要检测文章的相似度吗?答案:肯定是…

[将小白进行到底] 如何比较两篇文章的相似度

其实这个题目已经有很多人写过了,数学之美里就有,最近阮一峰的博客里也写了,本文基本上遵循的就是他的思路,只是让其看起来再小白一点点。其实说白了就是用自己的话,再把同样一件事描述一下,顺便扩扩句&…

文本相似度的检测

项目原理 基于词频:统计文章中词频,构建词频特征向量,利用特征向量夹角的余弦值表示文本的相似度。两篇文章最大相似度为1,特征向量夹角为0。 基于词频的文本相似度检测步骤: 文本1和文本2分词—去停用词统计两篇文章的词频词频向量1和词频向量2相似度的计算分词:例:“…

网页抓取:PHP实现网页爬虫方式小结

抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程有点繁琐。LZ总结了几种常用的、易于实现的网页抓取方式,如果熟悉JQuery选择器,这几种框架会相当简单。 一、Ganon …

php中取页面的值_php如何抓取网页上的数据

php中抓取网页内容的实例详解 方法一:使用file_get_contents方法实现$url "http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml"; $html file_get_contents($url); //如果出现中文乱码使用下面代码 //$getcontent iconv("gb2312…

关于如何使用PHP抓取网页数据并进行处理的经验

在网络时代,数据是无处不在的。很多时候,我们需要从网页上获取特定的数据,以便进行进一步的处理和分析。而PHP作为一种强大的编程语言,提供了丰富的函数和库来帮助我们实现这个目标。本文将分享一些关于如何使用PHP抓取网页数据并…

php根据URL获得网页内容

php 中根据url来获得网页内容非常的方便&#xff0c;可以通过系统内置函数file_get_contents(),传入url,即可返回网页的内容&#xff0c;比如获得百度首页的内容代码为&#xff1a; <?php $html file_get_contents(http://www.baidu.com/);echo $html; 就可以显示出百度首…

php抓取网页内容,获取网页数据

php通过simple_html_dom实现抓取网页内容&#xff0c;获取核心网页数据&#xff0c;将网页数据写入本地 xxx.json 文件 其代码实现逻辑&#xff1a; 1. 引入simple_html_dom.php文件 require_once simple_html_dom-master/simple_html_dom.php; 2. 获取远程或者本地html文件…

PS Adobe软件使用 快捷键

两年前学的&#xff0c;为了考一个高新 怕自己忘了 仅为防止以后自己忘记而做的备忘笔记&#xff0c;请勿吐槽 图片类型 JPEG 有损压缩格式(能够将图像压缩在很小的储存空间&#xff0c;图像中重复或不重要的资料会被丢失&#xff0c;因此容易造成图像数据的损伤。尤其是…

html选区控制怎么用,ps载入选区的快捷键是什么?

ps载入选区的快捷键是&#xff1a;ALTSO。在ps中&#xff0c;使用“ALTSO”快捷键&#xff0c;会弹出“载入选区”对话框&#xff0c;然后选择相应的通道&#xff0c;点击“确定”&#xff0c;即可载入选区。 ps载入选区有三种方法&#xff1a;右键菜单、ps载入选区快捷键、以及…