在我们解决机器学习的问题时 , 常常要从维度上做文章。有时候我们需要增维 , 比如 kernel methods 就可以在高纬度上重构样本从而解决样本在低维上不的线性不可分问题 ( 高斯 kernel 甚至可以把样本在无穷维上展开 ) 。有时候我们又需要降维 , 因为我们是三维生物 , 我们最多只能理解三维世界 , 所以想要看看手头的数据 , 就必须把它们降到三维以内 ; 另外 , 往往很多特征没什么用处 , 我们可以可以通过降维或者特征工程的手段来把它们剔除 , 降低计算复杂度。

从信息论的角度上讲增维并不会为我们带来更多的信息 , 因为我们只是做了简单的投射 ; 但是降维确实会令我们损失信息 , 歌者文明就是向银河系丢了一个二向箔把我们从三维降低到了二维 , 从而消灭了太阳系所有的生命 ( 三体书里说降维后的银河系还是保持了全息的样子 , 那副银河巨画包含了三维银河系的全部信息 , 笔者表示理解不能 ) 。降维肯定会损失信息 , 那要怎么为我们的数据选择一款适合的降维算法来减小损失的信息呢 ? 本文尝试对比一些经典的降维算法以及它们的应用场景来对它们做一个直观的介绍 , 我们不但会谈到数学原理 , 也会尽量以图表的形式把算法展示给大家。废话不多说 , 先上图。

降维三部曲(一)
总体来说 , 我们将会涉及 8 个算法 , 大致可以分为线性算法与非线性算法 , 非线性算法又有侧重于整体信息的跟侧重于局部信息的。然后我们将尝试利用这些降维算法对下面这副蛋卷一样的图 ( swiss roll ) 做维度打击 , 通过对比降维打击后的蛋卷来 , 对比算法们的性能。
降维三部曲(一)
PCA ( principle component analysis ) 最为简单粗暴 , 作者认为当我们考虑降维时 , 首先应该尝试的就是 PCA。那么 PCA 背后的数学原理是什么呢 ? 顾名思义 ,PCA 希望可以找到那 些最重要的维度 ( 假设 k 个重要维度 ,k<m),然后把X映射到这些重要维度上,用这k个映射系数作为新的feature于是样本们就被降低到了k维上。

假设我们有 N 个样本 , 每个为 m 维 , 即 , 怎样定义重要维度呢 ? 假设 u ( 一个 m 维向量 ) 是一个重要维度 , 令 u 把 X 射成 这样的 N 个点 ,u 之所以重要 , 因为新生成的 N 个点的方差是最大的 , 于是样本间的差异性就被保存了下来 , 我们还是可以在新的样本空间里做聚类 , 分类等操作。所以 PCA 背后的优化问题其实是 ,

降维三部曲(一)
所以 PCA 的一般步骤是 :

对样本数据的协方差矩阵 ( covariance matrix ) 做 SVD 分解 ,

特征值 ( eigen values ) 排序

top ­ k 特征值对应的特征向量 ( eigen vectors ) 找出来

把 X 映射到这 k 个特征向量上

这就是 PCA 降维。经过 PCA 打击之后的蛋卷就成了这样 :

降维三部曲(一)
Factor Analysis: FA 的思想与 PCA 其实很相似 , 假设高维度上的观测结果 X 其实是由低维 度上的 factors 来支配的。打个比方 , 笔者身边有一大群妹子 , 每个妹子都有很多的参数 , 例 如 , 身高 , 体重 , 肺活量 , 皮肤 , 眼睛大小 , 脸蛋形状 , 发型 , 性格等 8 个参数 ... 笔者经过大 量的调查研究把每个妹子在每个 feature 上都打了从 1 ­ 到 10 的分数 ( 10 分最高 ) , 然后就在纠 结 , 到底要对哪个下手呢 ? 于是就想把妹子们做个 ranking, 但是只能 rank 一维的数据呀 , 于 是就在想能不能把妹子的 8 个 feature 抽象成一个终极打分 ­­ 美貌。于是做了如下的假设 :

假设每个妹子都有一个终极打分 z ( 一维 ) , 这个分数将会通过一个固定的映射到八个维度 上 , 然后加上 bias 修正 , 再加上一些误差 ( 误差保证尽管俩妹子得分一样 , 也可以春兰秋菊 各有千秋 ) , 于是就得到了八维打分 X。这个过程的原理可以让下面这俩图来解释一下 : 首先强行把一维的数据搬到二维平面的一条直线上 , 再加上噪声 ,bias, 于是就 得到了红圈里的一个二维的数据 , 把二维想象成八维就重构了妹子们的参数。

降维三部曲(一)
有了这个模型 , 我们就可以就用 EM ( expectation ­ maxminization ) 来估算 , 估算过程比较复杂 , 一句话讲就是通过调整这些参数 , 令 P ( X ) 出现的概率最大。 模型确定下来 , 就可以算出妹子们的最终得分 z, 排个序 , 就可以从容地选择了 ! 继续看下蛋卷图
降维三部曲(一)
线性的算法基本就是这个样子 , 可以看到线性的算法能把最重要的维度们找出来 , 蛋卷的形状被保全了下来 , 但是对很多应用场景来说线性的算法然并卵 , 因为如果原来的数据线性不可分降维了之后还是不可分。于是就需要这些 nonlinear 的算法 , 其实这些非线性算法像 LLE, Laplacian EM 都属于流形学习 ( manifold ­ learning ) 。何为流形呢 ? 笔者的理解就是尽管一个模型很复杂很 nonlinear, 但是它的一个很小的局部还是可以近似成一个线性模型的。比如说 , 地球是三维的 , 是个球 , 但是在我们渺小的人类视野所及之内地球是平的 , 是个 2D 平面 , 我们也可以把地图做成二维平面的样子 , 然后由一张张二维地图线性地拼接成世界地图。

LLE ( Local Linear Embedding ) . LLE 可以说是流形学习里面最有代表性的一个算法 , 最早由 NYU 的 Sam Roweis 教授发表在 Science 上 , 到现在已经有快 1 万的引用了 , 可见 LLE 这个算法是多么的有影响力 ( P.S. 才华横溢的 Roweis 教授于 2010 年跳楼自杀 , 享年 38 岁 , 原因是受不了他老婆的闹腾 , 英年早逝太可惜了 ) 。

LLE 的主要思想着眼于流形局部的结构 , 对每一个样本点 x, 找出它的 top ­ k 最近邻居 , 然后把 x 用邻居们线性表示。然后尝试到低维空间构造 y , 令 y 可以被邻居们用同样的线性规则表示。这样以来 , 高维里面的流形结构到了低维里面仍然会被保留下来。按照这个思想 ,LLE 由三个主要步骤组成 :

找邻居 : 对于每一个样本 , 找到 top ­ k 最近邻 ( 欧式距离 )

找到重构系数 : 用邻居们重构 并且最小化重构误差 , 用类似这样的优化问题

降维三部曲(一)

找低维点 : 令他们相互之间都可以用上个步骤计算出来的系数线性表示 , 用类似这样的优化问题

降维三部曲(一)

LLE 的思想就是这样 , 值得注意的是找低维点的那个优化问题最后又变成了 SVD 问题 ( SVD 真的是无处不在 , 而且真的非常重要 , 后面还会经常见到 ) 。经过 LLE 打击后的蛋卷长这样 :

降维三部曲(一)

与上两个蛋卷相比 , LLE 蛋卷像是展开 , 那俩蛋卷像是压扁,这时候本来线型不可分的点变成了线型可分。 先写这三个吧 , 剩下的算法们下回分解 ~


本文转载自:http://www.myzaker.com/article/589d266b1bc8e0527000000c/

相关文章: