Coursera 机器学习(by Andrew Ng)课程学习笔记 Week 8(二)——降维

此系列为 Coursera 网站机器学习课程个人学习笔记(仅供参考)
课程网址:https://www.coursera.org/learn/machine-learning
参考资料:http://blog.csdn.net/MajorDong100/article/details/51104784


一、降维的作用

1.1 数据压缩

数据压缩(Data Compression)不仅能减少数据的存储量,节省了内存和磁盘,还会大大加快学习算法的运行速度。

我们首先来介绍降维(Dimensionality Reduction)。假设我们已经收集了大量数据,其中含有特别多的特征,这里我们只选择其中的两个特征 x1 x2 ,二者都用来表示某一事物的长度, x1 的单位是厘米, x2 的单位是英寸,如下图所示。很明显数据存在冗余,我们可以使用一个特征来表示事物的长度,数据从二维降到一维。当然,实际生产中我们可能不会出现这么低级的问题,这里仅以此来做说明。

工业上的一个问题中可能会有上千个特征,很容易出现冗余。联系到直升机飞行员的例子,这里用 x1 表示飞行员的驾驶技巧,用 x2 表示飞行员对工作的喜爱程度,这两个特征时高度相关的,我们要从这两个特征中提取出一个新的特征 z1 (如pilot attitude)来代替它们。如下图所示,我们找到这样一条直线,每一个数据点在这条直线上的投影作为新的数据点,我们就可以实现二维到一维的降维。通过类似这样的方法,我们就实现了降维。

再给出一个三维降到二维的例子。如下图所示,我们可以将三维坐标系中的数据点投影到一个二维平面上,实现三维到二维的降维。


1.2 可视化数据

下面我们会介绍一种数据降维的应用——可视化数据。

在很多学习算法的应用中,对数据的理解可以帮助我们更好的改善模型,而降维恰好可以帮助我们实现数据的可视化,增进我们对数据的理解。

我们从第一个例子开始。

下面是大量的有关世界不同国家的统计数据集。数据中有很多特征,这对我们观察这些数据造成了很大的困难。我们怎样才能更好地理解这些数据?

如果我们将下面表格中的多个特征降维到2个特征(如下图所示),然后在直角坐标系中画出它们。

上图中坐标系的横轴可以表示一个国家的经济总量,纵轴代表人均经济量,图中的每一个点代表一个国家。如右上侧的那个绿点可能是美国——经济总量世界第一,人均经济量也达到很高的一个数值;最上方的那个绿点可能代表新加坡——经济总量不大(国家太小),但人均量很高。了解了一个国家在这张图上的位置,我们也就知道了这个国家的经济状况。当然我们也可以将横纵坐标变成其他的指标,实现对其他特征的可视化。

一般我们可视化会将数据降到二维或三维,因为更高维度的图像画起来会比较困难。


二、主成分分析(PCA)

在降维问题中最常见的一种算法是主成分分析(Principal Component Analysis,PCA)。下面我们会对这一算法进行详细介绍。

2.1 PCA的工作

如下图所示一个数据集:

我们希望把数据从二维降到一维,也就是找到一条直线,把这些点投影到直线上去,那么怎么找到一条好的直线来投影?下图的红色直线也许是一个不错的选择,因为我们发现这些点到他们对应的投影点之间的距离非常小(即蓝色线段)。

上面的蓝色线段称为“投影误差”。PCA所做的事情就是找到一个低维的面,将数据投影到上面,并使得投影误差最小。在进行PCA之前,我们会先进行均值归一化和特征缩放使得特征 x1 x2 均值为 0

对比红线,我们再来看看另一条直线,如下图粉色直线所示。如果将数据点投影在这条直线上,投影误差会很大,因此,PCA算法会选择红色的直线而不会选择粉色这条。

  • 对于二维降到一维,PCA的目标是找到一个二维向量(u(1)Rn u(1) 的方向是正是负并没有关系),并且最小化投影误差。

    • 对于从 n 维降到 k 维,我们则需要找到 k n 维向量来实现。
    • 如下图所示,左图为二维降到一维,右图为三维降到二维:


      2.2 PCA的算法

      2.2.1 数据预处理
      拿到数据以后,我们一般先进行均值归一化和特征缩放(详见 1.3特征缩放)。

      ① 算出每个特征的均值 μ

      μj=1mmi=1x(i)j

      ② 将每一个数据 x(i)j 都替换成:

      x(i)jμj

      如果每个特征的取值范围不同,我们还要进行特征缩放:

      x(i)jx(i)jμjsj

      μi 是训练数据集中 xi 的平均值, si xi 的取值范围( max(xi)min(xi) ),或者 si xi 的标准差。( x0 不进行上述操作)。

      2.2.2 PCA算法
      PCA所需要求的两个部分分别是投影向量和样本投影后的点,下面我们只介绍求取的过程不展开讲述原理与证明。

      ③ 求解特征的协方差矩阵(Covariance Matrix):

      Σ=1mni=1(x(i))(x(i))T

      ④ 求解特征值和特征向量:

      #Octave
      [U S V]=svd(Sigma)

      svd 表示奇异值分解,Sigma就是第③步求到的协方差矩阵( Σ ),是一个 n×n 的矩阵。求得的矩阵U也是一个 n×n 的矩阵。

      ⑤ 求 URn×n 矩阵的前 k 列,组成 UReduceRn×k,用来投影数据。

      ⑥ 求取降维后的数据 z(i)

      z(i)=(UReduce)Tx(i)

      三、PCA的应用

      3.1 压缩后的数据重建

      前面介绍了使用PCA对数据进行降维,已达到压缩数据提高计算速率的目标,现在我们尝试着从压缩后的数据出发还原数据,注意这里得到的数据是原始数据的近似。我们沿用前面二维降到一维的例子,现在我们尝试着从一维升维到二维。具体的公式是:

      xapprox=UReducez

      如果投影误差能够取到很小很小的值,则会有:

      xxapprox

      3.2 如何选择参数 k

      在PCA算法中,我们把 n 维特征变量降维到 k 维特征变量,这个数字 k 是PCA算法的一个参数,这个数字 k 也被称作主成分的数量,或者说是我们保留的主成分的数量。下面我们就来讲述如何选择这个参数 k

      我们先来看几个有用的概念。

      平均平方映射误差 (Average Squared Projection Error):

      1mmi=1x(i)x(i)approx2

      数据总变差(Total Variance in the data):

      1mmi=1x(i)2

      接下来,我们给出一个计算公式 err:

      我们用这个公式来量化原始数据与降维后数据的差距。若该值不超过 0.01 1% ),我们就可以说“ 99% of variance is retained”。(除了 0.01 ,我们还可以选择 0.05 0.10 )我们可以把err作为选择 k 值得指标:取 k=1,完成一系列降维计算,判断err是否大于等于 0.01 ,若满足则确定该 k 值为最终的 k;若不满足,则 k 1,继续前面的计算直至满足要求。

      显然上面的过程效率非常的低。这里给出了计算err的一种简便方法。PCV求解过程中有这样一个公式

      [U,S,V]=svd(sigma)

      其中的 S 是一个 n×n 的对角矩阵,对角线上是求得的特征值,从上到下依次递减。err可由下面的公式求得:

      err=1ki=1Siini=1Sii

      这样我们就可以只进行一次svd运算,然后依次增加 k ,找出满足 err0.01 的最小 k 值。


      3.3 应用PCA时的一些建议

      假设一条数据中包含 10000 个特征,通过PCA降低到 1000 个特征,无论是在有监督式学习还是在无监督式学习中,这种降维对学习速度的提升是显著的。需要注意的一点是PCA只能在训练集上进行,得到的 Ureduce 同样能应用在交叉验证集和测试集上。

      在前面的学习中,我们知道过多的特征提取会导致过拟合,此时采取的措施是适当的去掉一些特征。而现在的降维恰好减小了特征的数量,那么我们是否可以通过降维来改善过拟合呢?答案是否定的。PCA不能用于解决过拟合问题

      需要注意的一点是,在进行机器学习时,我们首先使用的是原始数据。只有当算法的速度过慢、内存或磁盘不够,或者你有足够的把握确定问题出在原始数据上(此处的问题当然不是指数据的真假问题),这时你才可以考虑降维。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值