主成分分析(PCA)教程(1)

主成分分析(PCA)是现代数据分析的主要方法之一,它被广泛使用但其内在机制仍不为太多人理解。这篇文章的主旨就是厘清并解释其原理。这篇教程不仅能帮助建立起对 PCA 原理的直觉理解,还希望能够澄清其内在的数学原理。因此,这是一篇同时用通俗语言与数学语言解释 PCA 的教程。希望不同层次的读者,都能通过本文获得对 PCA 的原理和应用更好的理解。

1. 概述

主成分分析(PCA)曾被称为应用线性代数领域中最有价值的结论。PCA 被广泛应用于多种形式的分析中,从神经科学到计算机视觉,因为它是一个足够简单的非参数方法,并能够从复杂的数据集中提取出最相关的信息。PCA 方法本身,可以再无需其他处理的情况下,将一个复杂数据集降至更低维度,以揭示其潜在的单纯的规律。

下面我们先从一个简单的例子开始,从直觉上解释下 PCA 的目的。

2. 一个简单的例子

假设我们现在是一名实验员,需要通过实验观测的数据,发现系统中的一些现象。实验的形式如下图示(Figure 1),一个无质量无摩擦的振动的弹簧。

我们的观测方式,是在弹簧周围放置了三个摄影机 a,b,c。学过物理的同学都知道,假设弹簧振动的轴是 x 的话,那么弹簧的振动公式一定可以由 x 以及时间 t 的组合表示出来。换句话说,系统潜在的规律可以由一个单变量 x 表达。那么,现在的问题在于,我们如何将摄影机 a,b,c 得到的数据,转换成 x 的表达式呢?

之所以面临这个问题,是因为 a,b,c 三个摄影机并不一定是按三位空间的 x,y,z 轴排列的,可能是任何的轴,三个摄影机也不一定是 90 度的夹角。并且在真实的实验数据中,我们还会遇到“噪音”(noise),使得得到的数据集并不完美。因此我们需要想办法解决这些问题,通过主成分分析的方法最终得到 x。

3. 基变换

主成分分析通过找到最优的基(basis)来重新表达一个有噪音的不完美的数据集。这些新的基可以过滤噪音,并揭示一些潜在的规律。在我们的例子中,我们希望通过 PCA 来揭示:x 轴的基x才是表达系统最重要的维度。

3.1 一个朴素的基

对于一个数据集来说,测量(measurement)类型的数目,通常微微数据集的维度。在我们的例子里,每个摄像机提供一个 2 维的图像,因此一共有 6 个维度。通常来讲,每个数据点(data sample)都是一个 m 维的向量,m 就是整个数据集的维度。每个数据点代表的向量都存在于一个 m 维的向量空间中,而每个向量都是由一组单位长度的正交规范(orthonormal)的基向量的线性变换而成。比如一个最简单朴素的基B就是单位矩阵I

单位矩阵

B的每一行就是一个基向量b_{i}

回到我们的例子,每个数据点可以表示成下面这样:

其中每个值其实都是B中基的系数。

3.2 基变换

PCA 中进行所谓基变换的目的,主要在于找到一组更好的基,能够由原本的基通过线性变换表示出来。

上面一句话中有一个需要注意的词:线性(linear)。这其实是 PCA 的一个重要的假设,它极大地简化了问题,具体地讲:(1)线性的假设限制了可能的基的数量;(2)迎合了数据集连续性(continuity)的假设。

注:复杂的系统通常都是非线性的,并且他们最显著的特征通常更是系统非线性的产物。但局部的线性近似通常已经是足够好的近似。

现在我们有了 PCA 只是利用对基向量的线性组合,来重新表达数据集的假设后,可以进一步添加一些数学说明。假设XYm*n 的矩阵,并可通过矩阵P变换得到。X作为原始数据集,Y作为重新表达后的数据集。

式 1:
PX = Y

同时再做以下的定义:

  • p_{i}P的行(row);
  • x_{i}X的列(column);
  • y_{i}Y的列(column)。

式(1)代表的就是基变换。可以理解为:矩阵P通过空间旋转和拉伸的方式,转换XY。或也可以理解为:P的行向量,是表达X的新的基向量。后一种表达方式可以展开为:

这种表达方式,可以进一步理解为:y_{i}是在新基P上的投影。

3.3 仍待解决的问题

前面通过假设“线性”,我们将问题归纳为了 找到合适的“基变换”。上面提到的{p_{1},...,p_{m}}其实就是我们要找的X的主成分。那么剩下的问题就是如何找到P?以及我们想让Y呈现什么样的特性?要回答这些问题,我们需要作出“线性”之外的更多的假设。

4. 引入方差

之前我们讲到了数据集可能存在噪声,事实上在一个线性的系统里,最大的两个问题中,一个是噪声,另一个是冗余(redundancy)。

4.1 噪声

低噪声是任何数据分析的前提。噪声没有一个通用的测量标准,通常可以用信噪比(SNR)来表示数据的噪声大小。

SNR = \frac{\sigma^{2}_{signal}}{\sigma^{2}_{noise}}

加入我们将某一个摄像机得到的数据可视化,多半会是如下图样,其中噪音的存在导致了分布的“椭圆”形,如果是毫无噪音的数据集,将会是一条直线。

4.2 冗余性

冗余性比较不大好处理,在我们弹簧的例子中,如果摄像机设置的不合理就会造成很大的冗余。下图是冗余性的分布示例:

在最右的分布里,可以看出两个特征是完全相关(correlated)的,因此存在极大的冗余性,而最左边的分布中,两个特征完全没有可辨别的相关性,则完全不存在冗余。

在实际数据集中,冗余通常表现在比如 A、B 两个特征都是某个长度,只是由不同单位表示;或两个特征都体现用户的购买力等等。这种情况下,都需要通过 feature engineering 减少特征的数量。

4.3 协方差矩阵

从上一节可以看到,SNR 完全是由方差计算 得到的。一个简单的得到数据集冗余成都的方式,就是计算整个数据集的“方差”,也就是协方差

假设有两个特征 A 和 B:

A = \{a_{1}, ... a_{n}\} , B = \{b_{1}, ... b_{n}\}

那么 A 和 B 的协方差就是 :

cov(A, B) = <a_{i}b_{i}>_{i}

注:$<·>{i}表示以i$为索引的平均值。_

  • 如果cov(A, B) = 0,那么 A 与 B 则完全不相关;
  • 如果cov(A, B) = \sigma_{A},那么 A 与 B 完全一致。

接下来可以假设一个数据集,以矩阵X的形式表现。那么下面的式子就很值得探讨了:

S_{X} = \frac{1}{n-1} XX^{T}

XX^{T}这个表达式非常有意思,仔细想一想就会发现,它的第ij个元素,就是X的第i个特征与第j个特征的点积(dot product)。而S_{X}这个m*m的矩阵,其对角线上的元素,是每个特征的方差,而非对角线的元素,是每两个特征的协方差。因此S_{X}也称为“协方差矩阵”。

承接之前的结论,要消除数据集的冗余,需要特征间的协方差尽可能小。因此,理想的协方差矩阵会是一个对角矩阵(diagonal matrix),也就是除了对角线上的元素其他都是 0 的矩阵。所以 PCA 要做的事情就是对角化(diagonalize)

4.4 对角化

对角化有很多种实现方式,其中 PCA 选择的可能是最简单的方式。还记得我们把基变换中的新基命名为P吗,PCA 假设P首先是正交规范的,其次,PCA 假设使方差最大的轴,就是最重要的轴。为什么说这两个假设使得对角化简单呢,我们可以具象一下 PCA 的工作原理。

PCA 首先会在m维的空间里选择一个方向(或者说轴)使得X的方差最大;然后根据正交规范的假设,PCA 只会在于第一个方向正交规范的情况下,选择第二个方向使得方差最大。然后一直重复直到m个方向都被选出来了。这样的好处是使得整个解法都是可用线性代数的。

5. 解法 1:协方差的特征向量

这个解法是基于“特征向量分解”的。假设数据集是X,是一个m*n的矩阵。其中m是特征数量,n是数据集大小。目标如下:

找到一个正交规范的矩阵P,使得S_{Y} = \frac{1}{n-1} YY^{T}是对角化的,其中Y = PX。而P的行就是X的主成分(principle component)。

推演过程如下:

注意我们定义了一个新的矩阵A = XX_{T},为了运算方便。可以看出A明显是个对称矩阵。下面就是奇迹发生的时刻了,也就是引入特征向量分解的时候。对于任何一个对称矩阵,都有:

A = EDE_{T}

其中D是一个对角矩阵,而EA的特征向量作为列向量组成的矩阵。那我们可以用这样的方式选择P:让P的每一行(注意不是列)都是XX_{T}的特征向量,带回到上面的式子里,就能推出:

所以呢,可以得出的 2 个结论是:

  • X的主成分,就是XX_{T}的特征向量,也就是P的行向量。
  • S_{Y}的第i个对角线元素,就是Xp_{i}上的方差。

本文先到这里就结束了,下一篇文章会详细地介绍下另一种更通用的解放:奇异值分解(SVD)。

大致译自此篇论文,也非常建议英语好的大家直接读原版。

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335