博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模式识别之 MDS Multidimensional Scaling 多维尺度法 分析及Matlab实现
阅读量:4124 次
发布时间:2019-05-25

本文共 1230 字,大约阅读时间需要 4 分钟。

在模式识别中,我们会考虑到距离distance的问题,就是一个样本和另一个样本在空间中的距离。根据距离的大小来判断分类。那么,也存在这样的一类问题:我们只知道空间中的点(样本)的距离,那么怎么来重构这些点的相对位置呢?

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

怎么做?

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

下面Step By Step介绍MDS如何来求解这个问题。

Step 1:问题重述

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

大家可以看wikipedia上的问题描述,这里直接截图好了:

Step 2:通过矩阵的方法求解

大家也看到wiki最后说的solution用eigendecompositions 就是特征值分解。

这里就详细说明一下是怎么做的。

转4张MDS的ppt(来源于自己上课老师的ppt):

解释一下其实很简单:

1)构造了一个矩阵T,然后发现T这个矩阵可以完全由D计算出来

2)T这个矩阵可以做分解啊,那么里面特征值如果大于等于0,就可以开根号。

看这个公式:

U是特征向量,中间那个是特征值的矩阵。

这样的话X就能由选取的几个特征值和特征向量重构出来(这同时也是一种降维的方式)

Step 3:具体Matlab实现

直接转了上课给的例子,例子是知道英国几个城市的相对距离,重构出其相对位置。

Matlab代码:

clc;clear all;close all;%distance matrix for: London, Cardiff, Birmingham, Manchester, York, and%Glasgow.d=[0,411,213,219,296,397;...    411,0,204,203,120,152;...    213,204,0,73,136,245;...    219,203,73,0,90,191;...    296,120,136,90,0,109;...    397,152,245,191,109,0];n=size(d,1);t=zeros(n,n);for i=1:n    for j=1:n        t(i,j)=-0.5*(d(i,j)^2 -1/n*d(i,:)*d(i,:)' -1/n*d(:,j)'*d(:,j) +1/n^2*sum(sum(d.^2)));    endend[V,D] = eig(t)X=V(:,1:2)*D(1:2,1:2).^(1/2);scatter(-X(:,2),X(:,1));axis([-300,300,-300,300]);
Matlab得到的效果:

OK,MDS就这样吧!

你可能感兴趣的文章
python __future__
查看>>
MySQL Tricks1
查看>>
python 变量作用域问题(经典坑)
查看>>
pytorch
查看>>
pytorch(三)
查看>>
pytorch(5)
查看>>
ubuntu相关
查看>>
C++ 调用json
查看>>
nano中设置脚本开机自启动
查看>>
动态库调动态库
查看>>
Kubernetes集群搭建之CNI-Flanneld部署篇
查看>>
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>