首页 > 其他分享 >主成分分析PCA找寻数据“灵魂”-线性代数(4)

主成分分析PCA找寻数据“灵魂”-线性代数(4)

时间:2024-08-31 11:56:47浏览次数:11  
标签:找寻 矩阵 算法 线性代数 成分 PCA 数据 缺失

前言-PREFACE

面向业务目标从浩瀚的数据中挖掘出相关性最高的数据“灵魂”,简化数据处理,去除噪声,提高计算效率,是人工智能领域的主要课题。除了上篇文章提到的矩阵分解
矩阵分解找寻数据“灵魂”-线性代数(3))之外,主成分分析(PCA,principal components analysis,也可以翻译为主成因分析)也是一种比较常用的机器学习算法,通过基础的线性代数知识就可以推导。

主成分分析(PCA)核心思想是将高维数据转换为低维数据,同时尽可能保留原始数据的主要信息,主要过程是将原始数据中的所有变量通过线性变换后,按照方差大小进行排序,与奇异矩阵的奇异值类似,方差越大,保留数据中信息越多,按此顺序选取少数几个互不相关(正交)的关键变量,这些关键变量称为主成分,也就是该部分数据的“灵魂”。本文将详细探讨主成分分析(PCA)的原理、算法及注意事项,并结合具体数值、图例进行呈现以便辅助和加深读者理解。

PCA找寻数据的“灵魂”-DELVING INTO THE CORE OF DATA

 1. 主成分分析(PCA)概述 

主成分分析(PCA, Principal Component Analysis)是一种常用的统计方法,主要用于降维和数据分析。其核心思想是通过线性变换将数据转换到新的坐标系中,使得转换后的数据在少数几个新的坐标轴上具有最大的方差,这些新的坐标轴即为主成分。

为更加直观理解上述概念,以下以三维、二维空间的数据点分布为例进行说明:

1)在三维空间,举例来说,我们一个方向视角看到的数据点,可能近似圆形紧密分布,如下图所示:

    换个视角,数据点的分布方式可能变成了长条状,如下图所示:

所以,数据在x、z轴的分布情况更能体现数据的分布特征,通过主成分分析(PCA),我们一般可以选取以x、z轴为平面坐标的坐标轴,以红色箭头方向的直线来表示数据的分布主要情况,这样就将三维空间分布的数据点降维到了二维平面。

2)在二维平面,如下图所示,假如数据点的分布在y轴坐标上基本没什么差异,而在x轴上的距离相对比较大(一般用方差表示距离大小),则可以只选取x轴坐标的数值表示数据分布的主要情况。

2. 主成分分析(PCA)算法 

主成分分析(PCA)算法是一种数据分析方法,它通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量。虽然PCA算法的核心思想是一致的,但在实现和应用过程中,可以根据具体的数据和需求进行不同的处理。以下是一些常用的PCA算法相关的方法和考虑因素:

1)经典PCA算法
核心步骤:包括数据标准化、计算协方差矩阵、计算协方差矩阵的特征值和特征向量、选择主成分(考虑累计贡献率等基础,选择特征值较大的特征向量)、计算主成分得分等。

优点:适用于大多数需要进行数据降维或特征提取的场景,如图像处理、信号处理、生物信息学等。

2)基于特征值分解的PCA
实现方式:直接对协方差矩阵进行特征值分解,得到特征值和特征向量。由于协方差矩阵是方阵,因此可以使用特征值分解(EVD)来求解。
优点:计算相对简单,适用于数据量不是很大的情况。

3)基于奇异值分解(SVD)的PCA
实现方式:通过对数据矩阵进行奇异值分解(SVD),得到左奇异矩阵、奇异值矩阵和右奇异矩阵。其中,左奇异矩阵的列向量即为PCA的主成分。

优点:SVD适用于任何形状的矩阵,且计算效率较高,特别是当数据量很大时,SVD通常比特征值分解更快。在scikit-learn等机器学习库中,PCA算法的实现往往基于SVD。

4)核PCA(Kernel PCA)
特点:核PCA是PCA的非线性扩展,它通过将数据映射到高维特征空间后再进行PCA分析,从而能够捕捉到数据中的非线性关系。在核PCA中,核函数的选择对结果影响很大。常见的核函数有线性核、多项式核、高斯核等,选择合适的核函数需要根据数据的特点和任务进行实验。

优点:适用于原始数据线性可分性较差,但经过非线性变换后线性可分性增强的场景。

5)增量PCA(Incremental PCA)
特点:增量PCA是一种在线PCA算法,它能够在数据逐个或分批到达时更新PCA模型,而不需要重新计算整个数据集。

优点:适用于数据流或实时数据处理场景,如在线推荐系统、视频处理等。

6) 随机PCA(Randomized PCA)
特点:随机PCA通过随机投影技术来近似计算PCA的主成分,从而在保证一定精度的前提下提高计算效率。

应用场景:适用于数据量极大,且对计算时间和资源有严格要求的场景。

综上所述,PCA算法在应用过程中可以根据具体的数据和需求选择不同的实现方法和扩展形式。这些方法和形式各有优缺点,适用于不同的场景和需求。

3. 主成分分析(PCA)计算示例 

为加深PCA算法理解,以经典PCA算法为例,将PCA计算过程和代码示例进行分别说明。

3.1计算过程实例

假设我们有以下数据集,每个样本数据有两个特征(二维数据):

按照经典PCA的算法计算过程如下:

1)数据中心化(即标准化)

计算每个特征的均值:

中心化数据:

2)计算协方差矩阵

3)计算协方差矩阵的特征值和特征向量

通过特征分解计算特征值和特征向量的详细过程上篇文章已经进行了详细讲解(如有遗忘,请参考矩阵分解找寻数据“灵魂”-线性代数(3)),以下直接列出计算结果为:

特征值为:

对应的特征向量为:

4)选取特征值较大的特征向量,作为主成分:

5)将数据投影到选定的主成分方向上:

通过这个具体的数值计算过程,我们展示了经典PCA算法的各个步骤,从结果上看,保留的最终一维向量Z丢失了二维空间上的方向,但是保留了数据递增的主要趋势和变化幅度,保留了数据的主要信息特征。

3.2实例代码

以上过程用python代码实现如下所示:

计算结果为:

需要注意的是以上代码计算特征向量时,进行了归一化,计算结果与手动计算略有区别,读者如果感兴趣可以将上述代码中代表主成分的向量保持归一化前的数值,则可以看出与手动计算结果一致。

4. 主成分分析(PCA)注意事项 

在主成分分析(PCA)算法中,数据质量问题尤其是对于缺失值的处理一致是工作的重点,因为PCA本身是基于完整数据集进行线性变换的,为了应对包含缺失值的数据集,我们需要在应用PCA之前对缺失值进行适当的处理。对于处理缺失值没有一种“最适合”的通用方法,因为最适合的方法取决于数据的具体特性和分析目标。不过,有几种常用的方法可以考虑:

1)删除缺失样本:
优点是简单直接。缺点也很明显,如果缺失值较多,可能会浪费大量数据资源,特别是在数据本身就很稀缺的情况下。

2)填充缺失值:
均值/中位数/众数填充:用该特征所有非缺失值的均值、中位数或众数来填充缺失值。这种方法简单快捷,但可能会引入一定的偏差或噪声。

3)模型预测填充:

使用其他特征作为输入,训练一个模型(如回归模型)来预测缺失值。这种方法相对复杂,但可能更准确地估计缺失值,前提是其他特征与缺失值之间存在相关性。

4)多重插补:

创建多个数据集的副本,每个副本中的缺失值用不同的方法进行填充(如均值、中位数、随机抽样等),然后对每个数据集分别进行PCA分析,最后综合结果。这种方法更加复杂,但能够更全面地考虑缺失值的不确定性。

5)基于SVD的PCA实现:
值得注意的是,虽然SVD(奇异值分解)是PCA的一种实现方式,并且SVD在处理非方阵时具有优势,但它本身并不直接解决缺失值问题。然而,在某些PCA的SVD实现中,可能会通过预处理步骤(如填充缺失值)来确保输入矩阵的完整性。

6)使用专门的数据处理库:
在Python中,可以使用如scikit-learn等库中的PCA实现,这些实现通常提供了对缺失值的灵活处理选项,或者可以通过预处理步骤(如使用Imputer类)来填充缺失值。

需要注意的是,处理缺失值后的数据都可能仍然会受到缺失值带来的偏差或噪声的影响。因此,在解释PCA结果时,需要谨慎考虑这些潜在的影响。在实际应用中,建议尝试多种方法,并通过交叉验证等手段来评估不同方法的效果,以选择最适合当前数据集和分析需求的方法。

5. 主成分分析(PCA)局限性 

PCA的核心思想是寻找数据方差最大的投影方向,并假设数据之间存在线性关系。这种线性假设限制了PCA的应用范围,包括:

  • 非线性数据:当数据呈现出非线性关系时,PCA就无法有效地提取出数据的本质特征。例如,一个圆形分布的数据,如果用PCA降维,可能会得到一条直线,而不是一个圆。

  • 噪声敏感性:PCA对噪声比较敏感。如果数据中存在较多的噪声,PCA可能会将噪声成分作为主要成分提取出来。

  • 数据分布的影响:PCA对数据的分布有一定的假设,通常假设数据服从高斯分布。当数据分布偏离高斯分布时,PCA的效果可能会受到影响。

  • 维度选择问题:如何确定保留多少个主成分是一个复杂的问题。过多的主成分可能会引入噪声,过少的主成分可能会丢失重要信息。

所以,处理PCA外,也可以考虑其他数据降维的方式:

  • LDA 是一种有监督的降维方法,能够更好地保留类间差异。

  • t-SNE 是一种非线性降维方法,擅长保留数据的局部结构,适合可视化高维数据

与PCA之间的比较如下表所示:

特点

PCA

LDA

目标

最大化方差

最大化类间方差,最小化类内方差

无监督/有监督

无监督

有监督

应用场景

数据降维、特征提取

分类、降维

优缺点

简单高效,但对非线性数据效果不佳

需要类别标签,但能更好地保留类间差异

特点

PCA

t-SNE

目标

线性降维,保留全局结构

非线性降维,保留局部结构

计算复杂度

相对较低

相对较高

可视化效果

一般

非常适合可视化高维数据

应用场景

数据降维、特征提取

可视化高维数据,聚类

结语-EPILOGUE

通过上述内容,我们将常用的数据降维和方法主成分分析(PCA, Principal Component Analysis)进行了详细介绍,部分内容需要依赖之前已学习内容,希望大家逐步积累并筑牢包括线性代数在内的数据基础,才能在以后工作中游刃有余。

标签:找寻,矩阵,算法,线性代数,成分,PCA,数据,缺失
From: https://blog.csdn.net/2401_86636311/article/details/141750392

相关文章

  • python使用 pcap 库捕获网络数据包,附示例
    以下为您提供使用Python的pcap库捕获网络数据包的示例及相关信息:在Python中,可以使用pcap库来实现网络数据包的捕获。例如:importpcap#创建pcap实例pc=pcap.pcap()#设置过滤条件,例如捕获TCP端口为80的数据包pc.setfilter('tcpport80')#开始抓......
  • 线性代数 第三讲 线性相关无关 线性表示
    线性代数第三讲线性相关无关线性表示文章目录线性代数第三讲线性相关无关线性表示1.向量运算1.线性相关与线性无关1.1线性相关与线性无关基本概念2.线性表示(线性组合)3.线性相关无关与线性表示的定理大总结3.1向量β可由向量组线性表出的同义翻译3.2向量组线性......
  • 【故障识别与诊断】基于EEMD-MPE-KPCA-BILSTM(集合经验模态分解-多尺度排列嫡-核主元
      ......
  • Python实现核主成分分析(KPCA)降维算法
    目录Python实现核主成分分析(KPCA)降维算法的博客引言KPCA算法原理1.核函数与核技巧2.中心化核矩阵3.特征分解Python中的KPCA实现1.创建KPCA类2.在瑞士卷数据集上应用KPCA3.结果分析总结Python实现核主成分分析(KPCA)降维算法的博客引言在高维数据分析中,主成......
  • 【全面指导】线性代数如何高效备考?选择哪本习题集?
    作为一个过来人,在备考过程中,我发现线性代数这是个不容小觑的科目,在考研数学一二三中都占比20%,其复习策略和方法对最终成绩起到了决定性作用。那么,如何选择适合的习题集?怎样制定有效的复习计划?这些问题都是我们必须认真思考和了解的。今天,我将分享我的备考经验,从复习书籍选择到......
  • 线性代数
    看了很多题目,个人觉得现阶段以考察矩阵乘法(快速幂)、高斯消元法求线性方程组的解、矩阵优化dp、一些trick(线段树维护矩阵,kmp套矩阵等)以及矩阵自身性质的深层次运用为主。P1962斐波那契数列应该是典题。从这道题我们可以发现矩阵优化dp的最有效办法是手模,所以此类题目一般......
  • PCA原理与水果成熟状态数据分析实例:Python中PCA-LDA 与卷积神经网络CNN
    全文链接:https://tecdat.cn/?p=37450 主成分分析(PCA)作为数据科学中用于可视化和降维的重要工具,在处理具有大量特征的数据集时非常有用。就像我们难以找到时间阅读一本1000页的书,而更倾向于2到3页的总结以抓住整体概貌一样,当数据集中特征过多时,PCA可以帮助我们减少维度,提......
  • cloud compare PCA插件开发详细步骤(二)附代码
    在上一节https://blog.csdn.net/csy1021/article/details/141200135我们已经完成了具体开发前的准备工作,包括各级CMakelists.txt的设置,相关内容的修改,并已成功编译如需整个插件项目,编译后的dll,或其他帮助,欢迎留言、私信或加群【群号:392784757】这一节针对我们的qPCA插......
  • 机械学习—零基础学习日志(如何理解线性代数3)
    零基础为了学人工智能,正在快乐学习,每天都长脑子行列式最早行列式,是莱布尼茨用于判断,一个方程有没有解。例如,三元一次方程,如果有解,对应行列式就有值,但是如果无解,那么对应的行列式则为零。线性映射一个方程组可以写成上述的形式,而A就是线性映射。这里可以把向量x,理解为输入......
  • 运用Npcap库实现SYN半开放扫描
    Npcap是一款高性能的网络捕获和数据包分析库,作为Nmap项目的一部分,Npcap可用于捕获、发送和分析网络数据包。本章将介绍如何使用Npcap库来实现半开放扫描功能。TCPSYN半开放扫描是一种常见且广泛使用的端口扫描技术,用于探测目标主机端口的开放状态。由于这种方法并不完成完......