【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

这篇具有很好参考价值的文章主要介绍了【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇是继PCA和KPCA、t-SNE三种降维方法后的第4篇。

在大数据时代,我们不断面临高维度数据的挑战。为了更好地理解这些数据,MDS算法应运而生。本文将详细介绍MDS算法的原理、步骤及其应用场景,帮助你深入了解这个强大的降维工具。

一、关于MDS算法

多维尺度变换(Multidimensional Scaling,简称MDS)算法是一种数据降维和可视化方法,最早起源于心理学领域,它能够将高维度数据转换到低维度空间(如二维或三维),在保持数据点间距离关系的同时,让我们能够直观地观察和分析数据。在20世纪50年代至60年代,研究人员开始尝试使用MDS来解决心理学实验中的数据分析问题,主要用于分析个体之间的相似性和差异性。随着研究的深入和方法的完善,MDS逐渐被广泛应用于社会科学、生物学、信息科学等多个领域。

MDS算法的核心思想是使用距离矩阵来表示数据点之间的相似性或关联性。在实际问题中,我们可能需要分析不同类型的数据,通过将这些数据转换为距离矩阵,我们可以利用MDS算法来挖掘数据中的结构信息和潜在关系。

MDS算法通过将高维数据降维到二维或三维空间,使得数据的可视化分析变得更加直观。此外,在降维过程中,MDS尽量保持数据点之间的距离关系,从而有助于挖掘数据中的真实结构。

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

降维打击·来自https://www.zcool.com.cn/work/ZMzc1MjcwNjQ=.html

二、MDS的原理是什么?

在MDS算法中,降维映射的原理是通过保持原始空间中数据点之间的相对距离来将数据从高维空间映射到低维空间。为了便于理解,我们将降维映射过程分为以下几个步骤:

  1. 构建距离矩阵:首先,我们需要计算原始空间中数据点之间的距离。常用的距离度量方法包括欧几里得距离、Minkowski距离等。通过计算每对数据点之间的距离,我们可以构建一个距离矩阵。
  2. 中心化距离矩阵:为了进一步处理距离矩阵,我们需要对其进行中心化处理,使得数据点相对于原点对称。中心化矩阵的计算方法是:I - (1/n) *i*i^T,其中I是单位矩阵,n是数据点的数量,i是一个全1的n维向量,i^T代表对该向量转置。
  3. 计算内积矩阵:通过中心化距离矩阵,我们可以计算内积矩阵B。内积矩阵表示数据点之间的内积关系,可以用于进一步分析数据的结构。内积矩阵B可以通过中心化矩阵H和距离矩阵D的平方形式计算得到:B = -1/2 * H * D^2 * H
  4. 计算特征值和特征向量:在得到内积矩阵B后,我们需要计算其特征值和特征向量。特征值表示数据的主要变化方向,特征向量表示对应方向上的大小。我们将选取最大的k个特征值及其对应的特征向量,作为降维后的k维空间的基。
  5. 计算降维后的坐标:将原始数据投影到选定的k维基上,我们可以得到降维后的坐标。具体计算方法为:新坐标 = 特征向量矩阵 * 特征值矩阵的平方根。这样,我们就得到了降维后的数据表示。

虽然步骤看起来有点复杂,但是实际实现还是很简单的,下面距离说明一下,大家就很容易明白了。

三、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.0   4.69  3.74  2.45  3.32
B   4.69  0.0   6.56  3.32  6.56
C   3.74  6.56  0.0   5.29  2.45
D   2.45  3.32  5.29  0.0   5.29
E   3.32  6.56  2.45  5.29  0.0

步骤3:中心化距离矩阵

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

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 |

1 = | 1 |
    | 1 |
    | 1 |
    | 1 |
    | 1 |

1 * 1^T = | 1 1 1 1 1 |
          | 1 1 1 1 1 |
          | 1 1 1 1 1 |
          | 1 1 1 1 1 |
          | 1 1 1 1 1 |

H = I - (1/5) * 1 * 1^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.02 |
| 21.98 0.00 43.03 11.02 43.03 |
| 13.99 43.03 0.00 28.00 6.00 |
| 6.00 11.02 28.00 0.00 28.00 |
| 11.02 43.03 6.00 28.00 0.00 |

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

B = -1/2 * 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.42 |
| 1.12 	5.21 	-6.07 	6.12 	-6.37 |
| 0.11 	-9.29 	6.42 	-6.37 	9.13 |

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

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

特征值:λ1 ≈ 32.32,λ2 ≈ 6.39
特征向量(对应λ1):v1 ≈ (-0.02 0.63 -0.48 0.36 -0.49)
特征向量(对应λ2):v2 ≈ (-0.53 0.59 0.33 -0.50 0.10)

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

步骤6:计算降维后的坐标

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

V = 
|-0.02 	-0.53 |
|0.63 	0.59 |
|-0.48 	0.33 |
|0.36 	-0.50 |
|-0.49 	0.10 |


Λ^(1/2) = | √32.32   0    |
          |   0     √6.39 |

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

新坐标 ≈
|-0.11 	-1.33 |
|3.60 	1.50 |
|-2.76 	0.84 |
|2.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)

至此,我们已经将原始高维空间中的水果口味距离通过MDS算法映射到了二维空间。在这个二维空间中,我们可以观察到水果之间的相对距离关系,从而更容易地分析和理解它们之间的口味差异。

四、MDS算法的优缺点

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

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

五、案例:降维、聚类与分类

举一个PCA中介绍过的例子。

这里介绍一下鸢尾花数据集,鸢尾花在机器学习里是常客之一。数据集由具有150个实例组成,其特征数据包括四个:萼片长、萼片宽、花瓣长、花瓣宽。数据集中一共包括三种鸢尾花,分别叫做Setosa、Versicolor、Virginica,就像下图:

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

也就是说这组数据的维度是150*4,数据是有标签的。(有标签是指每个实例我们都知道它对应的类别)

此时我们进行MDS降维,将四维数据降为二维,并使用不同颜色标注各个类别的鸢尾花,可以得到如下分布情况:

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

欧几里得距离

上图中构建距离矩阵时,使用的欧几里得距离,我们还可以尝试一下其他距离度量方法,比如马氏距离'mahalanobis':

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

马氏距离

City block 距离:

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

City block 距离

chebychev距离:

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

chebychev距离

correlation距离:

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

correlation距离

此外还有很多其他距离度量方法,这里就不一一列举了。

尽管MDS算法的初衷是降维而非聚类,不过由于MDS降维后的数据常常会用做机器学习的输入数据,在数据降维的同时查看降维后数据的分布情况,对于模式识别/分类任务的中间状态确定还是十分有益的,再直白些说,这些图片放在论文里丰富一下内容也是极好的。
在这种应用场景下,数据降维的最主要目的其实还是解决数据特征过于庞大的问题,这个例子中特征只有4个,所以还不太明显。很多时候我们面对的是几十上百乃至更多的特征维度,这些特征中包含着大量冗余信息,使得计算任务变得非常繁重,调参的难度和会大大增加。此时加入一步数据降维就是十分有必要的了。

六、MATLAB的MDS降维快速实现

MDS算法在MATLAB中有官方函数,名字叫做mdscale,熟悉编程的同学可以直接调用。

但是在运用mdscale函数实现降维时,还是有很多坑的,笔者替大家踩过了。并把MDS降维以及可视化的功能进行了封装。它可以实现:

1.指定输出的维度。也就是降维之后的维度,当然这个数不能大于输入数据的特征维度。

options.NumDimensions = 3;  %降维后的数据维度

2.绘制特征分布图。在降维维度为2或者3时,可以绘制特征分布图,当然你也可以选择设置不画图,图个清静。

figflag = 'on';  %是否画图,'on'为画图,'off'为不画,只有NumDimensions为2或者3时起作用,3以上无法画图

3.指定距离度量方法

options.Distance = 'euclidean'; %距离量度方法选择,可选:'euclidean' (default) | 
                                  %'seuclidean' | 'cityblock' | 'chebychev' | 'minkowski' |
                                  %'mahalanobis' | 'cosine' | 'correlation' | 'spearman' | 
                                  %'hamming' | 'jaccard'
% 具体描述见:https://ww2.mathworks.cn/help/stats/pdist.html?s_tid=doc_ta#mw_39296772-30a1-45f3-a296-653c38875df7

设置好这些配置参数后,只需要调用下边这行代码:

mdsVal = kMDS(Fea,options,species,figflag); %mdsVal为降维后的数据矩阵

就可以绘制出这样一张图:

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

如果要绘制三维图,把options.NumDimensions设置成3就好了。绘制出来是这样:

【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现

不过上述是知道标签值species的情况,如果不知道标签值,设置species=[]就行了,此时画出来的分布图是单一颜色的。

上述代码秉承了本专栏一向的易用属性,功能全部集中在kMDS函数里了,这个函数更详细的介绍如下:

mdsVal = kMDS(Fea,options,species,figflag); %mdsVal为降维后的数据矩阵
%% 执行数据的MDS降维
% 可以实现2维、3维以及更高维度的降维,只有二维和三维可以画图
% 输入:
% Fea:待降维数据,R*Q的矩阵,R为批次数,Q为特征维度,例如特征维度为8的共100组数,tempFea的维度应为100*8。输入该变量时一定要注意行列方向是否正确,如不正确需要转置
% options:一些与MDS降维有关的设置,使用结构体方式赋值,比如 options.Distance = 'euclidean' ,具体包括:
%              -Distance:距离量度方法选择,可选:'euclidean' (default) | 'seuclidean' | 'cityblock' | 'chebychev' | 'minkowski' | 'mahalanobis' | 'cosine' | 'correlation' | 'spearman' | 'hamming' | 'jaccard'
%                         具体描述见:https://ww2.mathworks.cn/help/stats/pdist.html?s_tid=doc_ta#mw_39296772-30a1-45f3-a296-653c38875df7
%              -NumDimensions:降维后的数据维度,默认为2
% species:分组变量,可以是数组、数值向量、字符数组、字符串数组等,但是需要注意此变量维度需要与Fea的组数一致。该变量可以不赋值,调用时对应位置写为[]即可
%          例如species可以是[1,1,1,2,2,2,3,3,3]这样的数组,代表了Fea前3行数据为第1组,4-6行数据为第2组,7-9行数据为第三组。
%          关于此species变量更多信息,可以查看下述链接中的"Grouping variable":
%          https://ww2.mathworks.cn/help/stats/gscatter.html?s_tid=doc_ta#d124e492252
% 
% figflag:是否画图,'on'为画图,'off'为不画,只有NumDimensions为2或者3时起作用,3以上无法画图

需要上边这个函数文件以及测试代码的同学,可以在下边获取:

MDS降维算法 | 工具箱文档 (khsci.com)文章来源地址https://www.toymoban.com/news/detail-403976.html

到了这里,关于【数据降维-第4篇】多维尺度变换(MDS)快速理解,及MATLAB实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据预处理matlab matlab数据的获取、预处理、统计、可视化、降维

    1.1 从Excel中获取 使用readtable() 例1: 使用 spreadsheetImportOptions(Name,Value) 初步确定导入信息, 再用 opts.Name=Value 的格式添加。 例2: 先初始化 spreadsheetImportOptions 对象, 再用 opts.Name=Value 的格式逐个添加。 例3: 将导入信息存到变量里, 再使用 spreadsheetImportOptions(Name,Value)

    2024年02月15日
    浏览(56)
  • 快速傅里叶变换MATLAB代码实现

    任何连续测量的时序或信号,都可以表示为不同频率的余弦(或正弦)波信号的无限叠加。FFT(Fast Fourier Transform)是离散傅立叶变换的快速算法,可以将一个信号变换到频域。 对于包含 n n n 个均匀采样点的向量 x x x ,其傅里叶变换定义为 y k + 1 = ∑ j = 0 n − 1 ω j k x j + 1

    2023年04月09日
    浏览(73)
  • MATLAB——FFT(快速傅里叶变换)

    基础知识 FFT即快速傅里叶变换,利用周期性和可约性,减少了DFT的运算量。常见的有按时间抽取的基2算法(DIT-FFT)按频率抽取的基2算法(DIF-FFT)。 1.利用自带函数fft进行快速傅里叶变换 若已知序列 x = [ 4 , 3 , 2 , 6 , 7 , 8 , 9 , 0 ] x=[4,3,2,6,7,8,9,0] x = [ 4 , 3 , 2 , 6 , 7 , 8 , 9 , 0 ]

    2024年02月03日
    浏览(75)
  • 数据降维 | MATLAB实现T-SNE降维特征可视化

    降维效果 基本描述 T-SNE降维特征可视化,MATLAB程序。 T-分布随机邻域嵌入,主要用途是对高维数据进行降维并进行可视化,以便更好地理解和发现数据之间的结构、模式和聚类关系。它被广泛应用于数据可视化、数据挖掘和机器学习等领域。 包含二维图像和三维图像生成两

    2024年02月11日
    浏览(38)
  • matlab数据的获取、预处理、统计、可视化、降维 | 《matlab数学建模方法与实践(第三版)》学习笔记

    一、数据的获取 1.1 从Excel中获取 使用readtable() 使用xlsread()——xlswrite() 1.2  从TXT中获取 使用load() 使用textread() 使用fopen() fread() fclose()  使用fprintf()写入信息到txt  1.3 从图片中获取 使用imread  1.4 从视频获取  使用视觉工具箱中的VideoFileReader  二、数据的预处理 2.1 缺失值处

    2024年01月19日
    浏览(67)
  • 【MATLAB第77期】基于MATLAB代理模型算法的降维/特征排序/数据处理回归/分类问题MATLAB代码实现【更新中】

    本文介绍基于libsvm代理模型算法的特征排序方法合集,包括: 1.基于每个特征预测精度进行排序(libsvm代理模型) 2.基于相关系数corr的特征排序(libsvm代理模型) 3.svmrfe_ker(二分类)【后续更新】 4.基于SVM-RFE递归特征消除的特征排序svmrfe_ori(二分类)【后续更新】 数据设

    2024年02月07日
    浏览(48)
  • Matlab信号处理3:fft(快速傅里叶变换)标准使用方式

    运行效果:

    2024年02月09日
    浏览(48)
  • 构建图像金字塔:探索 OpenCV 的尺度变换技术

    在计算机视觉领域,图像金字塔是一种强大的技术,可用于在不同尺度下对图像进行分析和处理。金字塔的概念借鉴了古埃及的金字塔形状,其中每一级都是前一级的缩小版本。本篇博客将深入探讨如何构建图像金字塔,以及如何在实际应用中利用金字塔来解决各种计算机视

    2024年02月08日
    浏览(47)
  • 【快速傅里叶变换(fft)和逆快速傅里叶变换】生成雷达接收到的经过多普勒频移的脉冲雷达信号(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文的

    2024年02月10日
    浏览(51)
  • 机器视觉之尺度不变特征变换(SFIT)算法的实例教程

    话不多说,上代码 原理和应用场景在文章最后 使用SIFT进行图片的简单操作: SIFT(Scale-Invariant Feature Transform)是一种用于图像处理和计算机视觉的特征提取算法,它在处理具有不同尺度、旋转和光照变化的图像时表现出色。SIFT算法的主要应用方向和原理如下: 应用方向:

    2024年01月23日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包