降维算法之t-SNE
t-SNE(t-Distributed Stochastic Neighbor Embedding)算法详解
先说理解:
t-SNE(t-distributed Stochastic Neighbor Embedding)是一种用来“可视化高维数据”的降维方法,通俗来说,它就像一个“超级地图绘制员”,能把一堆复杂得看不懂的数据(比如几百个特征)“压扁”到2D或3D的平面图上,让你一眼就能看出数据的分布和聚集情况。
让我用一个生活化的例子来解释:
场景:朋友圈分组
假设你有100个朋友,每个朋友有50个特征:身高、体重、爱好、性格、收入等等。你想把他们画在一张纸上,分成几组相似的“朋友圈”,但50个特征没法直接画。t-SNE 就像一个帮你整理朋友的“神器”:
- 看关系:它先看看哪些朋友在高维空间里“靠得近”(特征相似),哪些“离得远”。
- 挤到平面:然后,它把这100个朋友“挤”到一张2D纸上,尽量保持原来的“亲疏关系”:相似的朋友靠在一起,不相似的分开。
- 调整细节:t-SNE 还会细调位置,让这张图既好看又准确,方便你一眼看出谁跟谁是一伙的。
怎么工作的?
- 高维距离:t-SNE 先算出高维空间里每对数据点(朋友)的“相似度”(用概率表示,越近越相似)。
- 低维模拟:然后,它在2D或3D空间里随机放点,再调整这些点的位置,让低维的“相似度”尽量匹配高维的。
- 优化布局:通过不断调整,t-SNE 让“近邻保持近,远邻保持远”,最后给你一张直观的图。
和 PCA 的区别
- PCA:像整理东西,找的是“变化最大的方向”,结果是线性的,适合分析整体趋势。
- t-SNE:像画社交地图,专注于“局部邻居关系”,结果是非线性的,适合展示聚类和分组。
举个例子
假如你有1000张照片的数据,每张有100个特征(颜色、纹理等)。t-SNE 可以把它们降到2D,画成一张散点图。你童鞋,你会看到:猫咪照片聚成一团,狗狗照片聚成另一团,风景照又分开一团,特别直观。
生活中的意义
t-SNE 就像你在整理相册,想快速看看哪些照片是同一个主题(度假、聚会)。它帮你把复杂数据变成一张“关系图”,一目了然。
简单来说,t-SNE 就是:把高维的乱七八糟数据,压成一张好看的2D地图,让你轻松看出谁跟谁近!
1. t-SNE 的基本概念
t-SNE(t-Distributed Stochastic Neighbor Embedding,t 分布随机邻居嵌入)是一种非线性降维算法,主要用于数据可视化,尤其适用于高维数据的低维表示(如 2D、3D 可视化)。
t-SNE 与 PCA 的区别
- PCA 关注全局结构,通过线性变换找到最大方差方向。
- t-SNE 关注局部结构,保持数据点之间的邻近关系。
由于 t-SNE 能够揭示数据的局部簇结构,因此在数据可视化、图像分析和生物信息学等领域被广泛使用。
2. t-SNE 的数学原理
2.1 高维空间中的相似度计算
t-SNE 首先在高维空间中定义数据点之间的概率分布,即每个点 x i x_i xi 相对于另一个点 x j x_j xj 的相似度 p j ∣ i p_{j|i} pj∣i,定义如下:
p j ∣ i = exp ( − ∥ x i − x j ∥ 2 / 2 σ 2 ) ∑ k ≠ i exp ( − ∥ x i − x k ∥ 2 / 2 σ 2 ) p_{j|i} = \frac{\exp(-\|x_i - x_j\|^2 / 2\sigma^2)}{\sum_{k \neq i} \exp(-\|x_i - x_k\|^2 / 2\sigma^2)} pj∣i=∑k=iexp(−∥xi−xk∥2/2σ2)exp(−∥xi−xj∥2/2σ2)
其中 σ \sigma σ 是高斯核带宽,用于控制相似度的尺度。
最终,高维数据点 x i x_i xi 和 x j x_j xj 之间的联合概率分布 P i j P_{ij} Pij 计算如下:
P i j = p j ∣ i + p i ∣ j 2 n P_{ij} = \frac{p_{j|i} + p_{i|j}}{2n} Pij=2npj∣i+pi∣j
2.2 低维空间中的相似度计算
在低维(目标)空间中,t-SNE 用**t 分布(自由度 1)**来计算相似度,以增强远距离点的区分度:
Q i j = ( 1 + ∥ y i − y j ∥ 2 ) − 1 ∑ k ≠ l ( 1 + ∥ y k − y l ∥ 2 ) − 1 Q_{ij} = \frac{(1 + \|y_i - y_j\|^2)^{-1}}{\sum_{k \neq l} (1 + \|y_k - y_l\|^2)^{-1}} Qij=∑k=l(1+∥yk−yl∥2)−1(1+∥yi−yj∥2)−1
2.3 Kullback-Leibler 散度(KL 散度)优化
t-SNE 通过最小化高维分布 P i j P_{ij} Pij 和低维分布 Q i j Q_{ij} Qij 之间的Kullback-Leibler(KL)散度来优化数据点的位置:
C = ∑ i ≠ j P i j log P i j Q i j C = \sum_{i \neq j} P_{ij} \log \frac{P_{ij}}{Q_{ij}} C=i=j∑PijlogQijPij
通过梯度下降优化 C C C,使得 Q i j Q_{ij} Qij 逼近 P i j P_{ij} Pij,最终得到数据的低维表示。
3. t-SNE 的 Python 实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits# 载入数据(手写数字数据集)
digits = load_digits()
X, y = digits.data, digits.target# 进行 t-SNE 降维
tsne = TSNE(n_components=2, perplexity=30, learning_rate=200, random_state=42)
X_tsne = tsne.fit_transform(X)# 可视化 t-SNE 结果
plt.figure(figsize=(8, 6))
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='jet', alpha=0.7)
plt.colorbar(label='Digit Label')
plt.title("t-SNE Visualization of Digits Dataset")
plt.xlabel("t-SNE Component 1")
plt.ylabel("t-SNE Component 2")
plt.show()
4. t-SNE 的超参数
4.1 Perplexity(困惑度)
- 控制数据点的邻域大小,通常取值在 5 到 50 之间。
- 较小的 perplexity 关注局部结构,较大的 perplexity 关注全局结构。
4.2 Learning Rate(学习率)
- 影响梯度下降的步长,通常设置为 10 到 1000。
- 过低可能导致收敛缓慢,过高可能导致不稳定。
4.3 迭代次数(n_iter)
- 一般设为 1000 到 5000,确保收敛。
5. t-SNE 的优缺点
优点
- 能够很好地揭示数据的局部结构和簇结构。
- 适用于高维数据可视化。
- 适用于非线性数据结构的降维。
缺点
- 计算复杂度高( O ( n 2 ) O(n^2) O(n2)),不适合大规模数据集。
- 随机性较大(不同运行可能得到不同的结果)。
- 不适用于数据外推(无法直接应用于新数据点)。
6. t-SNE 的应用场景
- 数据可视化:将高维数据映射到 2D/3D 以进行聚类和模式发现。
- 图像分析:用于人脸识别、图像分类等任务。
- 生物信息学:基因表达数据降维,可视化不同基因的分布模式。
7. 总结
- t-SNE 是一种非线性降维方法,专注于局部结构的保持。
- 使用 KL 散度优化高维数据的低维投影。
- 适用于数据可视化,但计算复杂度较高。
相关文章:
降维算法之t-SNE
t-SNE(t-Distributed Stochastic Neighbor Embedding)算法详解 先说理解: t-SNE(t-distributed Stochastic Neighbor Embedding)是一种用来“可视化高维数据”的降维方法,通俗来说,它就像一个…...
使用 .NET 9 和 Azure 构建云原生应用程序:有什么新功能?
随着 .NET 9 推出一系列以云为中心的增强功能,开发人员拥有比以往更多的工具来在 Azure 上创建可扩展、高性能的云原生应用程序。让我们深入了解 .NET 9 中的一些出色功能,这些功能使构建、部署和优化云应用程序变得更加容易,并附有示例以帮助…...
python基础-10-组织文件
文章目录 【README】【10】组织文件(复制移动删除重命名)【10.1】shutil模块(shell工具)【10.1.1】复制文件和文件夹【10.1.1.1】复制文件夹及其下文件-shutil.copytree 【10.1.2】文件和文件夹的移动与重命名【10.1.3】永久删除文件和文件夹【10.1.4】用…...
从代码学习深度学习 - LSTM PyTorch版
文章目录 前言一、数据加载与预处理1.1 代码实现1.2 功能解析二、LSTM介绍2.1 LSTM原理2.2 模型定义代码解析三、训练与预测3.1 训练逻辑代码解析3.2 可视化工具功能解析功能结果总结前言 深度学习中的循环神经网络(RNN)及其变种长短期记忆网络(LSTM)在处理序列数据(如文…...
linux gcc
一、常用编译选项 基本编译 gcc [input].c -o [output] 示例: gcc hello.c -o hello # 将 hello.c 编译为可执行文件 hello ./hello # 运行程序 分步编译 预处理:-E(生成 .i 文件) gcc -E hello.c -o hello…...
“一路有你”公益行携手《东方星动》走进湖南岳阳岑川镇中心小学
2025年4月2日,“一路有你”公益行携手《东方星动》走进湖南岳阳岑川镇,一场充满爱与温暖的捐赠仪式在岑川镇中心小学隆重举行。这是一场跨越千里的爱心捐赠,也是一场别开生面的国防教育,更是一场赋能提质的文化盛宴。 岑川镇地处湘…...
HTML语言的空值合并
HTML语言的空值合并 引言 在现代Web开发中,HTML(超文本标记语言)是构建网页的基础语言。随着前端技术的快速发展,开发者们面临着大量不同的工具和技术,尤其是在数据处理和用户交互方面。空值合并是一些编程语言中常用…...
并发上传及 JS 的单线程特性
1. JS 的单线程特性 JS 是单线程特性,这意味着所有代码都在一个线程上(即主线程)执行,同一时间只有一个任务在执行,其他任务都在等待。 这意味着即使有多个异步操作,它们的回调函数也会按顺序执行ÿ…...
c语言学习16——内存函数
内存函数 一、memcpy使用和模拟实现1.1参数1.2 使用1.3 模拟实现 二、memmove使用和模拟实现2.1 参数2.2 使用2.3 模拟实现 三、memset使用3.1 参数3.2 使用 四、memcmp使用4.1 参数4.2 使用 一、memcpy使用和模拟实现 1.1参数 因为内存中不知道存的是什么类型的地址ÿ…...
html5炫酷3D文字效果项目开发实践
炫酷3D文字效果项目开发实践 这里写目录标题 炫酷3D文字效果项目开发实践项目概述技术实现1. 基础HTML结构2. 核心CSS技术2.1 3D空间设置2.2 文字立体效果2.3 动画效果 3. 交互优化3.1 鼠标悬停效果3.2 光晕效果 性能优化考虑项目亮点总结 项目概述 在这个项目中,我…...
【前端】【tailwind】tailwind默认重置了样式
Tailwind CSS 自身已经内置了现代化的样式重置方案 —— Preflight(基于 modern-normalize),这意味着在大多数情况下不需要额外引入传统的 reset.css 或 normalize.css。但具体是否需要补充重置,取决于你的项目需求,以…...
学透Spring Boot — 009. Spring Boot的四种 Http 客户端
目录 常见的HttpClient Spring 提供的HttpClient RestTemplate Spring 提供的模板类 XXXTemplate RestTemplate的使用 RestTemplate的使用技巧 RestTemplate的问题 RestClient RestClinet的基本使用 RestClient的自动配置 RestClient 序列化对象 异常处理 onStatus …...
STM32单片机入门学习——第14节: [6-2] 定时器定时中断定时器外部时钟
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.04 STM32开发板学习——第14节: [6-2] 定时器定时中断&定时器外部时钟 前言开发…...
Python 元组
Python 元组 元组的介绍 元组和列表很像,都是用来保存多个数据使用一对小括号()来表示一个元组元组和列表的区别在于,列表是可变数据类型,而元组是不可变数据类型 nums (9, 4, 3, 1, 9, 7, 6, 9, 3, 9) print(nums) # (9, 4, 3, 1, 9, 7…...
Linux系统编程:进程管理、内存对比与树莓派应用
一、认识进程和线程,在Linux系统下查看系统中各进程的编号pid并终止一个进程pid 1.进程和线程 进程:操作系统分配资源(如内存、CPU时间片)的基本单位。每个进程有独立的内存空间,进程间通信需要较复杂的机制…...
JSON介绍
JSON 的核心特点 易读易写:纯文本格式,结构清晰(像“键值对”的集合)。通用性强:任何语言都能解析或生成 JSON。用途广泛:常用于前后端数据传输、配置文件、API 接口等。 &am…...
【Cursor】切换主题
右键顶部,把菜单栏勾上 首选项-主题-颜色主题 选择和喜欢的颜色主题即可,一般是“现代深色”...
【C++11(上)】—— 我与C++的不解之缘(三十)
一、C11 这里简单了解一下C发展好吧: C11是C的第二个大版本,也是自C98以来最重要的一个版本。 它引入了大量的更改,它曾被人们称为C0x,因为它被期待在2010年之前发布;但在2011年8月12日才被采纳。 C03到C11花了8年时间…...
python如何把列表中所有字符变成小写
在Python中,你可以使用列表推导式(list comprehension)结合字符串的.lower()方法,将列表中的所有字符串元素转换为小写。以下是一个示例: # 定义一个包含字符串的列表 strings ["Hello", "WORLD"…...
DEAP数据集介绍
DEAP数据集介绍 0. 数据集摘要1. 文件列表2. 文件详细信息2.1 Online_ratings2.2 Video_list2.3 Participant_ratings2.4 Participant_questionnaire2.5 Face_video.zip2.6 Data_original.zip2.7 Data_preprocessed_matlab.zip 和 Data_preprocessed_python.zip 3. References欢…...
基于RDK X3的“校史通“机器人:SLAM导航+智能交互,让校史馆活起来!
视频标题: 【校史馆の新晋顶流】RDK X3机器人:导览员看了直呼内卷 视频文案: 跑得贼稳团队用RDK X3整了个大活——给校史馆造了个"社牛"机器人! 基于RDK X3开发板实现智能导航与语音交互SLAM技术让机器人自主避障不…...
JavaScript基础-window.localStorage
在现代Web开发中,数据存储对于提升用户体验至关重要。window.localStorage 是一种简单而强大的客户端存储机制,允许网页以键值对的形式持久化保存数据。与 sessionStorage 不同,localStorage 中的数据不会因浏览器标签页关闭或刷新而丢失&…...
在航电系统中提高可靠性的嵌入式软件设计
1.总线余度设计 数据传输采用双余度总线设计,CANFD为主,RS485为备。发送方将相同的数据分别通过双总线来发送,接收方优先处理主线数据。由于总线上数据频率固定,可设置定时器监控主总线的数据,当定时器超时后ÿ…...
H.266/VVC SCC技术学习:块差分脉冲编码调整(block differential pulse coded modulation, BDPCM)
近年来,屏幕内容视频广泛用于多媒体应用,例如远程桌面,屏幕共享等。由于屏幕内容视频的特性与自然视频有较大区别,VVC中使用了帧内块复制(intra block copy, 即IBC), 调色板(Palette)࿰…...
网络编程—Socket套接字(TCP)
上篇文章: 网络编程—Socket套接字(UDP)https://blog.csdn.net/sniper_fandc/article/details/146923670?fromshareblogdetail&sharetypeblogdetail&sharerId146923670&sharereferPC&sharesourcesniper_fandc&sharefro…...
数据结构:二叉树(三)·(重点)
二叉树的存储结构 ⼆叉树⼀般可以使⽤两种结构存储,⼀种顺序结构,⼀种链式结构。 顺序结构 顺序结构存储就是使⽤数组来存储,⼀般使⽤数组只适合表⽰完全⼆叉树,因为不是完全⼆叉树会有 空间的浪费,完全⼆叉树更适合…...
StyleTTS 2:文本到语音(Text-to-Speech, TTS)模型
StyleTTS 2 是一种先进的文本到语音(Text-to-Speech, TTS)模型,通过结合风格扩散(style diffusion)和对抗训练(adversarial training),利用大规模语音语言模型(Speech La…...
痉挛性斜颈康复路,饮食要点来相助
痉挛性斜颈患者除了接受正规治疗,合理饮食对缓解症状、促进康复也至关重要。 高蛋白质食物是饮食中的重点。像鸡蛋,富含人体必需的氨基酸,其组成与人体组成模式接近,易于吸收。每天吃 1 - 2 个鸡蛋,能为身体补充修复肌…...
谷歌 Gemini 2.5 Pro 免费开放
2025 年 3 月 30 日,谷歌宣布将最新的 Gemini AI 旗舰模型 Gemini 2.5 Pro 免费向所有 Gemini 应用用户开放。以下是关于此次免费开放的一些具体信息1: 背景:此前,Gemini 2.5 Pro 仅向支付 19.99 美元月费的 Gemini Advanced 用户…...
规则引擎Drools
1.规则引擎概述 1.1 什么是规则引擎 规则引擎 全称为业务规则管理系统,英文名为BRMS,规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务规则,由用户或开发者在需要时进行配置和管理。 需…...
第三季:挪威
挪威 挪威是北欧的一个国家,位于斯堪的纳维亚半岛的西部。以下是关于挪威的详细介绍: 地理位置与自然环境 位置:挪威位于北欧,东邻瑞典,东北与芬兰和俄罗斯接壤,西濒挪威海,北临巴伦支海。地…...
搜索与图论 树的深度优先遍历 树的重心
树的一种特殊的图,无环连通图 图还分为有向图,无向图 但是无向图其实也是特殊的有向图 (a指向b,b也指向a,每个连接节点都如此,则是无向图) 那我们只需要讨论有向图 有向图的分类 邻接矩阵 …...
ORA-09925 No space left on device 问题处理全过程记录
本篇文章关键字:linux、oracle、审计、ORA-09925 一、故障现像 朋友找到我说是他们备份软件上报错。 问题比较明显,ORA-09925,看起来就是空间不足导致的 二、问题分析过程 这里说一下逐步的分析思路,有个意外提前说一下就是我…...
Java开发者の模型召唤术:LangChain4j咏唱指南(三)
Java开发者の模型召唤术:LangChain4j咏唱指南(三) 往期回顾: Java开发者の模型召唤术:LangChain4j咏唱指南(一)Java开发者の模型召唤术:LangChain4j咏唱指南(二) 上两期博客中简单的为大家介绍了 langchain4j是什么、java 集成…...
【leetcode100】动态规划Java版本
70. 爬楼梯 题目 思考的时候觉得情况很多,无从下手,卡在了找推导公式这一步。 看了随想录后知道以简单的三个阶梯来推导dp公式,为什么不是四个,五个为一组呢?因为题目要求的只能爬1个阶梯,或者2个阶梯&…...
RSA和ECC在密钥长度相同的情况下哪个更安全?
现在常见的SSL证书,如:iTrustSSL都支持RSA和ECC的加密算法,正常情况下RAS和ECC算法该如何选择呢?实际上在密钥长度相同的情况下,ECC(椭圆曲线密码学)通常比RSA(Rivest-Shamir-Adle…...
YOLO 获取 COCO 指标终极指南 | 从标签转换到 COCOAPI 评估 (训练/验证) 全覆盖【B 站教程详解】
✅ YOLO 轻松获取论文 COCO 指标:AP(small,medium,large )| 从标签转换到 COCOAPI 评估 (训练/验证) 全覆盖 文章目录 一、摘要二、为什么需要 COCO 指标评估 YOLO 模型?三、核心挑战与解决方案 (视频教程核…...
【算法竞赛】dfs+csp综合应用(蓝桥2023A9像素放置)
目录 一、 题目 二、思路 (1)算法框架选择 (2)剪枝策略 具体来说就是: 三、代码 (1) 数据读取与初始化 (2) 检查当前填充是否符合要求 (3) 递归 DFS 进行填充 (4) 读取输入 & 调用 DFS (5) 完整代码 一…...
3D点云配准RPM-Net模型解读(附论文+源码)
RPM-Net 总体流程代码数据预处理模型计算 α α α和 β β β特征提取变换矩阵计算损失 论文链接:RPM-Net: Robust Point Matching using Learned Features 官方链接:RPMNet 老规矩,先看看效果。 看看论文里给的对比图 总体流程 在学…...
23种设计模式-行为型模式-命令
文章目录 简介问题解决代码核心设计优势 总结 简介 命令是一种行为设计模式, 它能把请求转换为一个包含与请求相关的所有信息 的独立对象。这个转换能让你把请求方法参数化、延迟请求执行或把请求放在队列里,并且能实现可撤销操作。 问题 假如你正在开…...
ngx_cpystrn
定义在 src\core\ngx_string.c u_char * ngx_cpystrn(u_char *dst, u_char *src, size_t n) {if (n 0) {return dst;}while (--n) {*dst *src;if (*dst \0) {return dst;}dst;src;}*dst \0;return dst; } ngx_cpystrn 函数的作用是安全地将源字符串(src&#x…...
常用的国内镜像源
常见的 pip 镜像源 阿里云镜像:https://mirrors.aliyun.com/pypi/simple/ 清华大学镜像:https://pypi.tuna.tsinghua.edu.cn/simple 中国科学技术大学镜像:https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣镜像:https://pypi.doub…...
【小沐杂货铺】基于Three.JS绘制太阳系Solar System(GIS 、WebGL、vue、react)
🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第二期3【小沐…...
Navicat17详细安装教程(附最新版本安装包和补丁)2025最详细图文教程安装手册
目录 前言:为什么选择Navicat 17? 一、下载Navicat17安装包 二、安装Navicat 1.运行安装程序 2.启动安装 3.同意“协议” 4.设置安装位置 5.创建桌面图标 6.开始安装 7.安装完成 三、安装补丁 1.解押补丁包 2.在解压后的补丁包目录下找到“w…...
记忆宫殿APP:全方位脑力与思维训练,助你提升记忆力,预防老年痴呆
记忆宫殿APP,一款专业的记忆训练软件,能去帮你提升自己的记忆能力,多样的训练项目创新的记忆方法,全方面帮你去提升你的记忆能力。 记忆宫殿APP有丰富的记忆训练项目,如瞬间记忆、短时记忆、机械记忆等,以…...
SpringBoot+Spring+MyBatis相关知识点
目录 一、相关概念 1.spring框架 2.springcloud 3.SpringBoot项目 4.注解 5.SpringBoot的文件结构 6.启动类原理 二、相关操作 1.Jar方式打包 2.自定义返回的业务状态码 3.Jackson 4.加载配置文件 5.异常处理 三、优化配置 1.简化sql语句 2.查询操作 复杂查询 一…...
【力扣hot100题】(050)岛屿数量
一开始还以为会很难很难(以为暴力搜索会时间超限要用别的办法),没想到并不难。 我最开始是用vector<vector<bool>>记录搜索过的地域,每次递归遍历周围所有地域。 class Solution { public:vector<vector<char…...
Opencv计算机视觉编程攻略-第九节 描述和匹配兴趣点
一般而言,如果一个物体在一幅图像中被检测到关键点,那么同一个物体在其他图像中也会检测到同一个关键点。图像匹配是关键点的常用功能之一,它的作用包括关联同一场景的两幅图像、检测图像中事物的发生地点等等。 1.局部模板匹配 凭单个像素就…...
pat学习笔记
two pointers 双指针 给定一个递增的正整数序列和一个正整数M,求序列中的两个不同位置的数a和b,使得它们的和恰好为M,输出所有满足条件的方案。例如给定序列{1,2,3,4,5,6}和正整数M 8,就存在268和358成立。 容易想到࿱…...
MoE Align Sort在医院AI医疗领域的前景分析(代码版)
MoE Align & Sort技术通过优化混合专家模型(MoE)的路由与计算流程,在医疗数据处理、模型推理效率及多模态任务协同中展现出显著优势,其技术价值与应用意义从以下三方面展开分析: 一、方向分析 1、提升医疗数据处理效率 在医疗场景中,多模态数据(如医学影像、文本…...