当散点图不够用时:用 t-SNE 可视化多维数据
从散点图的局限说起在数据分析的工作中我们经常会遇到这样一个问题如何把数据的“样子”展示给别人看如果数据只有两个维度事情很简单——画一张散点图就好了。横轴一个变量纵轴一个变量每个点代表一条数据分布一目了然。如果数据有三个维度呢也还行——散点图加上颜色用不同颜色代表第三个维度的取值。比如用散点图展示城市的人口、GDP和面积点的颜色深浅表示面积大小。如果数据有四个维度呢可以再加一个点的大小半径用点的大小表示第四个维度。比如散点图展示学生的学习时间、考试成绩、出勤率和作业完成度——横轴是学习时间纵轴是考试成绩颜色表示出勤率点的大小表示作业完成度。那五个维度呢六个呢十个呢散点图到此为止了。当数据的维度超过4个传统的散点图就再也无能为力了。我们无法在二维平面上用有限的视觉通道位置、颜色、大小、形状去表达十几个甚至上百个维度的信息。但现实世界中的数据往往就是高维的。一份用户画像可能有几十个特征一篇文档的向量表示可能有几百维一张图片经过神经网络提取特征后可能有上千维。这些数据里藏着丰富的结构和模式但我们看不见。直到我看到了t-SNE。什么是 t-SNEt-SNEt-Distributed Stochastic Neighbor Embeddingt-分布随机邻域嵌入是一种非线性降维技术它的目标是把高维空间中的数据点映射到二维或三维空间同时尽可能保留高维空间中数据点之间的局部邻域关系。说人话就是在高维空间中离得近的点在 t-SNE 图上也会离得近在高维空间中离得远的点在 t-SNE 图上也会离得远。t-SNE的核心思想是概率的——它把数据点之间的相似度转化为概率分布然后在低维空间中寻找一个分布使得这两个分布尽可能接近。它不需要预先指定簇的数量能够自动揭示数据中潜在的聚类结构。t-SNE 的优点擅长展示聚类效果t-SNE 能够很好地将数据中的自然分组在二维平面上呈现出来。保留局部结构在高维空间中相近的数据点在低维空间中仍然会靠在一起。无需预先定义簇数量不像 K-Means 等聚类算法需要指定分成几类。t-SNE 的缺点⚠️ 重要计算成本高尤其是在处理大型数据集时t-SNE 的运行时间可能很长。结果不稳定不同次运行可能得到不同的结果。坐标轴不可解释t-SNE 的两个轴不代表任何原始特征的逻辑组合不像 PCA 的主成分那样可以解释含义。参数敏感困惑度perplexity等参数的选择会显著影响结果。可能产生误导t-SNE 有时会夸大簇的大小差异或者把本不相关的点凑到一起。尤其需要注意的是t-SNE 的全局距离不同簇之间的距离是没有意义的。它擅长展示“谁和谁是一伙的”但不擅长展示“这两个群体之间到底有多远”。什么时候用 t-SNEt-SNE最适合的场景是你想探索高维数据中是否存在自然的聚类结构。典型的使用场景包括文本数据的可视化将文档的向量表示Embedding降维到二维观察不同主题的文档是否自然聚在一起。图像数据的可视化将图片的特征向量降维观察不同类别的图片在空间中的分布。用户行为分析将用户的多维行为特征降维识别不同的用户群体。模型输出的解释可视化深度学习模型中间层的特征表示帮助理解模型学到了什么。动手实践两个生活案例光说不练假把式。接下来我们用两个贴近生活的例子看看t-SNE到底怎么用。案例一葡萄酒品鉴数据可视化假设你是一个葡萄酒爱好者收集了 200 款红葡萄酒的 13 个特征数据酒精含量、苹果酸含量、灰分含量、镁含量、总酚含量等。你想看看这些葡萄酒是否可以按照产地自然地分成几类。这个数据集是scikit-learn这个机器学习库中自带的。import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.datasets import load_wine from sklearn.manifold import TSNE from sklearn.preprocessing import StandardScaler # 加载葡萄酒数据集13个特征3个产地类别 wine load_wine() X wine.data # 13个特征 y wine.target # 产地标签0, 1, 2 # 标准化数据t-SNE 对尺度敏感 X_scaled StandardScaler().fit_transform(X) # 使用 t-SNE 降维到 2 维 tsne TSNE(n_components2, perplexity30, random_state42, max_iter1000) X_tsne tsne.fit_transform(X_scaled) # 可视化 plt.figure(figsize(10, 8)) colors [red, green, blue] for i, label in enumerate(np.unique(y)): mask y label plt.scatter(X_tsne[mask, 0], X_tsne[mask, 1], ccolors[i], labelf产地 {i}, alpha0.7, s60) plt.title(t-SNE 可视化葡萄酒按产地聚类, fontsize14) plt.xlabel(t-SNE 维度 1) plt.ylabel(t-SNE 维度 2) plt.legend() plt.show()运行这段代码你会看到不同产地的葡萄酒在二维平面上自然地分成了几个簇。原本 13 个维度的数据现在可以直观地看到聚类结构——这就是t-SNE的魔力。案例二电影推荐系统中的用户画像假设你有一个电影推荐系统收集了 500 个用户的观影偏好数据。每个用户有 20 个特征对不同类型电影动作、喜剧、科幻、爱情、恐怖、纪录片等的偏好程度。你想看看这些用户是否可以自然地分成不同的“观影人群”以便做更精准的推荐。import numpy as np import matplotlib.pyplot as plt from sklearn.manifold import TSNE from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler # 模拟数据500个用户20个电影类型偏好特征 np.random.seed(42) n_users 500 n_features 20 # 生成模拟数据假设存在4种不同的用户类型 X np.random.randn(n_users, n_features) # 为不同用户类型添加不同的偏好模式 # 类型0喜欢动作和科幻 X[:125, 0:5] 2.0 # 类型1喜欢爱情和喜剧 X[125:250, 5:10] 2.0 # 类型2喜欢恐怖和悬疑 X[250:375, 10:15] 2.0 # 类型3喜欢纪录片和历史 X[375:500, 15:20] 2.0 # 标准化 X_scaled StandardScaler().fit_transform(X) # 先用 K-Means 聚类这里只是为了给点打标签做可视化 kmeans KMeans(n_clusters4, random_state42) labels kmeans.fit_predict(X_scaled) # t-SNE 降维 tsne TSNE(n_components2, perplexity30, random_state42, max_iter1000) X_tsne tsne.fit_transform(X_scaled) # 可视化 plt.figure(figsize(10, 8)) scatter plt.scatter(X_tsne[:, 0], X_tsne[:, 1], clabels, cmapviridis, alpha0.6, s50) plt.colorbar(scatter, label用户类型) plt.title(t-SNE 可视化电影用户聚类, fontsize14) plt.xlabel(t-SNE 维度 1) plt.ylabel(t-SNE 维度 2) plt.show()在这个例子中t-SNE 帮助我们直观地看到了 500 个用户在偏好空间中的分布——哪些用户是“动作片爱好者”哪些是“爱情片爱好者”一目了然。一个完整的代码模板如果你想把 t-SNE 应用到自己的数据上下面这个模板可以直接套用import numpy as np import matplotlib.pyplot as plt from sklearn.manifold import TSNE from sklearn.preprocessing import StandardScaler # 1. 准备数据 # X 是你的高维数据形状为 (n_samples, n_features) # labels 是每个样本的类别标签可选用于着色 # X ... # 2. 标准化重要 X_scaled StandardScaler().fit_transform(X) # 3. t-SNE 降维 tsne TSNE( n_components2, # 降维到2维 perplexity30, # 困惑度通常 5-50 random_state42, # 固定随机种子保证结果可复现 max_iter1000 # 迭代次数确保收敛 ) X_tsne tsne.fit_transform(X_scaled) # 4. 可视化 plt.figure(figsize(10, 8)) if labels is not None: scatter plt.scatter(X_tsne[:, 0], X_tsne[:, 1], clabels, cmaptab10, alpha0.6, s50) plt.colorbar(scatter) else: plt.scatter(X_tsne[:, 0], X_tsne[:, 1], alpha0.6, s50) plt.title(t-SNE Visualization) plt.xlabel(t-SNE dimension 1) plt.ylabel(t-SNE dimension 2) plt.show()

相关新闻

YOLOv11涨点改进| CVPR 2026 | 独家Conv与频域改进篇| 引入SSFModule选择性空间频率模块,助力无人机航拍、遥感影像、小目标检测、语义分割、实例分割、目标跟踪任务,有效涨点

YOLOv11涨点改进| CVPR 2026 | 独家Conv与频域改进篇| 引入SSFModule选择性空间频率模块,助力无人机航拍、遥感影像、小目标检测、语义分割、实例分割、目标跟踪任务,有效涨点

一、本文介绍 🔥本文给大家介绍使用 SSFModule选择性空间频率模块 改进YOLOv11网络模型,SSFModule通过空间域通道选择与频率域位置感知选择,动态融合目标的局部纹理、边缘细节、多尺度结构和全局语义信息,使网络针对不同尺寸、密度及背景区域自适应选择有效特征,从而增强…

2026/7/21 22:39:30 阅读更多 →
终极Android阴影生成器:shadow4android免费9-patch阴影制作工具

终极Android阴影生成器:shadow4android免费9-patch阴影制作工具

终极Android阴影生成器:shadow4android免费9-patch阴影制作工具 【免费下载链接】shadow4android Android 9-patch shadow generator 项目地址: https://gitcode.com/gh_mirrors/sh/shadow4android 在Android应用开发中,为界面元素添加阴影效果是…

2026/7/21 22:39:30 阅读更多 →
超星学习通自动签到工具:5分钟实现全平台智能签到

超星学习通自动签到工具:5分钟实现全平台智能签到

超星学习通自动签到工具:5分钟实现全平台智能签到 【免费下载链接】chaoxing-sign-cli 超星学习通签到:支持普通签到、拍照签到、手势签到、位置签到、二维码签到,支持自动监测、QQ机器人签到与推送。 项目地址: https://gitcode.com/gh_mi…

2026/7/21 22:38:30 阅读更多 →

最新新闻

现在做AI的产品经理,到底有多难

现在做AI的产品经理,到底有多难

现在做产品经理难得不是做原型与需求调研了,而是让产品的设计方案从MVP再到产品上线能够获得用户,并且推向市场验证。 在大厂,一个产品的ideal需要经过法务、财务、宣发布等部门来完成需求审核之后才可以做,而一个大厂领头产品的单…

2026/7/22 0:43:45 阅读更多 →
未来三年,是转型AI产品经理的最佳机会

未来三年,是转型AI产品经理的最佳机会

这是一篇写给所有在产品路上迷茫、焦虑、寻找破局点的人的文章。不是贩卖焦虑,而是陈述一个正在发生的结构性机会窗口。它正在打开,且不会永远敞开。全文约20000字,建议收藏后深度阅读。引言:一个正在关闭的时间窗口 2024年初&…

2026/7/22 0:43:45 阅读更多 →
从零搭建网页RAG检索系统,保姆级向量库落地教程

从零搭建网页RAG检索系统,保姆级向量库落地教程

文章目录 前言一、整套链路先看懂,一步都不能少二、前期依赖包一次性装好三、第一步:Loader,网页转标准Document3.1 Loader是所有文件的统一转换器3.2 用CSS选择器精准提取正文3.3 Document自带两大核心属性 四、第二步:递归切分长…

2026/7/22 0:42:45 阅读更多 →
Hugging Face:为什么说它是AI界的GitHub,却比GitHub走得更远?

Hugging Face:为什么说它是AI界的GitHub,却比GitHub走得更远?

一、一句话定义 Hugging Face 是全球最大的 AI 开源社区与模型协作平台,它汇集了数十万个预训练模型、数万个数据集和数万个在线演示应用,已从最初的 NLP 工具包成长为机器学习领域的“GitHub”。 二、发展简史:从聊天机器人到 AI 基础设施 …

2026/7/22 0:42:45 阅读更多 →
一次 Mapreduce job 作业的 AI 分析

一次 Mapreduce job 作业的 AI 分析

作业命令 hadoop fs -rm -r -skipTrash /terasort/terasort-output time hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-

2026/7/22 0:41:45 阅读更多 →
2026顶尖的全球EMBA中立测评|民营企业家择校参考

2026顶尖的全球EMBA中立测评|民营企业家择校参考

一、测评前言民营企业家、企业创始人择校EMBA,普遍面临排名繁杂、课程适配模糊、圈层资源参差、国际化落地性不足等痛点。本文围绕顶尖的全球EMBA,从全球办学排名、院校办学定位、课程体系、学员圈层、产业资源五大客观维度,对主流头部项目进…

2026/7/22 0:40:44 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统,尤其是像TI C6000系列这样的高性能DSP开发中,我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动,但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案? 在数字化协作环境中,消息通知系统的重要性不言而喻明。但现实情况是,企业级通知方案往往需要复杂的API对接(如企业微信、钉钉、飞书),个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点",乙方听到的是"少做几页"。甲方说"不要太复杂",乙方理解成"别放图表了"。结果交过去,甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里,是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 8:48:31 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 8:25:39 阅读更多 →

月新闻