多尺度变换(Multidimensional Scaling ,MDS)详解

一、基本思想

        MDS(Multidimensional Scaling ,MDS多维尺度变换)是一种经典的降维算法,其基本思想是通过保持数据点之间的距离关系,将高维数据映射到低维空间中。

具体来说,MDS算法的基本步骤如下:

1、构建距离矩阵:首先,我们需要计算原始空间中数据点之间的距离。常用的距离度量方法包括欧几里得距离、Minkowski距离等。通过计算每对数据点之间的距离,我们可以构建一个距离矩阵。
2、中心化距离矩阵:为了进一步处理距离矩阵,我们需要对其进行中心化处理,使得数据点相对于原点对称。
3、计算内积矩阵:通过中心化距离矩阵,我们可以计算内积矩阵B。内积矩阵表示数据点之间的内积关系,可以用于进一步分析数据的结构。
4、计算特征值和特征向量:在得到内积矩阵B后,我们需要计算其特征值和特征向量。特征值表示数据的主要变化方向,特征向量表示对应方向上的大小。我们将选取最大的k个特征值及其对应的特征向量,作为降维后的k维空间的基。
5、计算降维后的坐标:将原始数据投影到选定的k维基上,我们可以得到降维后的坐标。

      通过上述介绍,可以知道,MDS可以将原始数据维度下降到任意维度。

二、MDS算法示例

       让我们用一个关于水果口味的例子来说明MDS算法的原理。

      假设有5种水果:苹果(A)、香蕉(B)、橙子(C)、葡萄(D)和菠萝(E)。我们对这些水果进行了甜度(Sweetness)、酸度(Sourness)和多汁程度(Juiciness)的评分。评分数据如下:

A:(6,4,5)
B:(8,1,3)
C:(5,7,6)
D:(7,3,4)
E:(4,6,8)

我们希望通过MDS算法将这些三维评分数据降维到二维空间,以便更直观地分析水果之间的口味关系。

步骤1:计算距离

我们可以使用欧氏距离(也可以用其他距离计算方法)来计算水果之间的距离。计算结果如下:

A-B: 4.69
A-C: 3.74
A-D: 2.45
A-E: 3.32
B-C: 6.56
B-D: 3.32
B-E: 6.56
C-D: 5.29
C-E: 2.45
D-E: 5.29

步骤2:构建距离矩阵

将计算出的距离整合成一个距离矩阵D

    A      B     C     D      E
A   0.00  4.69  3.74  2.45  3.32B   4.69  0.00  6.56  3.32  6.56C   3.74  6.56  0.00  5.29  2.45D   2.45  3.32  5.29  0.00  5.29E   3.32  6.56  2.45  5.29  0.00

步骤3:中心化距离矩阵

我们需要计算中心化矩阵H。数据点的数量n为5。因此,我们可以得到:

I=[1 0 0 0 00 1 0 0 00 0 1 0 00 0 0 1 00 0 0 0 1]
L=[11111]
H=I-(1/5)*L*L^T
=[0.8  -0.2  -0.2  -0.2  -0.2-0.2 0.8   -0.2  -0.2  -0.2-0.2 -0.2  0.8   -0.2  -0.2-0.2 -0.2  -0.2  0.8  -0.2-0.2 -0.2  -0.2  -0.2  0.8]

步骤4:计算内积矩阵

接下来,我们需要计算内积矩阵B。首先,我们需要计算距离矩阵D的平方:

D.^2=[0.00  21.98  13.99  6.00  11.0221.98 0.00   43.03  11.02 43.0313.99 43.03  0.00   28.00 6.006.00  11.02  28.00  0.00  28.0011.02 43.03  6.00   28.00 0.00]

然后,我们用中心化矩阵H和距离矩阵D的平方计算内积矩阵B:

B=-0.5*H*D.^2*H=[2.12  -2.27  -1.07  1.12  0.11-2.27 15.33  -8.99  5.21  -9.29-1.07 -8.99  9.72  -6.07  6.421.12  5.21   -6.07  6.12  -6.370.11  -9.29  6.42   -6.37  9.13]

步骤5:计算特征值和特征向量

我们需要计算内积矩阵B的特征值和特征向量。我们得到了如下特征值和特征向量:

特征值:lamda1=32.32  lamda2=6.39
特征值lamda1对应的特征向量V1=[-0.02 0.63 -0.48 0.36 -0.49]
特征值lamda2对应的特征向量V2=[-0.53 0.59 0.33 -0.50 0.10]

我们选取最大的两个特征值λ1和λ2,以及对应的特征向量v1和v2,作为降维后的二维空间的基。

步骤6:计算降维后坐标

我们将原始数据投影到选定的二维基上,计算新坐标。首先,构建特征向量矩阵V和特征值矩阵Λ的平方根:

V=[-0.02  -0.530.63   0.59-0.48  0.330.36   -0.50-0.49  0.10]
对角矩阵A^0.5=[sqrt(32.32)      00        sqrt(6.39)]

然后,我们计算降维后的坐标:新坐标 = A * A^(1/2)

新坐标=[-0.11   -1.333.60    1.50-2.76   0.842.02   -1.26-2.76   0.25]

最后,我们得到了降维后的二维坐标:

苹果(A):(-0.11, -1.33 )
香蕉(B):(3.60, 1.50)
橙子(C):(-2.76, 0.84 )
葡萄(D):(2.02, -1.26 )
菠萝(E):(0.36, 2.89)

三、基于MATLAB的MDS示例代码

MATLAB中自带降维函数cmdscale,实现代码如下:

clc;
clear;
data=[0.0,4.69,3.74,2.45,3.32;4.69,0.0,6.56,3.32,6.56;3.74,6.56,0.0,5.29,2.45;2.45,3.32,5.29,0.0,5.29;3.32,6.56,2.45,5.29,0.0];
Y=cmdscale(data);

如果将数据降维为2维,则取前2列,结果如下:

如果按照上述原理,编写程序,代码如下:

D=[0.0,4.69,3.74,2.45,3.32;4.69,0.0,6.56,3.32,6.56;3.74,6.56,0.0,5.29,2.45;2.45,3.32,5.29,0.0,5.29;3.32,6.56,2.45,5.29,0.0];I=[1,0,0,0,0;0,1,0,0,0;0,0,1,0,0;0,0,0,1,0;0,0,0,0,1];
L=[1;1;1;1;1];
L*L';
H=I-(0.2)*L*L';
D2=D.^2;
B=-0.5*H*D.^2*H;
[v,d]=eig(B);
lamda1=d(1,1);
lamda2=d(2,2);
duijiaojuzhen=[sqrt(lamda1),0;0,sqrt(lamda2)];
V=[v(:,1),v(:,2)];
zuobiao=V*duijiaojuzhen

四、总结

下面是一个关于MDS算法优缺点的表格:

MDS的优点MDS的缺点
计算相对比较容易而且不需要提供先验知识。当数据量较大时,运算时间可能较长。
在降维过程中尽量保持数据点之间的距离关系,有助于挖掘数据中的结构信息,适用于各种类型的数据,如距离、相似性、关联性等。各个维度的地位相同,无法区分不同维度的重要性。

参考博客:【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/293986.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cocos2dx-lua ScrollView[三]高级篇

一.概述 本文缩写说明:sv ScrollView, cell代表ScrollView的一个子节点 本文介绍sv的一种封装类库,来实现快速创建sv,有如下几个优点: 1.item的位置通过参数控制,提高开发效率 2.免去了调用sv的API,提…

Leetcode 322. 零钱兑换

心路历程: 这道题和上一道完全平方数的和基本上一摸一样,甚至比上一道题还简单,基于dp的建模: 状态:当前的目标总金额 动作:选哪一个硬币 返回值:凑成该目标总金额的最少硬币个数 这道题如果硬…

计算机网络数据链路层知识总结

物理层知识总结传送门 计算机网络物理层知识点总结-CSDN博客 功能 功能概述 一些基本概念 结点:主机、路由器链路﹔网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。数据链路︰网络中两个结点之间的逻辑通道&a…

红米手机Redmi 不会自动弹出USB调试选项,如何处理?(红米小米均适用)

参考: 红米手机Redmi 不会自动弹出USB调试选项,如何处理?(红米小米均适用) - 知乎 以红米9A为例; 【设置】菜单进入后,找到【我的设备】, 选择【全部参数】, 对准miui版…

shell脚本发布docker springboot项目示例

docker、git、Maven、jdk8安装略过。 使git pull或者git push不需要输入密码操作方法 约定: 路径:/opt/springbootdemo, 项目:springbootdemo, 打包:springbootdemo.jar, docker容器名字&#x…

LeetCode_33_中等_搜索旋转排序数组

文章目录 1. 题目2. 思路及代码实现详解&#xff08;Python&#xff09;2.1 二分查找 1. 题目 整数数组 n u m s nums nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c; n u m s nums nums 在预先未知的某个下标 k &#xff08; 0 < k…

两分钟1200帧的长视频生成器StreamingT2V来了,代码将开源

两分钟1200帧的长视频生成器StreamingT2V来了&#xff0c;代码将开源 广阔的战场&#xff0c;风暴兵在奔跑…… prompt&#xff1a;Wide shot of battlefield, stormtroopers running… 这段长达 1200 帧的 2 分钟视频来自一个文生视频&#xff08;text-to-video&#xff09…

Caddy之静态站点应用场景

一、背景与介绍 无意之中看到公司部门的软件介质下载站点不是使用Nginx部署&#xff0c;而是使用Caddy。就比较好奇了&#xff0c;这个Caddy是个什么东西? 为啥他们没用Nginx呢&#xff0c;带着好奇心搜索了一下相关资料。 官方解释: Caddy is a powerful, extensible platfo…

谈谈MVCC机制

在MySQL中&#xff0c;MVCC&#xff08;多版本并发控制&#xff09;是InnoDB存储引擎使用的并发控制机制。它提供对数据的并发访问&#xff0c;并确保多用户环境中数据的一致性和隔离性。 InnoDB通过“Undo log”存储每条记录的多个版本&#xff0c;提供历史记录供读取&#x…

基于javaweb宠物领养平台管理系统设计和实现

基于javaweb宠物领养平台管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…

Php_Code_challenge12

题目&#xff1a; 答案&#xff1a; 解析&#xff1a; 字符串拼接。

深度学习| DiceLoss解决图像数据不平衡问题

图像数据不平衡问题 图像数据不平衡&#xff1a;在进行图像分割时&#xff0c;二分类问题中&#xff0c;背景过大&#xff0c;前景过小&#xff1b;多分类问题中&#xff0c;某一类别的物体体积过小。在很多图像数据的时候都会遇到这个情况&#xff0c;尤其是在医学图像处理的…

燃气官网安全运行监测系统-阀井燃气监测仪-旭华智能

近年来&#xff0c;燃气爆炸事故频发&#xff0c;造成了重大人员伤亡和财产损失。这也再次为我们敲响警钟&#xff0c;燃气是我们日常生活中不可或缺的能源&#xff0c;但其潜在的危险性也是不容小觑。因此在重要节点加装燃气阀井气体监测仪&#xff0c;并将数据上传到系统平台…

渐变颜色作图

clear clc close all % 生成 x 值 x linspace(0, 5, 1000); % 计算对应的 y 值&#xff08;二次函数分布&#xff09; y x .^ 2; % 添加一些随机噪声 y y randn(size(y)); clinspace(1,10,length(x)); arry1[x,y]; arry2sortrows(arry1,2,descend); arry3[arry2,c]…

vue 文件下载

1.返回路径下载 注: 针对一些浏览器无法识别的文件格式&#xff08;如pdf、xls、ppt&#xff09;。可以直接在地址栏上输入URL即可触发浏览器的下载功能。 情况1 //地址栏输入文件URLwindow.location.href URLwindow.open(URL) 注:该方式将下载逻辑放在后端处理&#xff0c…

pyqt 创建右键菜单栏

class MainModule(QMainWindow, Ui_MainWindow):def __init__(self):super().__init__(parentNone)self.setupUi(self)# 允许出现菜单栏self.tableWidget.setContextMenuPolicy(Qt.CustomContextMenu)# 对空间添加右键菜单栏处理 self.tableWidget.customContextMenuRequested.…

学习vue3第十二节(组件的使用与类型)

1、组件的作用用途 目的&#xff1a; 提高代码的复用度&#xff0c;和便于维护&#xff0c;通过封装将复杂的功能代码拆分为更小的模块&#xff0c;方便管理&#xff0c; 当我们需要实现相同的功能时&#xff0c;我们只需要复用已经封装好的组件&#xff0c;而不需要重新编写相…

Arcgis获取乡镇矢量

现有全中国乡镇矢量边界&#xff08;2023年&#xff09;&#xff0c;如何获取其中的自己所需的子区域&#xff08;一个小镇&#xff09;呢&#xff1f; 可以先去查一下自己的镇代码&#xff0c;我查的是东马圈镇代码 打开分析工具-提取分析-筛选 刚刚记下了FID 验证一下&am…

跑腿小程序|基于微信小程序的跑腿平台小程序设计与实现(源码+数据库+文档)

跑腿平台小程序目录 目录 基于微信小程序的跑腿平台小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、跑腿任务管理 3、任务类型管理 4、公告信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

LeetCode226:反转二叉树

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 解题思想 使用前序遍历和后序遍历比较方便 代码 class Solution { public:TreeNode* invertTree(TreeNode* root) {if (root nullptr) return root;swap(root->left, root…