前言-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