PCA

背景

真实数据训练中可能会出现过多相似特征,PCA可通过降维来优化数据、提升性能:

    汽车样本特征“千米/小时”、“英里/小时”意义相似

    词频统计时“study”、“learn”词性相似

    特征远大于数据的情况(过拟合)

主成分分析(PCA)意为提取主要信息,摒弃次要信息,从而得到压缩后的数据。它的输入数据是不带标签的,应用于无监督学习中的一种降维方式。PCA 可应用于数据压缩:减少磁盘/内存占用、加快算法运行速度或数据可视化:降至2 、3 维。虽然PCA可减少特征数,但它并不生为防拟合(过拟合仍应使用正则化)。PCA是算法优化的一个步骤,并非机器学习的必须步骤,因为次要信息可能包含样本差异的重要信息(非高斯分布的数据使用PCA效果可能打折扣),降维丢弃该特征对模型效果会有一定的影响。所以PCA并非模型建立时拿来就用,而是当内存占用太大,运算时间太长时考虑引用

PCA转换为数学问题是将原n维数据下降为k维。在k维数据中满足:

•每对特征之间不具备相关性:最大化实现降维

•特征数据最大化分布在这个新系中:若k维数据都在一个点上,则无法判断新老数据对应关系

即寻找一组新坐标系u_1、u_2,使数据最大化分布,则转换为如下问题:

最大方差=最大化数据分布

中学经典试题“小明语文100、数学60,小红语文85、数学75,虽平均分一样,但小明更偏科”,方差反映数据波动程度:D(X)=\frac{∑(x_i- \overline{x})^2}{m}m为样本数量、\overline{x}为该特征数据平均值

无偏估计的方差公式不同(分母为m-1),上式为有偏估计。但对于机器学习求极值下参数大小的问题,这里的分母就是个常量,因此无需介意不同文章使用无偏方差来计算(无偏是考虑到抽样数据的平均值与全部数据的平均值存在误差,然后通过数学推理要避免这个误差分母需为m-1)

向量内积A·B几何意义为A在B上的投影,若两者垂直则A·B=0。当两者长度均为1时,A、B可构成一组正交基。当两者不垂直时,则是将数据A投影至B上

假设B是一维基,要使m个数据最大化分布在B上,则左图效果好于右图。假定平均值为0:白圆点部分为原点,则等价于要寻找过这个原点使数据有最大分布的直线(对应的单位向量),那么最大化方差是一个简单的表示形式,因为大方差的数据波动足够剧烈,才更有机会分布在直线上更大的范围内

左基优于右基

协方差为零=特征之间互不相关

协方差反应两组数据的相关性,数据X=[11 12 13 ...]、Y=[16 16 28 ...]的分布如下

COV(X,Y)=\frac{∑(x_i- \overline{x})(y_i-\overline{y})}{m} ,如图可知:

•两组数据正相关,更多数据落在一、三象限:COV(X,Y)>0

•两组数据负相关,更多数据落在二、四象限:COV(X,Y)<0

•两组数据不相关,数据平均落在4个象限:COV(X,Y)=0

则每对特征不具备相关性,则数据投影至不同基后,每两组数据的协方差为0

数据构建

有了上述两个数学思想后,将样本数据构建成需要解决的数学问题,设样本仅有两个特征,对应数据:x、y

①计算平均值并中心化数据(使平均值为0,便于后续计算)x=x_i-\overline{x} 、y=y_i-\overline{y}

②计算每个特征的方差D(x)=\frac{1}{m}∑(x_i-\overline{x})^2=\frac{1}{m}∑x_i^2 ,数据y同理

③计算每两组特征的协方差COV(X,Y)=\frac{1}{m}∑(x_i-\overline{x} )(y_i-\overline{y})=\frac{1}{m}∑x_iy_i

为描述所有特征方差、特征之间的协方差,则需要构建矩阵。令原数据C= \begin{bmatrix} x_1 & ... & x_m \\ y_1 & ... & y_m\end{bmatrix} \quad

M=\frac{1}{m}CC^T  = \begin{bmatrix} \frac{1}{m}∑x_i^2 &  \frac{1}{m}∑x_iy_i  \\ \frac{1}{m}∑x_iy_i & \frac{1}{m}∑y_i^2\end{bmatrix} \quad(用到知识:矩阵转置、矩阵乘法)

特征值分解

我们的目标是引入正交矩阵P,使数据投影后的对角线上每个数值最大化、非对角线每个数值为0:

\begin{bmatrix} λ_1 &  &  \\  & ... &  \\ & & λ_{m}\end{bmatrix} \quad=D=\frac{1}{m}PC(PC)^{T}=\frac{1}{m}PCC^TP^T=P(\frac{1}{m}CC^T)P^T=PMP^T

P中每一行为一个向量基(称为正交矩阵),任意两行向量基相乘为0、自己与自己相乘为1(单位长度):

PP^T=P^{T}P=\begin{bmatrix} 1 &  &  \\  & ... &  \\ & & 1\end{bmatrix} \quad=E   (单位矩阵以E简写)

Q=P^T,则D=PMP^T=Q^TMQ\Rightarrow QD=QQ^TMQ=MQ(单位矩阵在矩阵乘法中类似第一代数学中的系数1,可直接消掉)

乍一看还是不知道该怎么求Q,仍需找到数学巧力来化解这个尴尬。令Q=(a_1,...,a_m),列向量a_i对应原正交矩阵的一个行向量基

QD=(λ_1a_1,...,λ_ma_m)MQ=\begin{bmatrix} M_{1行}×a_{1} & ... & M_{1行}×a_{m}  \\ ... & ... & ... \\  M_{m行} ×a_{1} & ... &  M_{m行}×a_{m}\end{bmatrix} \quad

则对任意一列数据有λ_ia_i=Ma_i。在数学上右式被理解为“如果一组矩阵作用于向量,只改变它的长度而不改变它的方向,则称λ_i为特征值、a_i为特征向量”,比如向量(1,1)只改变长度为(2,2),但改变方向为(2,3)

如此一来,求得一个特征值,便解锁一个特征向量,所有特征向量便组成最终的正交矩阵P,将特征向量按特征值降序,这样方差最大的排前面,选前前k个特征向量压缩行数据进行降维:C^{’}_{m×k}=C_{m×n}P^T_{n×k}

m×n代表m行n列的矩阵,每一列为不同特征、每一行为一组数据,上式可使n维数据降至k维

SVD分解

让机器像人类一样学习抽取重要特征,SVD将复杂矩阵分解为简单子矩阵,这些子矩阵拥有原数据重要特性,相比特征值分解仅适用于方针而言,SVD适用于任意矩阵,其几何意义:向量x经过对角矩阵∑缩放、坐标系U旋转,等价于其投影至坐标系V并通过矩阵A旋转与缩放

是对角线a_{ii}以外均为0的矩阵,σ_i为奇异值,左奇异向量U、右奇异向量V^T是正交矩阵

利用SVD的主要特征进行降维,自然只会取分解后的部分数据。SVD定义原矩阵信息量为每个元素平方和再开平方根H=\sqrt{(∑∑x_{ij}^2)}

H开平方省去根号后在矩阵中等效于tr(A^TA):tr表示矩阵的迹,代指矩阵对角线元素之和。可以简单验证:

A_{2×3}^TA_{3×2}= \begin{bmatrix} a & b & c  \\  d & e &  f\end{bmatrix} \quad\begin{bmatrix} a & d \\ b & e  \\  c & f\end{bmatrix} \quad=\begin{bmatrix} a^2+b^2+c^2 &...  \\   ... & d^2+e^2+f^2 \end{bmatrix} \quad

对于分解矩阵则有:

|H|^2=tr((U\Sigma V^T)^T(U\Sigma V^T))=tr(V\Sigma^TU^TU\Sigma V^T)=tr(V\Sigma^T\Sigma V^T)=tr(\Sigma V^TV\Sigma^T)=tr(\Sigma\Sigma^T)=σ_1^2+...σ_m^2

说明原数据信息量仅与奇异值有关,实际情况中部分奇异值就能达到原矩阵90%的信息量。为了方便选择奇异值,我们对SVD分解后的\Sigma按奇异值从大到小对矩阵重新排序:σ_1≤σ_2≤...≤σ_m,原矩阵如下:

A= \begin{bmatrix} u_{11} & u_{12} & ... & u_{1m} \\u_{21} & u_{22} & ... & u_{2m} \\... & ... & ... & ... \\u_{m1} & u_{m2} & ... & u_{mm}\end{bmatrix} \quad  \begin{bmatrix} σ_1 &  & & & \\ & ... & & & \\   &  &  σ_m & &\end{bmatrix} \quad \begin{bmatrix} v_{11} & v_{21} & ... & v_{n1} \\ v_{12} & v_{22} & ... & v_{n2} \\ ... & ... & ... & ...  \\v_{1n} & v_{2n} & ... & v_{nn}\end{bmatrix} \quad

A_{11}=u_{11}σ_1v_{11}+u_{12}σ_2v_{12}+...+u_{1m}σ_mv_{1j}   \Sigma对角线后的元素为0,因此前2个矩阵相乘的矩阵中,最后一个奇异值后的值为0,再乘以矩阵V^T则有效值计算到不了最后一行数据(除非m=n),所以此处以j表示

原始SVD分解时,奇异值不一定按从大到小排序,此时如果将σ_2排序到σ_1,为保持A矩阵数值仍不变,则需要u_{11}与u_{12}、v_{11}与v_{12}互换。更一般地,A_{ij}=u_{i1}σ_1v_{i1}+u_{i2}σ_2v_{i2}+...+u_{1m}σ_mv_{ij},若σ_p与σ_q互换,则矩阵U每行的列p、q值互换,V同理。这样便实现奇异值从大到小排序而不影响最终输出值

接着,设置保留信息量\frac{\sum^kσ_i^2 }{∑^mσ_i^2} ≥0.9,使程序逐一计算满足条件的前k个奇异值,此时左奇异取前k列、右奇异行向量取前k行,则A_{m×n}≈U_{m×k}\Sigma _{k×k}V_{k×n}^T

SVD与PCA的特征值分解有等效关系

A=\frac{C^T}{\sqrt{m}} ,则A^TA=\frac{1}{m}CC^T=M

特征值分解针对方针,SVD矩阵自乘也是方阵,则奇异分解A并代入M=A^TA=V\Sigma^T\Sigma V^T=V\Lambda V^T\Lambda=V^TMV,其中\Lambda是对角矩阵,\Lambda_{ii}=\sigma^2_i。PCA中D=PMP^T的D也是对角矩阵,D_{ii}=\lambda _i

假定\sigma^2_i=\lambda _i,则直接奇异分解A得到的右奇异向量转置V等效于特征值分解中的P。这样便可以通过SVD右奇异向量②等效地进行降维

①左奇异向量实现数据压缩:C^{’}_{k×n}=U^T_{k×m}C_{m×n}

②右奇异向量实现特征降维:C^{’}_{m×k}=C_{m×n}V_{n×k}^T

正如其他文章所说,选择SVD分解将无需计算协方差矩阵\frac{1}{m}CC^T,而是直接奇异分解\frac{C^T}{\sqrt{m}} 并使用右奇异向量降维

特征值求解

先看简单情况,假设已计算方差矩阵M =\begin{bmatrix} 1 &  2   \\ 3 & 4\end{bmatrix} \quad、待解基a_i=\begin{bmatrix}  m \\ n\end{bmatrix} \quad,转化为线性方程:

λ_ia_i=Ma_i\Rightarrow \left\{\begin{aligned}m+2n=λm\\ 3m+4n=λn \end{aligned}\right.\Rightarrow \left\{\begin{aligned}1+\frac{2n}{m} =λ\\ \frac{3m}{n} +4=λ\end{aligned}\right.

将m、n看做一个参数,这样2个方程组对应2个参数后λ可解

将方程组上式\frac{m}{n} =\frac{2}{λ-1}  代入方程组下式得\frac{6}{λ-1} +4-λ=0\Rightarrow (4-λ)(λ-1)+6=0\Rightarrow-[ (4-λ)(λ-1)+6]=0\Rightarrow(4-λ)(1-λ)-6=0

以上式子是|A|=|M-λ_iE|=0时λ的取值。更一般地,特征值求解即是已知方阵A的行列式为0求λ。然后通过λ求得特征向量,取将λ从大到小排序取前k个对应特征向量即可(较大的特征值对应较大的方差,取方差越大的特征则压缩损失越小)

实际问题并非求解2×2矩阵的特征值。可以根据矩阵大小、结构选择QR、QZ、Cholesky、分治法来获取特征值上述方法属于特征值分解

以上分解方式属于纯数学范畴,如果仅进行简单的应用,在各类AI框架里已经有相应的封装和优化。手动自实现与计算优化恐怕需数学专业人士配合,非专业人士离场

奇异值求解

一个很自然的问题:既然PCA最终转换为特征值分解的数学问题,那为什么不做特征值分解,而需要把问题转换为奇异值求解。对于这个问题国外网站有相关讨论:为什么PCA可以通过SVD达成?对于PCA,为什么吴恩达倾向于SVD而不是特征值分解?

参见了相关评论,核心是认为SVD分解速度更快、结果更稳定。对于线性方程求解:a+b=1、2a+b=1,通过小学待入式可得a=0、b=1,然而对于计算大型线性方程组并不适用。求解算法要么是初始化解,然后不断迭代到精确值(类似梯度下降)、要么是分解矩阵迭代到精确值。但有一些中肯的评论我比较赞成,他们解释到本质上SVD与EIG算法都是向后稳定型(迭代次数越多,结果越稳定),只是在PCA这个问题上,两者计算的数据源本身就有所不同,同时不同框架中实现SVD与EIG的方法也有所不同(有些数据场景下EIG远快于SVD)。所以从习惯上来说,PCA可以默认选用SVD来做

但机器学习避免盲目的算法崇拜,如果SVD、EIG都采用最先进的求解算法,同时实际数据的特征数量并非远大于样本数量、数据未完全服从高斯分布等原因,孰强孰若还需要结合实际情况来看

奇异值计算可以通过Lanzos、Jacobi、QR、分治法来实现,详细可参考知乎Matlab 的 svd 是怎么实现的?

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

推荐阅读更多精彩内容