机器学习降维:多维尺度分析 MDS

机器学习降维:多维尺度分析 MDS(超通俗完整版)

在做数据分析、可视化、相似度探索时,我们经常只有样本之间的距离/相似度 ,却没有原始特征,没法画图、没法降维。MDS(多维尺度分析) 就是专门解决这个问题的神器------只靠距离矩阵,就能还原出低维坐标,完美保留样本间的相对位置

这篇文章用大白话 + 公式拆解 + 实战代码 + 对比总结,把 MDS 讲得通俗易懂,本科生、研究生都能轻松掌握。


一、先看懂:MDS 到底是什么?

1. 一句话理解 MDS

MDS = 只看距离,还原位置

给定一堆样本之间的距离/相似度 ,MDS 能把它们"摆"到二维/三维平面上,让低维距离 ≈ 原始距离,从而可视化样本关系。

2. 超通俗例子

你只有 5 种饮料的相似度

  • 可乐 ↔ 雪碧:很像(距离近)
  • 牛奶 ↔ 咖啡:不像(距离远)
  • 橙汁:在中间

MDS 能直接把这 5 个点画在平面图上,谁近谁远一目了然

3. MDS 核心目标

不关心原始特征长什么样,只保留样本间的相对距离关系


二、MDS 核心思想(极简版)

  1. 输入:距离矩阵 D(n×n,记录每两个样本的距离)
  2. 处理:把距离矩阵转为内积矩阵 B
  3. 求解:对 B 做特征分解,得到低维坐标
  4. 输出:低维空间坐标,让欧氏距离尽量等于原始距离

三、经典 MDS 数学原理(一步步讲透)

1. 核心公式(必须看懂)

原始距离平方与内积的关系:
∥ x i − x j ∥ 2 = b i i + b j j − 2 b i j \|x_i - x_j\|^2 = b_{ii} + b_{jj} - 2b_{ij} ∥xi−xj∥2=bii+bjj−2bij

通过双重中心化 ,从距离矩阵恢复内积矩阵:
B = − 1 2 H D ( 2 ) H B = -\frac{1}{2} H D^{(2)} H B=−21HD(2)H

  • H:中心化矩阵
  • D²:距离平方矩阵
  • B:内积矩阵(Gram 矩阵)

2. 特征分解求坐标

对 B 做特征分解:
B = Q Λ Q T B = Q \Lambda Q^T B=QΛQT

取前 p 个主成分,得到低维坐标:
X p = Q p Λ p 1 / 2 X_p = Q_p \Lambda_p^{1/2} Xp=QpΛp1/2


四、MDS 标准算法流程(背诵版)

输入:距离矩阵 D、目标维度 p

  1. 计算距离平方矩阵 D²
  2. 构造中心化矩阵 H
  3. 计算内积矩阵 B
  4. 对 B 做特征值分解
  5. 取前 p 个特征值与特征向量
  6. 输出低维坐标 X

五、MDS 两种类型

1. Metric MDS(经典 MDS)

  • 假设距离是欧氏可表示
  • 用矩阵分解求解,速度快、结果稳定
  • 本文重点讲解

2. Non-metric MDS

  • 只保序关系(谁近谁远),不保真实距离
  • 适合评分、排序类数据

六、实战代码:文本相似度 MDS 可视化(可直接运行)

我们用文本 TF-IDF + 余弦距离做 MDS 降维,直观展示文本相似度。

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import pairwise_distances
from sklearn.preprocessing import MinMaxScaler
from sklearn.manifold import MDS

# 1. 构造语料(科技、健康、商业)
corpus = [
    "Apple unveils new iPhone with better battery life",
    "Microsoft launches Windows update with new features",
    "Google announces new AI chip for faster performance",
    "Tesla releases new electric car model with longer range",
    "Amazon reports record profits in Q4",
    "Facebook changes name to Meta to reflect metaverse vision",
    "New study shows benefits of regular exercise",
    "Health experts warn about new flu variant",
    "Research reveals link between sleep and mental health",
    "Nutritionists recommend more fiber in daily diet"
]

labels = [
    "Apple", "Microsoft", "Google", "Tesla", "Amazon",
    "Meta", "Exercise", "Flu", "Sleep", "Diet"
]

# 2. TF-IDF 向量化
vec = TfidfVectorizer(stop_words='english')
tfidf = vec.fit_transform(corpus)

# 3. 计算余弦距离矩阵
dist_mat = pairwise_distances(tfidf, metric='cosine')

# 4. MDS 降维
mds = MDS(
    n_components=2,
    dissimilarity='precomputed',
    random_state=42,
    n_init=10,
    max_iter=500
)
coords = mds.fit_transform(dist_mat)
coords = MinMaxScaler().fit_transform(coords)

# 5. 可视化
plt.figure(figsize=(10, 8))
palette = sns.color_palette("bright", len(labels))
for i, label in enumerate(labels):
    plt.scatter(coords[i,0], coords[i,1], color=palette[i], s=200, edgecolors='black')
    plt.text(coords[i,0]+0.01, coords[i,1]+0.01, label, fontsize=12)

plt.title("MDS 文本相似度可视化(余弦距离)", fontsize=14)
plt.xlabel("MDS Dim 1")
plt.ylabel("MDS Dim 2")
plt.grid(True)
plt.show()

结果说明

  • 科技类(Apple、Google、Microsoft)聚在一起
  • 健康类(Sleep、Diet、Flu)聚在一起
  • 距离越近 → 语义越相似

七、MDS 优缺点(面试高频)

✅ 优点

  1. 只需要距离矩阵,不需要原始特征
  2. 支持任意距离:余弦、曼哈顿、自定义距离都行
  3. 保留全局几何结构,适合关系展示
  4. 几何直观、解释性强,适合做报告可视化
  5. 非线性适用,不要求数据线性

❌ 缺点

  1. 计算量大:复杂度 O(n²),大数据跑不动
  2. 对噪声/异常值敏感
  3. 局部结构弱,不如 t-SNE/UMAP 聚类清晰
  4. 不支持增量学习,新样本要重新训练

八、MDS vs PCA vs t-SNE vs UMAP(超级对比)

算法 核心思想 保留结构 输入 复杂度 适用场景
MDS 距离保持 全局距离 距离矩阵 高 O(n²) 小样本、关系可视化
PCA 方差最大 全局线性 原始特征 线性降维、去冗余
t-SNE 概率匹配 局部聚类 原始特征 聚类可视化
UMAP 拓扑保持 全局+局部 原始特征 低 O(nlogn) 大数据、通用可视化

九、什么时候用 MDS?什么时候不用?

✅ 推荐用 MDS

  • 只有距离/相似度,没有原始特征
  • 样本量小(几十~几百)
  • 需要保留全局相对位置
  • 报告、图谱、关系可视化
  • 使用自定义距离(文本、图、序列)

❌ 不推荐用 MDS

  • 样本量 > 2000 → 用 UMAP
  • 重点看局部聚类 → 用 t-SNE/UMAP
  • 需要高速、大规模 → 用 PCA
  • 需要增量更新 → 用 UMAP

十、MDS 使用技巧

  1. 距离矩阵必须对称、非负
  2. 调大 n_init 避免局部最优
  3. 数据先标准化再算距离
  4. 用**应力值(Stress)**评估质量:越小越好
  5. 大数据先用 PCA 预降维

十一、总结(一句话记住 MDS)

MDS 是"距离还原神器",只靠样本间距离就能生成低维可视化,完美保留全局相对位置,特别适合小样本、相似度分析、关系图谱场景,是数据分析与可视化必备工具。

相关推荐
枫叶林FYL2 小时前
安装Claude Code泄密
人工智能·机器学习
墨染天姬2 小时前
【AI】2026年4月开源视频生成模型
人工智能·音视频
AI医影跨模态组学2 小时前
EJNMMI(IF=7.6)四川大学华西医院田蓉、李康等团队:基于深度学习的PET‑CT生物标志物用于滤泡淋巴瘤早期进展预测及生存分层
人工智能·深度学习·医学·医学影像
Yao.Li2 小时前
PVN3D ONNX 转换与测试记录
人工智能·3d·具身智能
低调小一2 小时前
Harness Engineering:把大语言模型从“能说”变成“能稳定交付”的四层系统
人工智能·语言模型·自然语言处理·harness
m0_564876842 小时前
提示词工程Zero-Shot、One-Shot、Few-Shot
人工智能·深度学习·学习
GinoWi2 小时前
Chapter 8 Python中的类
python
Thomas.Sir2 小时前
第六章:RAG知识库开发之【深入浅出RAG使用效果评估:从指标到实践】
人工智能·python·ai·rag·效果评估
Agent产品评测局2 小时前
企业采购自动化落地,供应商全生命周期管控实现方案:智能体驱动下的全链路提效与合规治理
运维·人工智能·ai·chatgpt·自动化