Stanford机器学习笔记-10. 降维(Dimensionality Reduction)

10. Dimensionality Reduction

Content html

10. Dimensionality Reduction算法

  10.1 Motivationapp

    10.1.1 Motivation one: Data Compression机器学习

    10.2.2 Motivation two: Visualization函数

  10.2 Principal Component Analysis学习

    10.2.1 Problem formulation测试

    10.2.2 Principal Component Analysis Algorithmspa

    10.2.3 Choosing the Number of Principal Components3d

    10.2.4 Advice for Applying PCA  orm

10.1 Motivation

10.1.1 Motivation one: Data Compression

若是咱们有许多冗余的数据,咱们可能须要对特征量进行降维(Dimensionality Reduction)。

咱们能够找到两个很是相关的特征量,可视化,而后用一条新的直线来准确的描述这两个特征量。例如图10-1所示,x1和x2是两个单位不一样本质相同的特征量,咱们能够对其降维。

图10-1 一个2维到1维的例子

又如图10-2所示的3维到2维的例子,经过对x1,x2,x3的可视化,发现虽然样本处于3维空间,可是他们大多数都分布在同一个平面中,因此咱们能够经过投影,将3维降为2维。

图10-2 一个3维到2维的例子

降维的好处很明显,它不只能够数据减小对内存的占用,并且还能够加快学习算法的执行。

注意,降维只是减少特征量的个数(即n)而不是减少训练集的个数(即m)。

10.2.2 Motivation two: Visualization

咱们能够知道,但特征量维数大于3时,咱们几乎不能对数据进行可视化。因此,有时为了对数据进行可视化,咱们须要对其进行降维。咱们能够找到2个或3个具备表明性的特征量,他们(大体)能够归纳其余的特征量。

例如,描述一个国家有不少特征量,好比GDP,人均GDP,人均寿命,平均家庭收入等等。想要研究国家的经济状况并进行可视化,咱们能够选出两个具备表明性的特征量如GDP和人均GDP,而后对数据进行可视化。如图10-3所示。

图10-3 一个可视化的例子

10.2 Principal Component Analysis

主成分分析(Principal Component Analysis : PCA)是最经常使用的降维算法。

10.2.1 Problem formulation

首先咱们思考以下问题,对于正交属性空间(对2维空间即为直角坐标系)中的样本点,如何用一个超平面(直线/平面的高维推广)对全部样本进行恰当的表达?

事实上,若存在这样的超平面,那么它大概应具备这样的性质:

  • 最近重构性 : 样本点到这个超平面的距离都足够近;
  • 最大可分性:样本点在这个超平面上的投影能尽量分开。

下面咱们以3维降到2维为例,来试着理解为何须要这两种性质。图10-4给出了样本在3维空间的分布状况,其中图(2)是图(1)旋转调整后的结果。在10.1节咱们默认以红色线所画平面(不妨称之为平面s1)为2维平面进行投影(降维),投影结果为图10-5的(1)所示,这样彷佛还不错。那为何不用蓝色线所画平面(不妨称之为平面s2)进行投影呢? 能够想象,用s2投影的结果将如图10-5的(2)所示。

图10-4 样本在3维正交空间的分布

图10-5 样本投影在2维平面后的结果

由图10-4能够很明显的看出,对当前样本而言,s1平面比s2平面的最近重构性要好(样本离平面的距离更近);由图10-5能够很明显的看出,对当前样本而言,s1平面比s2平面的最大可分性要好(样本点更分散)。不难理解,若是选择s2平面进行投影降维,咱们会丢失更多(至关多)的特征量信息,由于它的投影结果甚至能够在转化为1维。而在s1平面上的投影包含更多的信息(丢失的更少)。

这样是否就是说咱们从3维降到1维必定会丢失至关多的信息呢? 其实也不必定,试想,若是平面s1投影结果和平面s2的相似,那么咱们能够推断这3个特征量本质上的含义大体相同。因此即便直接从3维到1维也不会丢失较多的信息。这里也反映了咱们须要知道如何选择到底降到几维会比较好(在10.2.3节中讨论)。

让咱们高兴的是,上面的例子也说明了最近重构性和最大可分性能够同时知足。更让人兴奋的是,分别以最近重构性和最大可分性为目标,可以获得PCA的两种等价推导

通常的,将特征量从n维降到k维:

  • 以最近重构性为目标,PCA的目标是找到k个向量,将全部样本投影到这k个向量构成的超平面,使得投影的距离最小(或者说投影偏差projection error最小)。
  • 以最大可分性为目标,PCA的目标是找到k个向量,将全部样本投影到这k个向量构成的超平面,使得样本点的投影可以尽量的分开,也就是使投影后的样本点方差最大化

注意: PCA和线性回归是不一样的,如图10-6所示,线性回归是以平方偏差和(SSE)最小为目标,参见1.2.4节;而PCA是使投影(二维即垂直)距离最小;PCA与标记或者预测值彻底无关,而线性回归是为了预测y的值。

图10-6 PCA不是线性回归

分别基于上述两种目标的具体推导过程参见周志华老师的《机器学习》P230。从方差的角度推导参见李宏毅老师《机器学习》课程Unsupervised Learning: Principle Component Analysis

两种等价的推导结论是:对协方差矩阵进行特征值分解,将求得的特征值进行降序排序,再取前k个特征值对应的特征向量构成

其中

10.2.2 Principal Component Analysis Algorithm

基于上一节给出的结论,下面给出PCA算法。

输入:训练集:,低维空间维数k

过程:

  1. 数据预处理:对全部样本进行中心化(即便得样本和为0)

  2. 计算样本的协方差矩阵(Sigma)

        (其中是n*1的向量)

    在matlab中具体实现以下,其中X为m*n的矩阵:

    Sigma = (1/m) * X'* X;

  3. 对2中求得的协方差矩阵Sigma进行特征值分解

    在实践中一般对协方差矩阵进行奇异值分解代替特征值分解。在matlab中实现以下:

    [U, S, V] = svd(Sigma); (svd即为matlab中奇异值分解的内置函数)

  4. 取最大的k个特征值所对应的特征向量

    在matlab具体实现时,Ureduce = 认为是第3步求得的U的前k个,即有:Ureduce = U( : , 1:k); 其中Ureduce为n*k的矩阵

通过了上述4步获得了投影矩阵Ureduce,利用Ureduce就能够获得投影后的样本值

为k*1的向量)

下面总结在matlab中实现PCA的所有算法(假设数据已被中心化)

Sigma = (1/m) * X' * X;    % compute the covariance matrix

[U,S,V] = svd(Sigma);      % compute our projected directions

Ureduce = U(:,1:k);        % take the first k directions

Z = Ureduce' * X;          % compute the projected data points

10.2.3 Choosing the Number of Principal Components

如何选择k(又称为主成分的个数)的值?

首先,试想咱们可使用PCA来压缩数据,咱们应该如何解压?或者说如何回到本来的样本值?事实上咱们能够利用下列等式计算出原始数据的近似值Xapprox:

Xapprox = Z * Ureduce (m*n = m*k * k*n )

天然的,还原的数据Xapprox越接近原始数据X说明PCA偏差越小,基于这点,下面给出选择k的一种方法:

结合PCA算法,选择K的算法总结以下:

这个算法效率特别低。在实际应用中,咱们只需利用svd()函数,以下:

10.2.4 Advice for Applying PCA

  1. PCA一般用来加快监督学习算法。
  2. PCA应该只是经过训练集的特征量来获取投影矩阵Ureduce,而不是交叉检验集或测试集。可是获取到Ureduce以后能够应用在交叉检验集和测试集。
  3. 避免使用PCA来防止过拟合,PCA只是对特征量X进行降维,并无考虑Y的值;正则化是防止过拟合的有效方法。
  4. 不该该在项目一开始就使用PCA: 花大量时间来选择k值,极可能当前项目并不须要使用PCA来降维。同时,PCA将特征量从n维降到k维,必定会丢失一些信息。
  5. 仅仅在咱们须要用PCA的时候使用PCA: 降维丢失的信息可能在必定程度上是噪声,使用PCA能够起到必定的去噪效果。
  6. PCA一般用来压缩数据以加快算法,减小内存使用或磁盘占用,或者用于可视化(k=2, 3)。

 

参考:《机器学习》  周志华

相关文章
相关标签/搜索