MDS算法及其matlab实现

问题背景:

在求解MTSP问题的时候,因为已知的为各个巡检点之间路径耗时长度,而这个具体描述采用无向图结构可以很好的描述,在matlab中通过函数(graphallshortestpaths)可以得到任意两个巡检点之间的距离矩阵

 1 %%得到任意两个巡检点之间的路径时间长度
 2 %W表示从一个巡检点到另一个巡检点的路上花费时间
 3 W=[2    1    3    5    1    1    1    4    2    2    1    5    1    2    3    2    6    2    7    2    2    2    6    3    1    2    2    2    1    1    3];
 4 %x表示出发的巡检点的编号
 5 x=[1    2    2    2    3    3    4    4    5    6    6    6    8    9    9    10    10    11    11    12    13    15    15    16    17    19    20    21    22    23    25];
 6 %y表示到达的巡检点的编号
 7 y=[2    3    4    19    5    6    21    23    7    8    14    10    17    24    25    11    12    13    15    15    16    18    26    18    25    20    22    22    23    24    26];
 8 A=26;B=31;
 9 m=A;n=A;nzmax=B;
10 DG=sparse(x,y,W,m,n);
11 UG=tril(DG+DG');%得到无向连通图矩阵
12 D2D=graphallshortestpaths(UG,'directed',false);

。得到距离矩阵以后我们还想根据距离矩阵求出每个巡检点的坐标位置矩阵。也就是说现在问题转换为这样的一类问题:我们只知道空间中的点(样本)的距离,那么怎么来重构这些点的相对位置呢?

显然欧式距离是最直观的距离,那么我们就会想使用欧式距离来进行计算重构,我们还希望能够在不同维度上进行重构,比如2维或者3维。

怎么做?

有这么个解决方法叫做MDS 全称为 Multidimensional Scaling

MDS解决的问题包括:

当n个对象(object)中各对对象之间的相似性(或距离)给定时,确定这些对象在低维空间中的表示,并使其尽可能与原先的相似性(或距离)“大体匹配”,使得由降维所引起的任何变形达到最小。多维空间中排列的每一个点代表一个对象,因此点间的距离与对象间的相似性高度相关。也就是说,两个相似的对象由多维空间中两个距离相近的点表示,而两个不相似的对象则由多维空间两个距离较远的点表示。多维空间通常为二维或三维的欧氏空间,但也可以是非欧氏三维以上空间。


MDS算法应用的场景包括:

将高维的原始数据投影到低维矩阵上,使得低维矩阵各点之间的相对距离最大程度的接近于原来的高维矩阵传达的信息。

在模式识别中,已知一个样本和另一个样本在空间的距离,根据空间距离大小进行分类,但是同样我们只是知道空间上这些点之间的距离,那么如何根据距离来重构这些点之间的相对位置呢?

扫描二维码关注公众号,回复: 4029840 查看本文章

算法的核心思想以及实现思路:

step1:问题重述:

我们有这么一个距离矩阵,我们通过这个矩阵计算出点的相对位置矩阵X,使得通过X反过来计算距离矩阵与原距离矩阵D差距最小。所以这是一个最优化问题。

step2:

假设X={x1, x2, ..., xn}是一个n×q的矩阵,n为样本数,q是原始的维度,其中每个xi是矩阵X的一列,xi∈Rq。我们并不知道xi在空间中的具体位置,也就是说对于每个xi,其坐标(xi1, xi2, ... , xiq) 都是未知的。我们所知道的仅仅是the pair-wise Euclidean distances for X,我们用一个矩阵DX来表示。因此,对于DX中的每一个元素,可以写成

 

或者可以写成

 

对于矩阵DX,则有

 

其中,

 

这里的z为

 

现在让我们来做平移,从而使得矩阵DX中的点具有zero mean,注意平移操作并不会改变X中各个点的相对关系。为了便于理解,我们先来考察一下AeeT/n和eeTA/n的意义,其中A是一个n×n的方阵。

 

不难发现AeeT/n中第i行的每个元素都是A中第i行的均值,类似的,我们还可以知道,eeTA/n中第i列的每个元素都是A中第i列的均值。因此,我可以定义centering matrix H如下

 

所以DXH的作用就是从DX中的每个元素里减去列均值,HDXH的作用就是在此基础上再从DX每个元素里又减去了行均值,因此centering matrix的作用就是把元素分布的中心平移到坐标原点,从而实现zero mean的效果。更重要的是,Let D be a distance matrix, one can transform it to an inner product matrix (Kernel Matrix) by K=-HDH/2, 即

 

上一步之所以成立,因为

 

因为BX是一个内积矩阵(Gram Matrix/Kernel Matrix),所以它是对称的,这样一来,它就可以被对角化,即BX=U∑UT。

 而我们的最终目的是find a concrete set of n points (Y) in k dimensions so that the pairwise Euclidean distances between all the pairs in the concrete set Y is a close approximation to the pair-wise distances given to us in the matrix DX i.e. we want to find DY such that

 

Note that after applying the ”double centering” operation to both X and Y,上式服从

 

最终这个问题的解就是Y=U∑1/2。


下面我们首先来演示在MATLAB中计算上述MDS问题的过程,为了展示其原理,下面的代码并不会直接使用MATLAB中内置的用于求解MDS的现成函数。

clear;clc;
%%
%任意两个城市之间的距离矩阵
D=[[0,2,3,5,4,4,6,6,11,9,11,15,13,5,17,15,7,18,7,9,6,8,9,10,8,11],
    [2,0,1,3,2,2,4,4,9,7,9,13,11,3,15,13,5,16,5,7,4,6,7,8,6,9],
    [3,1,0,4,1,1,3,3,8,6,8,12,10,2,14,12,4,15,6,8,5,7,8,9,5,8],
    [5,3,4,0,5,5,7,7,7,10,12,16,14,6,18,16,8,19,7,5,1,3,4,5,9,12],
    [4,2,1,5,0,2,2,4,9,7,9,13,11,3,15,13,5,16,7,9,6,8,9,10,6,9],
    [4,2,1,5,2,0,4,2,7,5,7,11,9,1,13,11,3,14,7,9,6,8,9,9,4,7],
    [6,4,3,7,2,4,0,6,11,9,11,15,13,5,17,15,7,18,9,11,8,10,11,12,8,11],
    [6,4,3,7,4,2,6,0,5,7,9,13,11,3,11,13,1,13,9,11,8,9,8,7,2,5],
    [11,9,8,7,9,7,11,5,0,12,14,14,16,8,12,17,4,14,8,6,6,4,3,2,3,6],
    [9,7,6,10,7,5,9,7,12,0,2,6,4,6,8,6,8,9,12,14,11,13,14,14,9,12],
    [11,9,8,12,9,7,11,9,14,2,0,8,2,8,7,4,10,7,14,16,13,15,16,16,11,13],
    [15,13,12,16,13,11,15,13,14,6,8,0,9,12,2,7,12,4,18,20,17,18,17,16,11,8],
    [13,11,10,14,11,9,13,11,16,4,2,9,0,10,7,2,12,5,16,18,15,17,18,18,13,13],
    [5,3,2,6,3,1,5,3,8,6,8,12,10,0,14,12,4,15,8,10,7,9,10,10,5,8],
    [17,15,14,18,15,13,17,11,12,8,7,2,7,14,0,5,10,2,20,18,18,16,15,14,9,6],
    [15,13,12,16,13,11,15,13,17,6,4,7,2,12,5,0,14,3,18,20,17,19,20,19,14,11],
    [7,5,4,8,5,3,7,1,4,8,10,12,12,4,10,14,0,12,10,10,9,8,7,6,1,4],
    [18,16,15,19,16,14,18,13,14,9,7,4,5,15,2,3,12,0,21,20,20,18,17,16,11,8],
    [7,5,6,7,7,7,9,9,8,12,14,18,16,8,20,18,10,21,0,2,6,4,5,6,11,14],
    [9,7,8,5,9,9,11,11,6,14,16,20,18,10,18,20,10,20,2,0,4,2,3,4,9,12],
    [6,4,5,1,6,6,8,8,6,11,13,17,15,7,18,17,9,20,6,4,0,2,3,4,9,12],
    [8,6,7,3,8,8,10,9,4,13,15,18,17,9,16,19,8,18,4,2,2,0,1,2,7,10],
    [9,7,8,4,9,9,11,8,3,14,16,17,18,10,15,20,7,17,5,3,3,1,0,1,6,9],
    [10,8,9,5,10,9,12,7,2,14,16,16,18,10,14,19,6,16,6,4,4,2,1,0,5,8],
    [8,6,5,9,6,4,8,2,3,9,11,11,13,5,9,14,1,11,11,9,9,7,6,5,0,3],
    [11,9,8,12,9,7,11,5,6,12,13,8,13,8,6,11,4,8,14,12,12,10,9,8,3,0]];
D([1,22],:)=D([22,1],:);
D(:,[1,22])=D(:,[22,1]);
%%
%求各个城市的坐标
DSquare = D.^2;
[N,~]=size(D);
H = eye(N)-ones(N)/N;
K = -0.5*H*DSquare*H;
 
[eigVec, eigVal] = eig(K);
 
Y = eigVec(:,1:2)*sqrt(eigVal(1:2,1:2));%%求解的巡检点的坐标分布情况。

  

猜你喜欢

转载自www.cnblogs.com/Dinging006/p/9943729.html
MDS
今日推荐