Unsupervised Learning: PCA(Ⅱ)

如果本文对你有帮助,请给我的github打个star叭,上面附有全系列目录和内容!
注:更多优质内容欢迎关注我的微信公众号“Sakura的知识库”:

本文主要从组件和SVD分解的角度介绍PCA,并描述了PCA的神经网络实现方式,通过引入宝可梦、手写数字分解、人脸图像分解的例子,介绍了NMF算法的基本思想,此外,还提供了一些PCA相关的降维算法和论文

Reconstruction Component

假设我们现在考虑的是手写数字识别,这些数字是由一些类似于笔画的basic component组成的,本质上就是一个vector,记做 u 1 , u 2 , u 3 , . . . u_1,u_2,u_3,... u1​,u2​,u3​,...,以MNIST为例,不同的笔画都是一个28×28的vector,把某几个vector加起来,就组成了一个28×28的digit

写成表达式就是: x ≈ c 1 u 1 + c 2 u 2 + . . . + c k u k + x ˉ x≈c_1u^1+c_2u^2+...+c_ku^k+\bar x x≈c1​u1+c2​u2+...+ck​uk+xˉ

其中 x x x代表某张digit image中的pixel,它等于k个component的加权和 ∑ c i u i \sum c_iu^i ∑ci​ui加上所有image的平均值 x ˉ \bar x xˉ

比如7就是 x = u 1 + u 3 + u 5 x=u^1+u^3+u^5 x=u1+u3+u5,我们可以用 [ c 1 c 2 c 3 . . . c k ] T \left [\begin{matrix}c_1\ c_2\ c_3...c_k \end{matrix} \right]^T [c1​ c2​ c3​...ck​​]T来表示一张digit image,如果component的数目k远比pixel的数目要小,那这个描述就是比较有效的

实际上目前我们并不知道 u 1 u^1 u1~ u k u^k uk具体的值,因此我们要找这样k个vector,使得 x − x ˉ x-\bar x x−xˉ与 x ^ \hat x x^越接近越好:
x − x ˉ ≈ c 1 u 1 + c 2 u 2 + . . . + c k u k = x ^ x-\bar x≈c_1u^1+c_2u^2+...+c_ku^k=\hat x x−xˉ≈c1​u1+c2​u2+...+ck​uk=x^
而用未知component来描述的这部分内容,叫做Reconstruction error,即 ∣ ∣ ( x − x ˉ ) − x ^ ∣ ∣ ||(x-\bar x)-\hat x|| ∣∣(x−xˉ)−x^∣∣

接下来我们就要去找k个vector u i u^i ui去minimize这个error:
L = min ⁡ u 1 , . . . , u k ∑ ∣ ∣ ( x − x ˉ ) − ( ∑ i = 1 k c i u i ) ∣ ∣ 2 L=\min\limits_{u^1,...,u^k}\sum||(x-\bar x)-(\sum\limits_{i=1}^k c_i u^i) ||_2 L=u1,...,ukmin​∑∣∣(x−xˉ)−(i=1∑k​ci​ui)∣∣2​
回顾PCA, z = W ⋅ x z=W\cdot x z=W⋅x,实际上我们通过PCA最终解得的 { w 1 , w 2 , . . . , w k } \{w^1,w^2,...,w^k\} {w1,w2,...,wk}就是使reconstruction error最小化的 { u 1 , u 2 , . . . , u k } \{u^1,u^2,...,u^k\} {u1,u2,...,uk},简单证明如下:

  • 我们将所有的 x i − x ˉ ≈ c 1 i u 1 + c 2 i u 2 + . . . x^i-\bar x≈c_1^i u^1+c_2^i u^2+... xi−xˉ≈c1i​u1+c2i​u2+...都用下图中的矩阵相乘来表示,我们的目标是使等号两侧矩阵之间的差距越小越好

  • 可以使用SVD将每个matrix X m × n X_{m×n} Xm×n​都拆成matrix U m × k U_{m×k} Um×k​、 Σ k × k \Sigma_{k×k} Σk×k​、 V k × n V_{k×n} Vk×n​的乘积,其中k为component的数目
  • 值得注意的是,使用SVD拆解后的三个矩阵相乘,是跟等号左边的矩阵 X X X最接近的,此时 U U U就对应着 u i u^i ui那部分的矩阵, Σ ⋅ V \Sigma\cdot V Σ⋅V就对应着 c k i c_k^i cki​那部分的矩阵
  • 根据SVD的结论,组成矩阵 U U U的k个列向量(标准正交向量, orthonormal vector)就是 X X T XX^T XXT最大的k个特征值(eignvalue)所对应的特征向量(eigenvector),而 X X T XX^T XXT实际上就是 x x x的covariance matrix,因此 U U U就是PCA的k个解
  • 因此我们可以发现,通过PCA找出来的Dimension Reduction的transform,实际上就是把 X X X拆解成能够最小化Reconstruction error的component的过程,通过PCA所得到的 w i w^i wi就是component u i u^i ui,而Dimension Reduction的结果就是参数 c i c_i ci​
  • 简单来说就是,用PCA对 x x x进行降维的过程中,我们要找的投影方式 w i w^i wi就相当于恰当的组件 u i u^i ui,投影结果 z i z^i zi就相当于这些组件各自所占的比例 c i c_i ci​

  • 下面的式子简单演示了将一个样本点 x x x划分为k个组件的过程,其中 [ c 1 c 2 . . . c k ] T \left [\begin{matrix}c_1 \ c_2\ ... c_k \end{matrix} \right ]^T [c1​ c2​ ...ck​​]T是每个组件的比例;把 x x x划分为k个组件即从n维投影到k维空间, [ c 1 c 2 . . . c k ] T \left [\begin{matrix}c_1 \ c_2\ ... c_k \end{matrix} \right ]^T [c1​ c2​ ...ck​​]T也是投影结果

    注: x x x和 u i u_i ui​均为n维列向量
    KaTeX parse error: No such environment: split at position 10: \begin{̲s̲p̲l̲i̲t̲}̲ &x= \left …

NN for PCA

现在我们已经知道,用PCA找出来的 { w 1 , w 2 , . . . , w k } \{w^1,w^2,...,w^k\} {w1,w2,...,wk}就是k个component { u 1 , u 2 , . . . , u k } \{u^1,u^2,...,u^k\} {u1,u2,...,uk}

而 x ^ = ∑ k = 1 K c k w k \hat x=\sum\limits_{k=1}^K c_k w^k x^=k=1∑K​ck​wk,我们要使 x ^ \hat x x^与 x − x ˉ x-\bar x x−xˉ之间的差距越小越好,我们已经根据SVD找到了 w k w^k wk的值,而对每个不同的样本点,都会有一组不同的 c k c_k ck​值

在PCA中我们已经证得, { w 1 , w 2 , . . . , w k } \{w^1,w^2,...,w^k\} {w1,w2,...,wk}这k个vector是标准正交化的(orthonormal),因此:
c k = ( x − x ˉ ) ⋅ w k c_k=(x-\bar x)\cdot w^k ck​=(x−xˉ)⋅wk
这个时候我们就可以使用神经网络来表示整个过程,假设 x x x是3维向量,要投影到k=2维的component上:

  • 对 x − x ˉ x-\bar x x−xˉ与 w k w^k wk做inner product的过程类似于neural network, x − x ˉ x-\bar x x−xˉ在3维空间上的坐标就相当于是neuron的input,而 w 1 1 w^1_1 w11​, w 2 1 w^1_2 w21​, w 3 1 w^1_3 w31​则是neuron的weight,表示在 w 1 w^1 w1这个维度上投影的参数,而 c 1 c_1 c1​则是这个neuron的output,表示在 w 1 w^1 w1这个维度上投影的坐标值;对 w 2 w^2 w2也同理

  • 得到 c 1 c_1 c1​之后,再让它乘上 w 1 w^1 w1,得到 x ^ \hat x x^的一部分

  • 对 c 2 c_2 c2​进行同样的操作,乘上 w 2 w^2 w2,贡献 x ^ \hat x x^的剩余部分,此时我们已经完整计算出 x ^ \hat x x^三个分量的值

  • 此时,PCA就被表示成了只含一层hidden layer的神经网络,且这个hidden layer是线性的激活函数,训练目标是让这个NN的input x − x ˉ x-\bar x x−xˉ与output x ^ \hat x x^越接近越好,这件事就叫做Autoencoder

  • 注意,通过PCA求解出的 w i w^i wi与直接对上述的神经网络做梯度下降所解得的 w i w^i wi是会不一样的,因为PCA解出的 w i w^i wi是相互垂直的(orgonormal),而用NN的方式得到的解无法保证 w i w^i wi相互垂直,NN无法做到Reconstruction error比PCA小,因此:

    • 在linear的情况下,直接用PCA找 W W W远比用神经网络的方式更快速方便
    • 用NN的好处是,它可以使用不止一层hidden layer,它可以做deep autoencoder

Weakness of PCA

PCA有很明显的弱点:

  • 它是unsupervised的,如果我们要将下图绿色的点投影到一维空间上,PCA给出的从左上到右下的划分很有可能使原本属于蓝色和橙色的两个class的点被merge在一起

    而LDA则是考虑了labeled data之后进行降维的一种方式,但属于supervised

  • 它是linear的,对于下图中的彩色曲面,我们期望把它平铺拉直进行降维,但这是一个non-linear的投影转换,PCA无法做到这件事情,PCA只能做到把这个曲面打扁压在平面上,类似下图,而无法把它拉开

    对类似曲面空间的降维投影,需要用到non-linear transformation

PCA for Pokemon

这里举一个实际应用的例子,用PCA来分析宝可梦的数据

假设总共有800只宝可梦,每只都是一个六维度的样本点,即vector={HP, Atk, Def, Sp Atk, Sp Def, Speed},接下来的问题是,我们要投影到多少维的空间上?

如果做可视化分析的话,投影到二维或三维平面可以方便人眼观察

实际上,宝可梦的 c o v ( x ) cov(x) cov(x)是6维,最多可以投影到6维空间,我们可以先找出6个特征向量和对应的特征值 λ i \lambda_i λi​,其中 λ i \lambda_i λi​表示第i个投影维度的variance有多大(即在第i个维度的投影上点的集中程度有多大),然后我们就可以计算出每个 λ i \lambda_i λi​的比例,ratio= λ i ∑ i = 1 6 λ i \frac{\lambda_i}{\sum\limits_{i=1}^6 \lambda_i} i=1∑6​λi​λi​​

从上图的ratio可以看出 λ 5 \lambda_5 λ5​、 λ 6 \lambda_6 λ6​所占比例不高,即第5和第6个principle component(可以理解为维度)所发挥的作用是比较小的,用这两个dimension做投影所得到的variance很小,投影在这两个方向上的点比较集中,意味着这两个维度表示的是宝可梦的共性,无法对区分宝可梦的特性做出太大的贡献,所以我们只需要利用前4个principle component即可

注意到新的维度本质上就是旧的维度的加权矢量和,下图给出了前4个维度的加权情况,从PC1到PC4这4个principle component都是6维度加权的vector,它们都可以被认为是某种组件,大多数的宝可梦都可以由这4种组件拼接而成,也就是用这4个6维的vector做linear combination的结果

我们来仔细分析一下这些组件:

  • 对第一个vector PC1来说,每个值都是正的,因此这个组件在某种程度上代表了宝可梦的强度

  • 对第二个vector PC2来说,防御力Def很大而速度Speed很小,这个组件可以增加宝可梦的防御力但同时会牺牲一部分的速度

  • 如果将宝可梦仅仅投影到PC1和PC2这两个维度上,则降维后的二维可视化图像如下图所示:

    从该图中也可以得到一些信息:

    • 在PC2维度上特别大的那个样本点刚好对应着普普(海龟),确实是防御力且速度慢的宝可梦
    • 在PC1维度上特别大的那三个样本点则对应着盖欧卡、超梦等综合实力很强的宝可梦

  • 对第三个vector PC3来说,sp Def很大而HP和Atk很小,这个组件是用生命力和攻击力来换取特殊防御力

  • 对第四个vector PC4来说,HP很大而Atk和Def很小,这个组件是用攻击力和防御力来换取生命力

  • 同样将宝可梦只投影到PC3和PC4这两个维度上,则降维后得到的可视化图像如下图所示:

    该图同样可以告诉我们一些信息:

    • 在PC3维度上特别大的样本点依旧是普普,第二名是冰柱机器人,它们的特殊防御力都比较高
    • 在PC4维度上特别大的样本点则是吉利蛋和幸福蛋,它们的生命力比较强

PCA for MNIST

再次回到手写数字识别的问题上来,这个时候我们就可以熟练地把一张数字图像用多个组件(维度)表示出来了:
d i g i t i m a g e = a 1 w 1 + a 2 w 2 + . . . digit\ image=a_1 w^1+a_2 w^2+... digit image=a1​w1+a2​w2+...
这里的 w i w^i wi就表示降维后的其中一个维度,同时也是一个组件,它是由原先28×28维进行加权求和的结果,因此 w i w^i wi也是一张28×28的图像,下图列出了通过PCA得到的前30个组件的形状:

注:PCA就是求 C o v ( x ) = 1 N ∑ ( x − x ˉ ) ( x − x ˉ ) T Cov(x)=\frac{1}{N}\sum (x-\bar x)(x-\bar x)^T Cov(x)=N1​∑(x−xˉ)(x−xˉ)T的前30个最大的特征值对应的特征向量

PCA for Face

同理,通过PCA找出人脸的前30个组件(维度),如下图所示:

用这些脸的组件做线性组合就可以得到所有的脸

What happens to PCA

在对MNIST和Face的PCA结果展示的时候,你可能会注意到我们找到的组件好像并不算是组件,比如MNIST找到的几乎是完整的数字雏形,而Face找到的也几乎是完整的人脸雏形,但我们预期的组件不应该是类似于横折撇捺,眼睛鼻子眉毛这些吗?

如果你仔细思考了PCA的特性,就会发现得到这个结果是可能的
d i g i t i m a g e = a 1 w 1 + a 2 w 2 + . . . digit\ image=a_1 w^1+a_2 w^2+... digit image=a1​w1+a2​w2+...
注意到linear combination的weight a i a_i ai​可以是正的也可以是负的,因此我们可以通过把组件进行相加或相减来获得目标图像,这会导致你找出来的component不是基础的组件,但是通过这些组件的加加减减肯定可以获得基础的组件元素

NMF

Introduction

如果你要一开始就得到类似笔画这样的基础组件,就要使用NMF(non-negative matrix factorization),非负矩阵分解的方法

PCA可以看成对原始矩阵 X X X做SVD进行矩阵分解,但并不保证分解后矩阵的正负,实际上当进行图像处理时,如果部分组件的matrix包含一些负值的话,如何处理负的像素值也会成为一个问题(可以做归一化处理,但比较麻烦)

而NMF的基本精神是,强迫使所有组件和它的加权值都必须是正的,也就是说所有图像都必须由组件叠加得到

  • Forcing a 1 a_1 a1​, a 2 a_2 a2​… be non-negative

    • additive combination
  • Forcing w 1 w_1 w1​, w 2 w_2 w2​… be non-negative
    • More like “parts of digits”

注:关于NMF的具体算法内容可参考paper(公众号回复“NMF”获取pdf):

Daniel D. Lee and H. Sebastian Seung. "Algorithms for non-negative matrix factorization."Advances in neural information processing systems. 2001.

NMF for MNIST

在MNIST数据集上,通过NMF找到的前30个组件如下图所示,可以发现这些组件都是由基础的笔画构成:

NMF for Face

在Face数据集上,通过NMF找到的前30个组价如下图所示,相比于PCA这里更像是脸的一部分

More Related Approaches

降维的方法有很多,这里再列举一些与PCA有关的方法:

  • Multidimensional Scaling (MDS) [Alpaydin, Chapter 6.7]

    MDS不需要把每个data都表示成feature vector,只需要知道特征向量之间的distance,就可以做降维,PCA保留了原来在高维空间中的距离,在某种情况下MDS就是特殊的PCA

  • Probabilistic PCA [Bishop, Chapter 12.2]

    PCA概率版本

  • Kernel PCA [Bishop, Chapter 12.3]

    PCA非线性版本

  • Canonical Correlation Analysis (CCA) [Alpaydin, Chapter 6.9]

    CCA常用于两种不同的data source的情况,比如同时对声音信号和唇形的图像进行降维

  • Independent Component Analysis (ICA)

    ICA常用于source separation,PCA找的是正交的组件,而ICA则只需要找“独立”的组件即可

  • Linear Discriminant Analysis (LDA) [Alpaydin, Chapter 6.8]

    LDA是supervised的方式

机器学习系列18-无监督学习之PCA深入探讨(Ⅱ)相关推荐

  1. 机器学习-19-Unsupervised Learning-03-PCA part2(无监督学习之PCA深入探讨 part2)

    文章目录 Unsupervised Learning: PCA(Ⅱ) Reconstruction Component NN for PCA Weakness of PCA PCA for Pokem ...

  2. 机器学习系列 1:监督学习和无监督学习

    https://www.toutiao.com/a6690813539747103246/ 2019-05-15 09:31:00 机器学习系列 1:监督学习和无监督学习 机器学习就是通过一大堆数据集 ...

  3. 机器学习-Sklearn-07(无监督学习聚类算法KMeans)

    机器学习-Sklearn-07(无监督学习聚类算法KMeans) 学习07 1 概述 1.1 无监督学习与聚类算法 聚类算法又叫做"无监督分类",其目的是将数据划分成有意义或有用的 ...

  4. 机器学习中的无监督学习_无监督机器学习中聚类背后的直觉

    机器学习中的无监督学习 When it comes to analyzing & making sense of the data from the past and understandin ...

  5. 机器学习系列18:核函数

    https://www.toutiao.com/a6700783341630652931/ 机器学习系列18:核函数 让我们来考虑这样一个问题,现在给定一个数据集,让你划分出决策边界,该怎么办呢?数据 ...

  6. 机器学习系列(一), 监督学习和无监督学习

    常见的机器学习任务,可以分为监督学习和无监督学习两类 1,监督学习 监督学习的样本集是既有特征也有结果的数据,即已知输入与输出值.监督学习的任务时根据这些已知特征和结果的数据,训练模型,使得模型能够根 ...

  7. 机器学习中的无监督学习应用在哪些领域呢?自动驾驶?医疗影像?卷积神经网络?

    监督学习|机器学习|集成学习|进化计算| 非监督学习| 半监督学习|自监督学习| 无监督学习| 随着人工智能.元宇宙.数据安全.可信隐私用计算.大数据等领域的快速发展,自监督学习脱颖而出,致力于解决数 ...

  8. 机器学习中的无监督学习是什么?

    什么是无监督学习? 顾名思义,"无监督"学习发生在没有监督者或老师并且学习者自己学习的情况下. 例如,考虑一个第一次看到并品尝到苹果的孩子.她记录了水果的颜色.质地.味道和气味.下 ...

  9. 写给人类的机器学习 三、无监督学习

    三.无监督学习 原文: Machine Learning for Humans, Part 3: Unsupervised Learning 作者:Vishal Maini 译者:机器之心 聚类和降维 ...

  10. 入门机器学习(十五)--无监督学习(K均值)

    1.无监督学习-简介(Unsupervised Learning-Introduction) 如下图所示是一个典型的监督学习,训练集中的每一个样本都有标签,我们需要根据标签来拟合一个假设函数. 什么是 ...

最新文章

  1. Linux编程中的坑——C++中exit和return的区别
  2. 自底向上的web数据操作指南
  3. 这个搞定系统监控的妙招,不来学可惜了
  4. CSS中颜色代码和单位
  5. ux的重要性_UX中清晰的重要性
  6. MOVSX和MOVZX
  7. STM32F407控制AD7606 采用HAL库的TIM和SPI
  8. 2019年最值得关注的5个人工智能趋势!
  9. 经济情况越不好越要做好这三点
  10. firewalld 极速上手指南
  11. 大数据学习-----排错记录
  12. JPG/PNG转SVG矢量格式
  13. 应聘网站编辑常见面试题
  14. 数据清洗之微博内容清洗
  15. FIL最新行情,FIL预测能涨至750U是否过于夸大?会突破新高吗?
  16. 将字符串转化为ASCII码
  17. 局域网内VSS无法连接的一个“恶心他妈给恶心开门”的问题
  18. Mac本,pip命令下载速度慢怎么办,这里有方案
  19. MAC电池更换经验-注意事项
  20. 15-移动端布局基础——DPI、PPI、物理像素、DPR、viewportcss像素、DPR

热门文章

  1. ChatGPT角色扮演咒语库(内有插件推荐)
  2. afinal框架之Android视频下载,指定路径
  3. shader_ 素描效果
  4. UE4 创建Actor类型蓝图拖拽到场景设置白色球消失
  5. 5种主流浏览器的内核
  6. mysql 从第几个字符串开始截取_MySQL截取字符串函数方法
  7. MySQL截取字符串和转换日期格式
  8. mysql 给 count改名字_Mysql
  9. MySQL增加一个或者多个字段(转)
  10. RStudio 的使用介绍