流行学习
流行学习(manifold learning)是一类借鉴了拓扑流行概念的降维方法。“流行”是在局部与欧式空间同胚的空间。换言之,它在局部具有欧式空间的性质,能用欧式距离来进行距离计算。
这就很有灵性了!若低维空间能嵌入到高维空间中去,则可以很容易的进行降维。
等度量映射
等度量映射认为高维空间的直线距离,并不能很好的表现样本之间的距离。如下图所示:
高维空间中的AB直线距离并不准确,反而绿色的线的长度作为长度看起来更靠谱。这个低维嵌入流行上两点的距离是“测地线”(geodesic)距离。
怎么计算测地线距离呢?我们可以对于每一个点基于欧式距离找出其临近点,然后就能建立一个近邻连接图,图中近邻点之间存在连接,非近邻点不存在连接。于是计算测地线距离的问题,就变换为计算近邻图上两点之间的最短路径问题(这是一个很好的近似~)。
这里有著名算法Dijkstra或Floyd算法。
Dijkstra
找了个动图 自行感受把~
Floyd
Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。
算法思想原理:
Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)
从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。所以,我们假设Dis(i,j)为节点u到节点v的最短路径的距离,对于每一个节点k,我们检查Dis(i,k) + Dis(k,j) < Dis(i,j)是否成立,如果成立,证明从i到k再到j的路径比i直接到j的路径短,我们便设置Dis(i,j) = Dis(i,k) + Dis(k,j),这样一来,当我们遍历完所有节点k,Dis(i,j)中记录的便是i到j的最短路径的距离。
算法描述:
a.从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
b.对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。
之后就变成普通的低维嵌入了。
度量学习
之前的种种降维,我们都可以看出其实就是希望找到一个合适的低维空间,在此空间中进行学习能比原始空间性能更好。事实上,每个空间对应了在样本属性上定义的一个距离度量,而寻找合适的空间,实质上就是在寻找一个合适的距离度量。那么,为何不直接尝试“学习”出一个合适的距离度量呢?这就是度量学习的基本动机。
观察欧式距离: