假设你的房间堆满了各种各样的物品,书籍、衣服、玩具等等,它们杂乱无章地散落各处。现在,你想要清理房间,但又不想扔掉任何东西,只是希望让房间看起来更整洁,更容易管理。
你开始思考,能否将物品按照某种逻辑分类,比如按颜色、大小或者用途来归类。这样,虽然物品还是那些物品,但通过归类,房间变得更加有序,你也可以更快地找到你需要的东西。
一、初步理解什么是主成分分析?
主成分分析(Principal Component Analysis,PCA)是一种常用的无监督学习技术,用于降低数据维度并发现数据中潜在的模式。PCA的目标是通过线性变换将高维数据投影到一个低维的子空间,从而找到数据中最大方差的方向,即主成分。这样可以使得投影后的数据尽可能保留原始数据的信息,同时减少冗余和噪声。
例如,在整理房间的例子中,我们可以将主成分分析(PCA)比作一种高效整理和优化存储空间的方法。你观察到某些物品经常一起出现或被一起使用,比如运动服和运动鞋,或者是电子书阅读器和充电器。这些物品之间的关系相当于数据中的相关性。接下来,你开始将这些物品分类,比如将所有的书籍放在一起,所有的衣物放在衣柜里,电子设备放在书桌上。这些类别可以视为数据中的“主成分”。
分类之后,你不再需要记住每件物品的确切位置,而是只需要知道它属于哪个类别以及类别所在的大致区域。这减少了你记忆的负担,也减少了查找物品的时间。同样,PCA通过减少数据的维度,让我们能以更少的特征描述数据,同时尽量保持原有的信息量。
二、PCA算法的核心思想与优化目标
(1)PCA算法的核心思想
PCA算法的核心思想可以理解为寻找一个新的坐标系,这个坐标系由数据的主要变化方向组成。在新的坐标系中,第一个主成分(第一个特征向量)代表了原始数据中方差最大的方向。第二个主成分则是与第一个主成分正交(即垂直)的方向中,方差第二大的方向,以此类推。这样,PCA通过一系列正交方向上的投影,找到了数据的主要变化趋势,并且这些方向之间没有相关性,实现了数据的“离相关”。
PCA的目标是通过上述步骤找到能够最大化数据方差的新坐标系,从而在保持尽可能多的原始信息的同时,减少数据的维度。这种方法在诸如图像压缩、生物信息学、金融分析等多个领域都有广泛应用。
(2)PCA算法的优化目标
PCA可以基于两种不同的思路进行优化来实现降维
① 最大方差
在最大方差的思路下,PCA的目标是找到投影方向,使得数据在投影后具有最大的方差。换句话说,通过最大化数据在新坐标系上的方差,我们保留了数据中最多的信息,同时减少了数据中的冗余性。
通过最大化方差,我们能够找到数据中主要的变化方向,即主成分,这些主成分代表了数据中最重要的特征和模式。因此,通过最大化方差,PCA能够保留数据中最具信息量的部分,实现高效的降维
② 最小损失
另一种优化思路是通过最小化数据的重构误差或损失来实现降维。在这种情况下,我们尝试通过将数据从高维空间投影到低维空间并尽量减少重构误差,来保留数据的重要信息。
通过最小化损失,PCA试图找到一个低维表示,使得在原始空间中的数据点在低维空间中能够被准确地重构。这种方法可以帮助解决数据噪音和冗余的问题,使得数据在较低维度下能够更好地表示。
三、PCA算法的步骤
(1)去中心化
在执行PCA之前,首先需要对数据进行预处理。这一步骤主要是为了消除数据中的偏移,确保数据的均值为零。这样做是为了使PCA的效果不受数据尺度的影响,确保PCA能够正确地识别数据的主成分。
对于每一列(即每个特征)的数据,计算其平均值,然后从每一列的所有元素中减去该平均值。这样处理后,每一列数据的均值都变成了0。
去中心化不会影响样本的分布性质,但会简化后续PCA降维算法的计算过程。
(2)计算协方差矩阵
协方差矩阵反映了数据中各个特征之间的线性关系强度和方向。对于中心化后的数据,计算其协方差矩阵是PCA中的一个重要步骤。
使用中心化后的数据计算协方差矩阵。协方差矩阵是一个对称矩阵,其中的每一个元素表示两个特征之间的协方差。
(3)特征值分解
特征值分解是对协方差矩阵进行的一种数学操作,目的是找到协方差矩阵的特征值和对应的特征向量。对协方差矩阵进行特征值分解,得到一组特征值和对应的特征向量。特征值表示了数据沿该特征向量方向的方差大小,而特征向量则指示了数据的变化方向。
(4)排序特征值
根据特征值的大小进行排序,特征值越大,表示该特征向量方向上的数据方差越大,即数据在该方向上的变化越多。将(3)中得到的特征值从大到小排序,同时调整相应的特征向量顺序,以保持一致性。
(5)选取主成分
根据实际需求和数据特性,选择前k个最大的特征值及其对应的特征向量作为主成分。这些主成分将构成新的坐标系,用于数据的降维。选择前k个特征值最大的特征向量,这k个特征向量将构成降维后数据的新坐标系。
(6)数据投影
将原始数据投影到由选定的主成分构成的新坐标系中,完成数据的降维。使用选定的k个特征向量作为列向量,构建一个转换矩阵。然后,将中心化后的原始数据乘以这个转换矩阵,得到降维后的数据。