数据可视化01_t-SNE

news2024/12/26 11:18:41

1. t-SNE的定义

t-SNE stands for t-distributed Stochastic Neighbor Embedding.
代表 t 分布随机邻域嵌入。

t-SNE 获取高维数据并将其降低到较低维空间,同时保持数据点之间的关系尽可能接近其原始排列。

它是一种无监督机器学习算法,由 Laurens van der Maaten 和 Geoffery Hinton 于 2008 年开发。

这就是 t-SNE 的工作原理,步骤很简单:

1.1. 测量高维空间中的相似性

  1. 首先,t-SNE 测量原始高维空间中数据点之间的相似性。
  2. 它计算点之间的成对距离,并使用高斯分布将其转换为概率。
  3. 概率表示两个点彼此相邻的可能性。

1.2表示低维空间中的相似性

  1. 接下来,t-SNE 创建一个低维空间(2D 或 3D)并初始化每个数据点的随机坐标。
  2. 然后,它计算低维空间中这些点之间的成对距离,并使用 t 分布将它们转换为概率。

1.3 优化

目标是使低维空间中的概率与高维空间中的概率相似。

这是通过梯度下降来最小化称为 Kullback-Leibler (KL) 散度的成本函数来完成的,该函数衡量两个概率分布之间的差异。

1.4 t-SNE 与主成分分析 (PCA) 有何不同?

t-SNE 是一种非线性降维算法,与 PCA(一种线性降维算法)不同。

虽然主成分分析 (PCA) 假设数据具有线性关系,但 t-SNE 并不这样假设。

因此,t-SNE 在现实世界非线性数据的降维方面更有用。

2. 各类任务举例

2.1 t-SNE on Iris Dataset Iris

鸢尾花数据集包含来自三个不同物种的 150 个鸢尾花样本:山鸢尾、杂色鸢尾和维吉尼亚鸢尾。

每个样本都有四个特征: sepal length 、 sepal width 、 petal length 和 petal width 。

让我们可视化在此数据集上应用 t-SNE 后获得的结果,它将 4 维表示转换为 2 维表示。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.manifold import TSNE

# Load the Iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Perform t-SNE
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X)

# Visualize the results
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap="viridis", alpha=0.8)

cbar = plt.colorbar(scatter, ticks=range(3))
cbar.ax.set_yticklabels(['Iris setosa', 'Iris versicolor', 'Iris virginica']) 

plt.title("Iris Dataset t-SNE Visualization")
plt.xlabel("t-SNE 1st Component")
plt.ylabel("t-SNE 2nd Component")
plt.show()

Perplexity? 什么是困惑度?

perplexity 是与 t-SNE 一起使用的超参数,用于确定在高维空间中构建概率分布时为每个数据点考虑的邻居数量。

当 t-SNE 应用于鸢尾花数据集时,生成的图显示了对应于三种鸢尾花物种的三个不同簇。
在这里插入图片描述
请注意,Iris versicolor 和 Iris virginica 的成分重叠,表明这些物种有更多相似之处。

2.2 t-SNE on GloVe Embeddings

GloVe (Global Vectors for Word Representation),

GloVe(单词表示的全局向量)是一种无监督学习算法,用于获取单词的向量表示(也称为嵌入)。

请注意,这些嵌入是多维的,我们将在二维空间中使用 t-SNE。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from gensim.downloader import load

# Load the pre-trained GloVe word embeddings
glove_vectors = load("glove-wiki-gigaword-50")

# Select a subset of words to visualize
words_to_visualize = ["king", "queen", "man", "woman", "dog", "cat", "car", "bus", "apple", "banana", "happy", "sad", "angry", "calm"]

# Get the corresponding word vectors
word_vectors = np.array([glove_vectors[word] for word in words_to_visualize])

# Perform t-SNE
tsne = TSNE(n_components=2, perplexity=5, random_state=42)
word_vectors_tsne = tsne.fit_transform(word_vectors)

# Visualize the results
plt.figure(figsize=(8, 6))
scatter = plt.scatter(word_vectors_tsne[:, 0], word_vectors_tsne[:, 1])

# Add labels to the points
for i, word in enumerate(words_to_visualize):
    plt.annotate(word, xy=(word_vectors_tsne[i, 0], word_vectors_tsne[i, 1]), xytext=(5, 2), textcoords="offset points", ha="right", va="bottom")

plt.title("Word Embeddings t-SNE Visualization")
plt.xlabel("t-SNE 1st Component")
plt.ylabel("t-SNE 2nd Component")

plt.show()

在这里插入图片描述

2.3 t-SNE on MNIST Dataset MNIST

MNIST 数据集由 70,000 个从 0 到 9 的手写数字组成,每个数字表示为 28x28 像素的灰度图像。

每个图像都表示为 784 维向量 ( 28 * 28 = 784 )。

让我们在二维空间中可视化这些图像。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.decomposition import PCA
from sklearn.manifold import TSNE
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# Load the MNIST dataset
mnist = fetch_openml("mnist_784")
X, y = mnist.data, mnist.target

请注意,我们将首先使用 StandardScaler 缩放数据,然后选择 5000 个图像的子集以加快计算速度。

# Preprocess the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Select a subset of the dataset for faster computation
X_subset, _, y_subset, _ = train_test_split(X_scaled, y, train_size=5000, random_state=42, stratify=y)

t-SNE 的 sklearn 文档告诉我们,如果特征数量非常多,强烈建议使用另一种降维方法(例如 PCA)将维度数减少到合理的数量(例如 50)。高(在我们的例子中为 784)。

因此,在应用 t-SNE 之前,我们将使用 PCA 将 MNIST 数据集的维度从 784 维降低到 50 维。

# Perform PCA for faster t-SNE computation
pca = PCA(n_components=50)
X_pca = pca.fit_transform(X_subset)

接下来,让我们执行 t-SNE 并可视化结果。

# Perform t-SNE
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X_pca)

# Visualize the results
plt.figure(figsize=(12, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y_subset.astype(int), cmap="tab10", alpha=0.6)
plt.colorbar(scatter, ticks=range(10), label="Digits")
plt.title("MNIST t-SNE Visualization")
plt.xlabel("t-SNE 1st Component")
plt.ylabel("t-SNE 2nd Component")
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/713497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8年测试经验总结,性能测试流程与性能测试学习路线,卷起来...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试流程 1、…

运输层概述、端口号、复用与分用

1.运输层概述、端口号、复用与分用 笔记来源: 湖科大教书匠:运输层概述 湖科大教书匠:运输层端口号、复用与分用的概念 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 1.1 运输层概述 计算机网络体系结构中的物…

交流220v转12v给单片机供电芯片

客户的应用需求:AD220V转DC12V 体积要非常小,单片机使用,单片机设备12V 电流很小不会超过100mA? 【AD220V转DC12V体积小的问题】 问题:我需要将交流电(220V)转换为直流电(12V&…

fastadmin后台 点击开关 弹出 你没有权限访问 角色组里面添加了,除了超级管理员其他的只要用状态开关就,没权限 解决办法

首发地址:https://ask.fastadmin.net/question/22863.html 然后再对应的后台控制器里面 加入 protected $multiFields 你设计数据库的开关字段; //注意是字段,不是填写: multi 示例: protected $multiFields show_switch; 也可以多个 p…

QWebEngine应用(一)

前言 很早以前就听说过Qt也能显示网页,一直没有机会真正研究应用起来,刚好最近项目中使用到了QWebEngine内嵌浏览器打开第三方的网站,使用的Qt版本为5.15,踩了不少的坑,这里做个总结。 QWebEngine架构 Qt WebEngine…

亚马逊云科技连续12年被评为“领导者”,用实力赋能企业出海

从人类发展历史上看,无论是刳木为舟,剡木为楫,还是郑和下西洋,亦或是欧洲大航海时代,人类对于出海探索这件事就从未停止。而在如今的时代,相似的故事依旧在上演。过去的十年,是中国互联网最为繁…

多路码流RTSP传输并对每路视频图像叠加OSD信息

一、先保证多路视频码流保存到本地,并且分辨率正确 注意点: 1.VPSS分两路通道 2.VENC分两路通道 if(s32ChnNum>1) {s32Ret SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[0], &stSize);if (HI_SUCCESS ! s32Ret){SAMPLE_PRT("SAMPLE_COM…

下载网页视频的软件 下载网页视频的方法

视频已然成为一种非常有力的展示方式,我们想要下载视频内容,需要用到下载网页视频的软件,如今这类软件有很多。下载网页视频的方法,也因为使用的软件不同,方法各异。下面我们就来看详细介绍吧! 一、下载网…

【DC-DC】AP9196 DC-DC升压恒流电源管理芯片 升降压3-12V输出9V LED驱动方案

1,方案;升降压3-12V输出9V LED驱动方案BOM表 ​ 2,方案;升降压3-12V输出9V LED驱动方案线路图 3,产品说明 AP9196 是一系列外围电路简洁的宽调光比升压调光恒流驱动器,适用于 3-40V 输入电压范围的 LED照明领域。AP9196 采用我…

Leveldb代码阅读笔记

整体架构 如上图,leveldb的数据存储在内存以及磁盘上,其中: memtable:存储在内存中的数据,使用skiplist实现。immutable memtable:与memtable一样,只不过这个memtable不能再进行修改&#xff0…

使用模拟电路制造CPU——从硬件到软件的设计

计算机中蕴藏的哲理 最基本的思想是:通过基本电路的接线,确立输入-输出规则,类似函数的入参和返回值,便构成一个功能电路单元。单元套单元组成新单元,如此往复。“一生二,二生三,三生万物”。这…

盒马上市,即时零售最大“变量”

若盒马年内成功上市,等待完成下一轮融资的朴朴超市的处境恐将更加尴尬,另区域性中小商超或将迎来新一轮倒闭潮。 疫情过后,国内消费市场一直处于走弱态势。据商务大数据监测,今年端午假期,部分地区零售和餐饮数据远不及…

数据结构记录和leetcode刷题记录

背景 时间复杂度 算法的执行时间与输入值之间的关系。 参考:算法中七种常见的时间复杂度 - 掘金 参考视频:1. 算法的时间复杂度_哔哩哔哩_bilibili 空间复杂度 算法的存储空间与输入值之间的关系。 参考:2. 算法的空间复杂度_哔哩哔哩_bili…

【花雕】全国青少年机器人技术一级考试备考实操搭建手册1

目录 1、秋千 2、跷跷板 3、搅拌器 4、奇怪的钟 5、起重机 6、烤肉架 7、手摇风扇 8、履带车 9、直升机 10、后轮驱动车 秋千 (闽南语、广东话称千秋)是一种座椅,常见于儿童游乐场、杂技演员马戏团或门廊上放松的地方。 秋千的座位通常悬挂在…

蘑菇街被裁后,成功入职字节跳动的那一天,我哭了...

前言 先说一下个人情况,18 届应届生,通过校招进入到了蘑菇街,然后一待就待了差不多 2 年多的时间,可惜的是今年 4 月份受疫情影响遇到了大裁员,而他也是其中一员。好在早有预感,提前做了准备,之…

C++primer(第五版)第九章(顺序容器)

简单来说存入顺序和取出顺序一致的容器被称为顺序容器. 9.1顺序容器概述 vector和string将元素保存在连续的内存空间中,所以每次添加或删除元素都会非常耗时,但是通过下标计算内存地址来读取元素是非常快的. list和forward_list为链表,添加或删除元素的操作很快,但是不支持元…

QT——使用QListWidget、QListWidgetItem、QWidget实现自定义管理列表

作者:小 琛 欢迎转载,请标明出处 文章目录 需求场景思路描述Qt模块QListWidgetQListWidgetItem自定义QWidget配合QListWidget 例子:实现一个json文件管理窗口 需求场景 因工作需要,开发一个文件管理窗口,要让使用者可…

蓝牙通过串口获取电量!!!

问题:样机短时间出现电池没电情况(异常放电),经过检查,蓝牙在休眠是会有2.1V左右的电压,导致电池电量消耗过快。机器由于有语音功能,播放语音时需要很大电流,给机器装的是两节南孚电…

UE4/5数字人Metahuman与iClone的使用【数字人与动画】

iClone软件下载 iClone 8 是一款由Reallusion开发的3D动画软件,接下来就不多说了,首先进入官网,我们可以看到两个下载的东西,左边是下面这个软件,直接下载即可,右边的我们在后面下载: iClone插…

将DES解密用Python实现

将此段代码用python实现 var CryptoJS require("crypto-js"); var ciphertext "1MpdxK203ZrnyxuJRrYatKSBxHUIi1TSdQF2BQKXOG54plwfaB2GA"; var key CryptoJS.enc.Utf8.parse("11"); var parsedCiphertext CryptoJS.enc.Base64.parse(ciphe…