吴恩达机器学习之降维

降维应用一:数据压缩(Data Compression)

example1:
吴恩达机器学习之降维

两个特征

x1:一个物体的厘米长度,

x2:同一个物体的英寸长度

1.对于这两个单独的特征,都表示基本长度,我们把数据从二维降到一维,只用一个数字来测量某物体的长度。如果特征数据分为几个组给出,这样就会产生高度冗余的特征。当特征x1被四舍五入到最近的厘米时,X2也会四舍五入到最近的英寸,也样解释了为什么数据不是落在一条直线上,因为在四舍五入的时候,英寸和厘米之间会产生误差。但是我们数据将到一维之后就解决了这样的问题。
吴恩达机器学习之降维

  1. 把所有的数据投影到这条直线上,可以测量出每个样本在线上的位置,建立新的特征z1(需要一个实数表示) ,来表示第一个原始样本X1(需要两个实数表示)。。。等等到第Xm个样本。
    通过投影到这条绿线上,来近似原始的数据集,就可以用一个实数来指定在直线上的位置,即用一个数字来表示样本的位置。
    作用: 可以使内存需求(数据空间)减半。

example2
吴恩达机器学习之降维
在典型的例子中,可能会有1000D降维到100D。此例是将数据从三维降到二维。这些数据集大概都分布在一个平面内,所以这时的降维方法就是把所有数据都投影到一个二维平面里,需要两个数字来确定为位置,然后建立坐标,z1,z2,该样本数据就可以用二维向量Z来表示。

降维应用二:可视化(Data Visualization)

吴恩达机器学习之降维
此例是一些国家的特征,x1(GDP) ,x2(per GDP), 等等,一共50个特征。如果使用降维,都使用50维的特征,来表示一个国家,我们用向量Z来概述这50个数字。通过降维,可以把这些国家在二维平面上表示,来查看不同国家的特征。

吴恩达机器学习之降维
但是降维之后,Z1 ,Z2通常不是具有物理意义的特征。这样就需要把特征画出来,就可以观察得出。见下图。

吴恩达机器学习之降维

降维方法之主成分分析方法(PCA)

介绍
吴恩达机器学习之降维

对这几个数据进行降维,从二维降到一维。也就是找到一条能够将数据投影到上面的直线。 PCA 要做的就是找一个低维的平面(此例中就是这条直线),然后将数据投影到上面,使得原始数据到直线的距离的平方最小,(这个距离也成为投影误差)。
另外,在应用PCA之前,常规的做法是先进行均值归一化和特征规范化,使得特征量X1 , X2 均值为0,并且数值在可比较的范围之内。

PCA(Principal Component Analysis)

步骤:

数据集: x1 , x2 , … , xm 。做归一化,依据数据也可能做特征缩放。
首先 归一化:
吴恩达机器学习之降维
每个特征减取均值 xi = xj - μj ,使每个特征的均值为0。
吴恩达机器学习之降维
从二维降到一维,只需要一个数字表示位置,设为Z (一个一维向量或者1X1矩阵)。
同样的将数据从三维降到二维,Z 即为一个二维向量。
计算Z
将n维数据降到K维,先计算协方差 Σ
吴恩达机器学习之降维

计算Σ的特征向量,[U,S,V] = svd (Sigma)
sigma是一个nxn的矩阵。
svd是 奇异值分解(线性代数的应用),满足正定矩阵的性质。如果用matlab编程,利用线性代数库,计算svd即可, SVD输出的 u ,s v 三个矩阵,用到的是u矩阵。
u=[u1u2...um]nn u=\left[ \begin{matrix} \vdots & \vdots & \vdots \\ u1 & u2 &... um \\ \vdots & \vdots & \vdots \\ \end{matrix} \right] _{n*n}
如果是降到K维,那么只需要取前k列,即为投影的方向。得到的是降维之后的矩阵。
uk=[u1u2...uk]nk u^k=\left[ \begin{matrix} \vdots & \vdots & \vdots \\ u1 & u2 &... uk \\ \vdots & \vdots & \vdots \\ \end{matrix} \right] _ {n*k}

Z=[u1u2...uk]TX(i) Z=\left[ \begin{matrix} \vdots & \vdots & \vdots \\ u1 & u2 &... uk \\ \vdots & \vdots & \vdots \\ \end{matrix} \right] ^T*X^{(i)}
=[u1TukT]knXn1(i)=Zk1 =\left[ \begin{matrix} \cdots & u1^T & \cdots \\ \cdots & \vdots & \cdots\\ \cdots & uk^T & \cdots \\ \end{matrix} \right]_{k*n} *X^{(i)}_{n*1}=Z_{k*1}
将Sigma向量化 公式: Sigma=(1/m)XTX\ Sigma=(1/m)*X^T *X