[CS131] Lecture 12 Face Recognition & Dimensionality Reduction

根据 Stanford CS131 课程写的笔记(大部分为 note 翻译),英语水平一般,如有错误请评论指正

Lecture 12 Face Recognition & Dimensionality Reduction

Overview and Motivation

Overview

维度减少是用于减少特征数的一个过程,可以提高效率。主要有两种方法:奇异值分解 (Singular Value Decomposition, SVD) 和主成分分析 (Principal Component Analysis, PCA)。

Motivation

  1. 减少计算成本。减少不重要的特征,保留关键成分。
  2. 减少 “维度灾难” 的影响。lecture 11 中提及,维度增加,需要更多数据点,分析耗费的时间更多。因此,减少维度能够缓解维度灾难。
  3. 压缩数据。极大的降低数据储存要求。

Singular Value Decomposition (SVD)

Overview

直观地,SVD 是允许将数据呈现在一个新子特征空间的程序,使得数据的大多数变化能被捕捉。这是通过原特征空间的旋转轴,形成与原轴 / 原特征(例如:客户的年龄、收入 ···)线性组合的新轴。新轴可以基于每个方向对方差的贡献,系统地分解数据点的方差(数据的分散程度)。

SVD 的结果是一个关于特征空间的 “方向” 表,根据方差由高到低排序。有最高方差的方向称为 “(数据方差的)主成份”。关注这些维度的数据分布,就可以捕捉到大多数信息。

特征选择和维度减少有所不同,见下。

Technical Details of Singular Value Decomposition

  • SVD 代表矩阵 A = U Σ V T ,其中 U : m × m V : n × n 是旋转矩阵, Σ : m × n 是对角尺度矩阵。例如:

  • python 代码:[U, S, V] = numpy.linalg.svd(A)。计算机计算 SVD 步骤如下:

    1. 计算 A A T 的特征向量。这些向量构成 U 的列。特征向量的平方根为奇异值 (构成 Σ )
    2. 计算 A T A 的特征向量。这些向量构成 V 的列。
  • 因为 SVD 依赖于特征向量的计算,所以即使矩阵很大,计算也很快。

  • 更详细的实现细节:http://www.ams.org/samplings/feature-column/fcarc-svd.

Eigenvector definition

  • A x = λ x x 为特征向量, λ 为放缩因子。
  • 换句话说,用 x 来转换 A 只会放缩但不会改变方向。

Applications of Singular Value Decomposition

  • 计算逆转矩阵。如果任意矩阵 A 可以被分解为 A = U Σ V T ,那么 A 的逆可以定义为 A + = V T Σ 1 U 。即使这只是一个近似值,但它允许计算许多非平方矩阵的逆。
  • SVD 也可以用于计算矩阵的主成份。主成份大量用于数据分析和机器学习中,因此 SVD 是很多程序的核心。

Principal Component Analysis (PCA)

What are Principal Component

继续 SVD 的例子,注意 U 的第一列被 Σ 的第一个值缩放了。

接着, U Σ V T 的第一行缩放,对 A 的列产生了一个贡献 A p a r t i a l 。每个 ( U 的列 i )*( Σ 的值 i )*( V T 的行 i ) 都是 A 的一个成分。

在这个过程中,我们把矩阵 A 作为 U 的行的线性组合,如上图。但是,现实中我们可以只有 U 的几列来构造出一个 A 的好的近似。这是由于 Σ 的性质。 Σ 是一个最大值位于左上角,其余值由左上往右下递减的对角矩阵。因此, U 的前列对 A 的贡献最大。这前几列就称为主成分。

我们通过分析协方差矩阵,移除贡献小的维度。协方差矩阵的值并没有那么重要,但是值的符号很重要,正号代表正相关,负号代表负相关,0 代表相互独立。

Covariance

方差和协方差是一组点在质量中心(均值)的 “扩散” 的度量。方差:衡量一个维度上的点的偏差的度量,例如高度。协方差:衡量每个维度之间的差异的一种度量。在两个维度之间测量协方差,看看两个维度之间是否有关系,例如研究的小时数和获得的分数。一个维度和自身之间的协方差是方差。

C O V ( x , y ) = i = 1 n ( x ¯ i x ) ( y ¯ i y ) n 1

Performing PCA

PCA 可以用 sklearn package 实现:sklearn.decomposition.PCA。非正式方法实现步骤如下:

  1. 将数据转化为 m × n 格式, m 代表样本数, n 表示特征数

  2. 使 X 置中

    X

  3. 通过 SVD 对角化 X X = U Σ V T

  4. 特征向量是主要方向,这些轴上的阴影是组成成分。这意味着最终我们要计算 X V

  5. 因为 V 包含特征向量,所以是标准正交的, X V = U Σ V T V = U S

  6. 步骤 5 说明我们只需要 U S 的列,均由 SVD 产生。

Applications of Principal Component

  • 图像压缩。图像矩阵中的大多数信息都可以被低阶矩阵提取。所以在质量没有明显损失下,可以使用 PCA 压缩图像。如图:

    只用 16 个主成份,原图像就能被很好的重现。相对误差如下:

  • 用于搜索引擎。搜索空间中有许多都与搜索关键词无关,所以搜索引擎常用 PCA 缩小搜索空间。这对即使搜索十分重要,也体现了 SVD 的能力。

实际上,PCA 代表了样本作为不同成分的权重 – 允许用一个成分代表样本间的差异。这大大减少了数据冗余,使得算法更加高效有用。

猜你喜欢

转载自blog.csdn.net/bear507/article/details/82316072