【数据挖掘】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 优缺点

优点:

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

缺点:

  • 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
  • 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
  • 离群点对降维效果影响很大
目录
相关文章
|
13天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
41 4
|
3天前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
11 0
|
9天前
|
算法
PID算法原理分析及优化
【10月更文挑战第6天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
19 0
|
1月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
44 4
|
1月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
29 1
|
16天前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
21 0
|
1月前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
37 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计

热门文章

最新文章