之前看3DMM的论文的看到其用了PCA的方法,一开始以为自己对于PCA已经有了一定的理解,但是当看到式子的时候发现自己好像对于原理却又不甚明了,所以又回顾了以下PCA的原理,在此写一个总结。

PCA目的

主成分分析(principal component analysis, PCA) 是常用的一种降维方法,其目的是为了让数据合理的降维,在降低维度的同时尽量保证数据的原始信息不过于流失,同时减少数据的相关性。也可以理解为,对于正交属性空间中的样本点,如何用一个超平面对所有样本进行恰当的表达。

基于以上的目的可以大致分为两种

  • 最大可分性: 样本点在这个超平面上的投影尽可能的分开(即投影后的方差最大)
  • 最近重构性: 样本点到这个超平面的距离都足够近

最大可分性(最大投影方差)

我们的目的是为了让投影后的信息量的尽量保持原样,那么为什么方差越大信息量就越多?

我们知道信息量可以通过信息熵来描述,信息熵的定义为:变量的概率分布和每个变量的信息量构成了一个随机变量,这个随机变量的期望就是这个分布产生的信息量的熵

\[Ent(D) = -\sum_{k=1}p_k logp_k
\]

其描述了样本的不确定度。举个例子,如果一个文档中字母全是 a,那么 \(p(a) = 1\),其信息量为 \(logp(a) = 0\) 可以知道这个文档的信息量完全不混乱,换言之字母a所承载的信息量为0,也可以理解为字母a对于这个系统毫无意义,所以采取 \(logp(a) = 0\) 来表示。同时也可以看到其方差也为0。

那是不是所有的方差都和熵表达的是一样的事呢?

再看看方差的定义:一个随机变量的方差描述的是它的离散程度,也就是该变量离其期望值的距离。

\[\sigma^2 = \frac{1}{n-1}\sum_{i=1}^{n}(X_i - \bar{X})
\]

通过以上的两个定义可以看出,方差描述的是与均值(期望)的离散程度, 而信息熵描述的是 不确定程度 ,仅仅与随机变量的分布有关,与其的具体取值无关。

在某些情况下,当方差越大,信息熵不一定越大。如下图

再回到PCA的目的,是为了保持降维后信息量的最大化。但由于我们当处理一个具体的事件时,并无法准确得到数据是以什么概率分布产生的,这样计算信息熵也就没有什么意义。而对于某些分布,如下

可以看出,在大部分情况下,方差越大信息熵也越大,即用方差去描述不确定性和信息熵描述不确定性在这些分布的情况下等价。

当然也有不等价的情况,只是在这种情况下,考虑方差就不一定成立.

以上是一种考虑方式,另一种直接通过投影如下图

图片来源于西瓜书

可以看到,可以将二维向量投影到红线或者灰线,当然还有很多可以选择的投影方向,那么问题在于哪一个投影方向是最好的呢?对于红线而言投影后样本点更分散,所以其包含的信息量更大。

所以,根据以上信息我们需要找到的是进行降维后,对于不同样本在同一纬度的值差异大的纬度

投影

假设有m个n维数据 \(X(x^{(1)}, x^{(2)},...,x^{(m)})( n \times m)\) (后面均用这个例子),该数据需要先经历中心化,然后经过投影变换后得到了新的坐标系为 \(\{w_1,w_2,...,w_n\}\),其中 \(w\) 是标准正交基, 即 \(||w||_2=1, w_i^Tw_j=0\)。

这里可以想象成对于任意一个样本点 \(x_i\) 投影到任意新坐标轴 \(w_j\) 上的所表达的坐标为 \(z_j = w_j^Tx_i\), 所以这里 \(z_j\) 就表示了低纬坐标系里第 \(j\) 纬的坐标。

即对于任意一个样本 \(x^{(i)}\) 在新坐标系中的投影为 \(W^Tx^{(i)}\)

优化目标

所以对于基于最大方差投影的PCA算法的优化目标是:

  1. 降维后投影在各个方向的方差和最大
  2. 不同纬度之间的相关性为0

根据优化目标如何得到降维后的数据呢?

这里先给出步骤:

  1. 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

  2. 求出协方差矩阵 \(C=\frac{1}{m}XX^\mathsf{T}\)

  3. 求出协方差矩阵的特征值及对应的特征向量

  4. 取最大的 \(n'\) 个特征值所对应的所对应的特征向量,组成的矩阵 \(W\) 即是投影矩阵

  5. \(Z=W^TX\)即为降维到 \(n'\) 维后的数据集

关键点

  1. 为什么要将X的每一行进行0均值化(即每一个属性字段0均值化)
  2. 为什么要求去协方差矩阵

首先我们知道同一特征的协方差表示该元素的方差,不同特征之间的协方差表示他们的相关性,如下, 假设针对特征 \((f_1,f_2,...,f_n)\) 有协方差矩阵为

\[Cov(f_1,f_2,...,f_n)=\left[ \begin{matrix} Cov(f_1,f_1) & Cov(f_1,f_2)& ...& Cov(f_1,f_n) \\ Cov(f_2,f_1) & Cov(f_2,f_2) & ... & Cov(f_2,f_n) \\ ... & ... & ... & ... \\ Cov(f_n,f_1) & Cov(f_n,f_2) & ... & Cov(f_n,f_n) \end{matrix} \right]
\]

其中, 对于特征 \((X,Y)\)

\[\begin{aligned}
Cov\left( X,Y \right)&=E\left[ \left( X-E\left( X \right) \right)\left( Y-E\left( Y \right) \right) \right] \\ &=\frac{1}{n-1}\sum_{i=1}^{n}{(x_{i}-\bar{x})(y_{i}-\bar{y})}
\end{aligned}
\]

所以根据我们的求取的目标(同一纬度方差最大化,不同纬度相关性为0)可以用以下的协方差矩阵来表示

\[Cov(f_1,f_2,...,f_n)=\left[ \begin{matrix} \delta_{11} & 0 & ... & 0 \\ 0 & \delta_{22} & ... & 0 \\ ...& ... & ... & ... \\ 0 & 0 & ... & \delta_{nn} \end{matrix} \right]
\]

这里引入矩阵的迹

数学定义: 在线性代数中,一个n×n矩阵A的主对角线(从左上方至右下方的对角线)上各个元素的总和被称为矩阵A的迹(或迹数),一般记作tr(A)。

假设将数据从 \(n\) 维降到 \(n'\) 维, 所以要优化的目标之一便是令 \(Cov(f_1,f_2, ..., f_{n'})\) 矩阵对角线元素之和最大,即 \(max(\delta_{11}, \delta_{22}, ... ,\delta_{n'n'})\)

推导

设有m个n维数据\(X (x^{(1)}, x^{(2)},...,x^{(m)})(n \times m)\) , 首先将数据X的每一维进行中心化, 原因在于求协方差矩阵的时候需要用到 \((x_i - \bar x)(y_i - \bar y)\) 所以原始数据变成

\[X'=
\begin{bmatrix}
x_{11} - u_1 & x_{12} - u_1 & ... & x_{1m} - u_1 \\
x_{21} - u_2 & x_{22} - u_2 & ... & x_{2m} - u_2 \\
... & ... & ... & ... \\
x_{n1} - u_n & x_{n2} - u_n & ... & x_{nm} - u_n
\end{bmatrix}\]

\(W \{w_1,w_2,...,w_n\}\) 为 \((n \times n)\) 的标准正交基矩阵(投影矩阵), \(Y = W^TX\) 为投影后的样本矩阵(新坐标系中任何一个样本的投影方差为 \(x^{(i)T}WW^Tx^{(i)}\))

则 \(Y\) 的协方差矩阵(根据维度数来考虑)为

\[\begin{aligned}
C_Y &= \frac{1}{m} YY^T \\
&= \frac{1}{m} W^TXX^TW \\
&= W^T (\frac{1}{m} XX^T) W
\end{aligned}
\]

设 \(C = \frac{1}{m} XX^T\) 可得

\[C_Y = W^TCW
\]

而优化的目标为

\[\left\{\begin{matrix}
\underbrace{arg\;max}_{W}\;tr( W^TCW ) \\
W^TW=I
\end{matrix}\right. \tag1
\]

由于 \(C\) 已知,目的是为了求取极值, 利用拉格朗日函数(设给定函数 \(z=ƒ(x,y)\) 在满足 \(φ(x,y)=0\)下的条件极值,可以转化为函数 \(F(x,y,\lambda) = f(x,y) + \lambda φ(x,y)\) 的无条件极值问题

所以上式(1) 就转化为

\[f(W) = tr(W^TCW) + \lambda(I - W^TW)
\]

等式两遍对W求导

\[\frac{\partial f}{\partial W} = \frac{\partial tr(W^TCW)}{\partial W} - \lambda \frac{\partial (W^TW)}{\partial W}
\]

令导数为0,即 \(\frac{\partial f}{\partial W} = 0\), 且有性质 \(\frac{\partial tr(AB)}{\partial A} = B^T\), \(\frac{\partial tr(AB)}{\partial B} =A^T\),\(\frac{\partial X^TX}{\partial X} = X\) 可得

\[(W^TC)^T - \lambda W = 0 \Rightarrow CW = \lambda W
\]

由上式可以看出, \(W\) 是 \(XX^T\) 的特征向量组成的矩阵, 而 \(-\lambda\) 是 \(XX^T\) 的若干个特征值组成的矩阵,特征值在主对角线上,其余位置为0。 当将数据从 \(n\) 维降到 \(n'\) 维时, 需要找到最大的 \(n'\) 个特征值对应的特征向量, 这 \(n'\) 个特征向量组成的矩阵 \(W\) 即维我们需要的新坐标系矩阵,对于原始的数据集, 只需要利用 \(W^TX\), 就可以把原始数据集降维到最小投影距离的 \(n'\) 维数据集。

ps: 这里有一个性质 实对称矩阵不同特征值对应的特征向量互相正交, 在这里我们的 \(C_Y\) 是一个协方差矩阵,而协方差矩阵是一个实对称矩阵

为什么要找最大特征值对应的特征向量呢?

假设有样本点如下(已经做过预处理,均值为0),以及可投影的维度

我们知道向量点乘的意义是,一个向量对于某一个单位向量的投影(向量对这个单位向量的线性变换),即 \(\vec{A} \cdot \vec{B}\) 的意义是向量A在向量B上的投影长度乘以向量B的模长(对如果B是一个平面也适用,即B为新的平面的基向量)。

所以对于任意维度的投影直线 \(u\)(列向量) 其投影后的样本方差为:

\[方差 = \frac{1}{m} \sum_{i=1}^{m}({x^{i}}^Tu - 所有{{x^{i}}^Tu}的均值)^2
\]

由于已经在一开始就进行了 \(X\) 的零均值处理,以及向量加法的分配律可以得知 \(所有{{x^{i}}^Tu}的均值 = 0\)

所以最终方差为

\[方差 = \frac{1}{m} \sum_{i=1}^{m}({x^{i}}^Tu )^2
\]

对上式进行变换 (根据向量的交换律\(a \cdot b = b \cdot a\))

\[\frac{1}{m} \sum_{i=1}^{m}({x^{i}}^Tu )^2 = \frac{1}{m}(\sum_{i=1}^{m}{u^Tx^ix^{i}}^Tu)= u^T(\frac{1}{m}\sum_{i=1}^{m}{x^ix^{i}}^T)u
\]

由上式可以发现,括号内的部分就是样本特征的协方差矩阵, 现在我们已经得到这个方差的表达方式,那么如何使得这个方差最大呢?令方差 \(\frac{1}{m} \sum_{i=1}^{m}({x^{i}}^Tu )^2 = \lambda, C = \frac{1}{m}\sum_{i=1}^{m}{x^ix^{i}}^T\) ,于是上式就变成了

\[\lambda = u^TCu
\]

因为 \(u^Tu = 1\) 同理, 为了使得方差最大,利用拉格朗日乘子法可以得知:

\[u^TCu + \lambda(1 - u^Tu)
\]

将上式求导,是之为0, 得到:

\[Cu = \lambda u
\]

所以为了使得方差 \(\lambda\) 最大,也就是取协方差矩阵 \(C\) 的最大特征值,与其对应的特征向量,为了使选取的 \(n'\) 维空间各个维度方差之和最大,就是取最大的 \(n'\) 个特征值以及其对应的特征向量。 从这里也可以看出,由于 \(C\) 使协方差矩阵,也就是实对称矩阵, 所以其特征特征向量两两正交。

参考:

https://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html

https://www.cnblogs.com/pinard/p/6239403.html#!comments

https://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html

PCA主成分分析(上)的更多相关文章

  1. 用PCA(主成分分析法)进行信号滤波

    用PCA(主成分分析法)进行信号滤波 此文章从我之前的C博客上导入,代码什么的可以参考matlab官方帮助文档 现在网上大多是通过PCA对数据进行降维,其实PCA还有一个用处就是可以进行信号滤波.网上 ...

  2. 机器学习之PCA主成分分析

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ 简介 在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性.人们自然希望变量个数较少而得到的 信息较多.在很 ...

  3. PCA主成分分析Python实现

    作者:拾毅者 出处:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代码:https://github.com/c ...

  4. 机器学习 - 算法 - PCA 主成分分析

    PCA 主成分分析 原理概述 用途 - 降维中最常用的手段 目标 - 提取最有价值的信息( 基于方差 ) 问题 - 降维后的数据的意义 ? 所需数学基础概念 向量的表示 基变换 协方差矩阵 协方差 优 ...

  5. PCA(主成分分析)方法浅析

    PCA(主成分分析)方法浅析 降维.数据压缩 找到数据中最重要的方向:方差最大的方向,也就是样本间差距最显著的方向 在与第一个正交的超平面上找最合适的第二个方向 PCA算法流程 上图第一步描述不正确, ...

  6. PCA 主成分分析

    链接1 链接2(原文地址) PCA的数学原理(转) PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表 ...

  7. PCA主成分分析方法

    PCA: Principal Components Analysis,主成分分析. 1.引入 在对任何训练集进行分类和回归处理之前,我们首先都需要提取原始数据的特征,然后将提取出的特征数据输入到相应的 ...

  8. 【建模应用】PCA主成分分析原理详解

    原文载于此:http://blog.csdn.net/zhongkelee/article/details/44064401 一.PCA简介 1. 相关背景 上完陈恩红老师的<机器学习与知识发现 ...

  9. PCA主成分分析+白化

    参考链接:http://deeplearning.stanford.edu/wiki/index.php/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90 h ...

随机推荐

  1. JavaScript form表单提交与验证

    原网址:https://blog.csdn.net/vipwxs/article/details/79119701 一.form对象的属性: name:获取表单的名称,该name一般给JS使用 met ...

  2. 家庭记账本app进度之关于tap的相关操作1

    今天还主要学习关于怎样制作微信的先关的tap. 今天的主要成果是已经了解了相关的技术,以及相关的思路.代码经过一个下午的编写,基本接近尾声. 更详细的实验代码,以及相关的知识点将在明天完善后进行发表. ...

  3. python使用阿里云oss-sdk

    python使用阿里云oss-python-sdk 请访问github获取源码 安装 pip install oss2 安装验证 >>> import oss2 >>&g ...

  4. uni_app商城项目(完成)

    总结: 1.uni-app的跨段适配性,真的特别强,完成相关代码的书写,HbuilderX编辑器提供的打包十分方便. 2.开发小程序,H5等移动端开发, 比开发电脑端简单不少,但有时候坑也挺多的. 3 ...

  5. python 函数简介

    一.为什么要有函数? 不加区分地将所有功能的代码垒到一起,问题是: 代码的可读性差. 代码冗余 代码可扩展性差 如何解决? 函数即工具,事先准备工具的过程是定义函数,拿来就用指的是函数调用. 什么是函 ...

  6. 这可能是 Github 上最全面的 Flutter 教程

    引语 晚上好,我是猫咪,我的公众号「程序媛猫咪」会推荐 GitHub 上好玩的项目,挖掘开源的价值,欢迎关注我. 刚下班到家,金三银四,虽然今天行情尤其地不好,但身边的同事也是走了一波,不免会受到影响 ...

  7. Nuxt内导航栏的两种实现方式

    方式一 | 通过嵌套路由实现 在pages页面根据nuxt的路由规则,建立页面 1. 创建文件目录及文件 根据规则,如果要创建子路由,子路由的文件夹名字,必须和父路由名字相同 所以,我们的文件夹也为i ...

  8. MySQL学习之路2-数据库and数据表的基本操作

    数据库基本操作 查看.选择数据库: show databases; use <databasename>; 创建数据库:create database <dbname> cha ...

  9. hive常用函数五

    复合类型构建操作 1. Map类型构建: map 语法: map (key1, value1, key2, value2, …) 说明:根据输入的key和value对构建map类型 举例: hive& ...

  10. 千亿级平台技术架构:为了支撑高并发,我把身份证存到了JS里

    @ 目录 一.用户信息安全规范 1.1 ​用户信息.敏感信息定义及判断依据 1.1.1 个人信息 1.1.2 个人敏感信息 1.2 ​用户信息存储的注意事项 二.​框架技术实现 2.1 用户敏感信息自 ...