MDS(多维尺度法)的原理及MATLAB实现

MDS(多维尺度法)用于根据样本间距离矩阵重构点的相对位置。本文通过步骤介绍MDS如何解决最优化问题,利用特征值分解求解,并提供MATLAB代码示例展示如何重构英国城市地理位置。

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

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

怎么做?

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


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


Step 1:问题重述


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

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


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

大家也看到wiki最

MATLAB实现多维尺度分析(MDS)可以通过内置函数 `cmdscale` 来完成,该函数实现了经典多维尺度分析(Classical MDS)。下面是一个完整的代码示例,涵盖从数据生成、距离计算到降维可视化的过程。 ### 1. 数据准备与距离矩阵计算 ```matlab % 生成一个包含随机样本的高维数据集(例如:10个样本,5维) X = randn(10, 5); % 计算欧氏距离矩阵 D = pdist(X); % 计算成对样本之间的欧氏距离 D_full = squareform(D); % 将距离向量转换为方阵形式 ``` ### 2. 使用 cmdscale 进行经典 MDS 分析 ```matlab % 执行经典MDS降维,得到二维嵌入坐标 [Y, eigvals] = cmdscale(D_full); % Y 是降维后的坐标,eigvals 是特征值,用于判断降维后空间的有效性 % 可视化降维后的结果 figure; scatter(Y(:,1), Y(:,2)); title('MDS Result in 2D Space'); xlabel('Coordinate 1'); ylabel('Coordinate 2'); grid on; % 显示前两个维度的解释能力(通过特征值大小判断) explained_variance = eigvals ./ sum(eigvals); bar(explained_variance(1:2)); title('Explained Variance by First Two Dimensions'); xlabel('Dimension'); ylabel('Variance Explained'); ``` ### 3. 自定义 MDS 实现(非经典) 如果希望使用自定义的距离度量方式或执行非度量型 MDS(Non-metric MDS),可以结合 `mdscale` 函数: ```matlab % 使用非度量MDS进行降维 Y_nonmetric = mdscale(D, 2, 'criterion', 'strain'); % 可视化结果 figure; scatter(Y_nonmetric(:,1), Y_nonmetric(:,2)); title('Non-metric MDS Result'); xlabel('Coordinate 1'); ylabel('Coordinate 2'); grid on; ``` ### 4. 结果解释 - **cmdscale** 返回的 `Y` 是每个样本在低维空间中的坐标。 - 特征值 `eigvals` 反映了每一维的“重要性”或信息保留程度。负值表示该维的空间无法被欧几里得嵌入[^3]。 - 非度量 MDS 更适合处理非线性关系,但计算成本相对较高。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值