当散点图不够用时:用 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/9/25 21:29:47 阅读更多 →
终极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/10/3 10:13:00 阅读更多 →
超星学习通自动签到工具:5分钟实现全平台智能签到

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

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

2026/10/7 12:54:06 阅读更多 →

最新新闻

OpenCV车道线检测实战:霍夫变换参数调优与避坑指南

OpenCV车道线检测实战:霍夫变换参数调优与避坑指南

简介:这份资源面向计算机视觉初学者与自动驾驶入门开发者,围绕OpenCV车道实时检测这一典型任务,提供可直接运行的示例代码与配套讲解。内容覆盖视频逐帧读取、多边形掩码构建、图像阈值化、霍夫线变换检测车道以及结果视频合成等完整流程&…

2026/10/12 19:25:05 阅读更多 →
DeepSeek本地部署保姆级教程:Ollama、可视化WebUI与RAG知识库投喂实战

DeepSeek本地部署保姆级教程:Ollama、可视化WebUI与RAG知识库投喂实战

简介:针对DeepSeek官方服务频繁响应迟缓、宕机的问题,这份面向零基础用户的保姆级教程,完整演示了如何在个人电脑上本地部署DeepSeek,并配套可视化界面与数据投喂训练。教程从安装Ollama讲起,覆盖根据显存容量挑选合适…

2026/10/12 19:25:05 阅读更多 →
大模型私有化部署生产环境实战:显存计算、推理框架选型与性能优化

大模型私有化部署生产环境实战:显存计算、推理框架选型与性能优化

1. 大模型私有化部署到底在解决什么问题第一次听到“把大模型私有化部署到生产环境”这个需求,很多人的第一反应是:直接调云端API不香吗?按token付费,不用管显卡,不用操心运维,何必自己折腾?我一…

2026/10/12 19:25:05 阅读更多 →
C++单元测试从零到实战:框架选型、构建集成与踩坑指南

C++单元测试从零到实战:框架选型、构建集成与踩坑指南

我翻了翻过去几个项目的提交记录,有个数据挺有意思:接入单元测试之前,每次大版本迭代,光回归测试就得占掉两三天,而且经常是改完一个模块,另一个模块莫名其妙就出问题,查半天发现是内部接口被悄…

2026/10/12 19:25:05 阅读更多 →
aider 接入 OpenRouter 调用 Claude 大模型:TaoToken 统一 Key 配置与连通性验证

aider 接入 OpenRouter 调用 Claude 大模型:TaoToken 统一 Key 配置与连通性验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 19:25:04 阅读更多 →
Python接口逆向实战:网页翻译请求签名分析与批量调用实现

Python接口逆向实战:网页翻译请求签名分析与批量调用实现

1. 项目缘起与整体设计思路做数据采集这行的朋友大概都有体会,翻译类接口的逆向分析算是入门级里比较典型的一类练手项目。我最早接触这类需求是在做一个多语言内容聚合的小工具,需要批量把一批短文本从中文转成英文,再转成日文做对照。当时第…

2026/10/12 19:24:03 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →