在我们解决机器学习的问题时 , 常常要从维度上做文章。有时候我们需要增维 , 比如 kernel methods 就可以在高纬度上重构样本从而解决样本在低维上不的线性不可分问题 ( 高斯 kernel 甚至可以把样本在无穷维上展开 ) 。有时候我们又需要降维 , 因为我们是三维生物 , 我们最多只能理解三维世界 , 所以想要看看手头的数据 , 就必须把它们降到三维以内 ; 另外 , 往往很多特征没什么用处 , 我们可以可以通过降维或者特征工程的手段来把它们剔除 , 降低计算复杂度。
从信息论的角度上讲增维并不会为我们带来更多的信息 , 因为我们只是做了简单的投射 ; 但是降维确实会令我们损失信息 , 歌者文明就是向银河系丢了一个二向箔把我们从三维降低到了二维 , 从而消灭了太阳系所有的生命 ( 三体书里说降维后的银河系还是保持了全息的样子 , 那副银河巨画包含了三维银河系的全部信息 , 笔者表示理解不能 ) 。降维肯定会损失信息 , 那要怎么为我们的数据选择一款适合的降维算法来减小损失的信息呢 ? 本文尝试对比一些经典的降维算法以及它们的应用场景来对它们做一个直观的介绍 , 我们不但会谈到数学原理 , 也会尽量以图表的形式把算法展示给大家。废话不多说 , 先上图。
假设我们有 N 个样本 , 每个为 m 维 , 即 , 怎样定义重要维度呢 ? 假设 u ( 一个 m 维向量 ) 是一个重要维度 , 令 u 把 X 射成 这样的 N 个点 ,u 之所以重要 , 因为新生成的 N 个点的方差是最大的 , 于是样本间的差异性就被保存了下来 , 我们还是可以在新的样本空间里做聚类 , 分类等操作。所以 PCA 背后的优化问题其实是 ,
对样本数据的协方差矩阵 ( covariance matrix ) 做 SVD 分解 ,
特征值 ( eigen values ) 排序
top k 特征值对应的特征向量 ( eigen vectors ) 找出来
把 X 映射到这 k 个特征向量上
这就是 PCA 降维。经过 PCA 打击之后的蛋卷就成了这样 :
假设每个妹子都有一个终极打分 z ( 一维 ) , 这个分数将会通过一个固定的映射到八个维度 上 , 然后加上 bias 修正 , 再加上一些误差 ( 误差保证尽管俩妹子得分一样 , 也可以春兰秋菊 各有千秋 ) , 于是就得到了八维打分 X。这个过程的原理可以让下面这俩图来解释一下 : 首先强行把一维的数据搬到二维平面的一条直线上 , 再加上噪声 ,bias, 于是就 得到了红圈里的一个二维的数据 , 把二维想象成八维就重构了妹子们的参数。
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/