【数据挖掘】PCA 主成分分析算法过程及原理讲解

简介: 主成分分析(PCA)的原理和算法过程。

PCA 主成分分析算法过程及原理讲解

1 概念

主成分分析(Principal componet analysis,PCA) 是一种无监督学习方法,利用正交变换把线性相关变量表示的观测数据转换为几个由线性无关变量表示的数据,线性无关的变量成为主成分。主成分的个数通常小于原始变量的个数,属于降维方法。根据分解协方差矩阵的策略,分为两种PCA方法,第一种是基于特征值分解协方差矩阵实现PCA算法,第二种是基于奇异值分解法(SVD)分解协方差矩阵实现PCA算法。

2 算法过程

2.1 基于特征值分解协方差矩阵实现PCA算法

输入:数据集 X = {x1,x2, . . . , xn} 需要降到k维。

(1)去平均值(即去中心化),即每一位特征减去各自的平均值。

(2)计算协方差矩阵1/n XXT,注:这里除或不除样本数量n或n-1,其实对求出的特征向量没有影响。

(3)用特征值分解方法求协方差矩阵 1/n XXT的特征值与特征向量。

(4)对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵P。

(5)将数据转换到k个特征向量构建的新空间中,即Y=PX。

2.2 基于奇异值分解法(SVD)分解协方差矩阵实现PCA算法

输入:数据集 X = {x1,x2, . . . , xn} ,需要降到k维。

(1)去平均值(去中心化),即每一位特征减去各自的平均值。

(2) 计算协方差矩阵。

(3)通过奇异值分解法(SVD)计算协方差矩阵的特征值与特征向量。

(4)对特征值从大到小排序,选择其中最大的k个。然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。

(5)将数据转换到k个特征向量构建的新空间中。

3 问答

3.1 SVD分解矩阵原理

奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵A总是存在一个奇异值分解:

U=UΣVT

假设A是一个m×n的矩阵,那么得到的U是一个m×m的方阵,U里面的正交向量被称为左奇异向量。Σ是一个m×n的矩阵,Σ除了对角线其它元素都为0,对角线上的元素称为奇异值。 VT 是V的转置矩阵,是一个n×的矩阵,它里面的正交向量被称为右奇异值向量。而且一般来讲,我们会将Σ上的值按从大到小的顺序排列。

SVD分解矩阵A的步骤:

(1) 求AAT的特征值和特征向量,用单位化的特征向量构成 U。

(2) 求ATA的特征值和特征向量,用单位化的特征向量构成 V。

(3) 将AAT或者ATA的特征值求平方根,然后构成 Σ。

3.2 特征值分解矩阵原理

(1) 特征值与特征向量

如果一个向量v是矩阵A的特征向量,将一定可以表示成下面的形式:

Av=λv

其中,λ是特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。

(2) 特征值分解矩阵

对于矩阵A,有一组特征向量v,将这组向量进行正交单位化,就能得到一组正交单位向量。特征值分解,就是将矩阵A分解为如下式:

A=QΣQ−1

其中,Q是矩阵A的特征向量组成的矩阵,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tY579VzA-1658189878184)(https://www.zhihu.com/equation?tex=%5CSigma)\]则是一个对角阵,对角线上的元素就是特征值。

3.3 PCA为什么要中心化

把坐标原点放在数据的中心,找方差最大的坐标方向,如果不放在中心,坐标原点就是数据的旁边,不能很好的映射到坐标上。

具体讲解看视频解析:B站讲解PCA

图1 去中心化前,坐标原点在数据的旁边。

图2 去中心化后,坐标原点在数据的中心。

3.4 协方差矩阵的特征向量的数学意义是什么?

PCA的目标是找到一个坐标轴,能够保证所有的点都能映射到坐标轴上,且映射点之间尽量不重合,分散开,最大的保留每个点的信息。数据去中心化后,求协方差矩阵,协方差矩阵中的特征向量就是坐标轴的方向,即坐标轴旋转的角度,特征值就是坐标轴方向的方差。

3.5 在PCA的方差具体指什么?

指的是数据映射到新坐标轴上的数据分布方差,方差越大,映射即降维后的数据,保存的原始数据信息最大。

3.6 PCA 优缺点

优点:

  • 仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
  • 各主成分之间正交,可消除原始数据成分间的相互影响的因素。
  • 计算方法简单,主要运算是特征值分解,易于实现。

缺点:

  • 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
  • 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
  • 离群点对降维效果影响很大
目录
相关文章
|
8天前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
36 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
17天前
|
算法 Java 数据库
理解CAS算法原理
CAS(Compare and Swap,比较并交换)是一种无锁算法,用于实现多线程环境下的原子操作。它通过比较内存中的值与预期值是否相同来决定是否进行更新。JDK 5引入了基于CAS的乐观锁机制,替代了传统的synchronized独占锁,提升了并发性能。然而,CAS存在ABA问题、循环时间长开销大和只能保证单个共享变量原子性等缺点。为解决这些问题,可以使用版本号机制、合并多个变量或引入pause指令优化CPU执行效率。CAS广泛应用于JDK的原子类中,如AtomicInteger.incrementAndGet(),利用底层Unsafe库实现高效的无锁自增操作。
理解CAS算法原理
|
9天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
18天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
27 6
|
2月前
|
算法 容器
令牌桶算法原理及实现,图文详解
本文介绍令牌桶算法,一种常用的限流策略,通过恒定速率放入令牌,控制高并发场景下的流量,确保系统稳定运行。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
令牌桶算法原理及实现,图文详解
|
1月前
|
存储 人工智能 缓存
【AI系统】布局转换原理与算法
数据布局转换技术通过优化内存中数据的排布,提升程序执行效率,特别是对于缓存性能的影响显著。本文介绍了数据在内存中的排布方式,包括内存对齐、大小端存储等概念,并详细探讨了张量数据在内存中的排布,如行优先与列优先排布,以及在深度学习中常见的NCHW与NHWC两种数据布局方式。这些布局方式的选择直接影响到程序的性能,尤其是在GPU和CPU上的表现。此外,还讨论了连续与非连续张量的概念及其对性能的影响。
58 3
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法与应用
探索人工智能中的强化学习:原理、算法与应用
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
72 1
|
2月前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
2月前
|
缓存 算法 网络协议
OSPF的路由计算算法:原理与应用
OSPF的路由计算算法:原理与应用
74 4