t-SNE降维算法详解(附matlab代码)

2023-11-18

什么是t-SNE

        t-SNE的主要用途是可视化和探索高维数据。 它由Laurens van der Maatens和Geoffrey Hinton在JMLR第九卷(2008年)中开发并出版。 t-SNE的主要目标是将多维数据集转换为低维数据集。 相对于其他的降维算法,对于数据可视化而言t-SNE的效果最好。 如果我们将t-SNE应用于n维数据,它将智能地将n维数据映射到3d甚至2d数据,并且原始数据的相对相似性非常好。与PCA一样,t-SNE不是线性降维技术,它遵循非线性,这是它可以捕获高维数据的复杂流形结构的主要原因。

t-SNE原理

首先,它将通过选择一个随机数据点并计算与其他数据点(|x—x|)的欧几里得距离来创建概率分布。 从所选数据点附近的数据点将获得更多的相似度值,而距离与所选数据点较远的数据点将获得较少的相似度值。 使用相似度值,它将为每个数据点创建相似度矩阵(S1)

由上图可知,我们可以说X1的邻域 N(X1)= {X2, X3, X4, X5, X6},这意味着X2,X3,X4,X5和X6是X1的邻居。 它将在相似度矩阵“ S1”中获得更高的价值。 这是通过计算与其他数据点的欧几里得距离来计算的。

另一方面,X20远离X1。 这样它将在S1中获得较低的值。

其次,它将根据正态分布将计算出的相似距离转换为联合概率。

通过以上的计算,t-SNE将所有数据点随机排列在所需的较低维度上。

t-SNE将再次对高维数据点和随机排列的低维数据点进行所有相同的计算。 但是在这一步中,它根据t分布分配概率。 这就是名称t-SNE的原因。t-SNE中使用t分布的目的是减少拥挤问题,t分布→视觉上t分布看起来很像正态分布,但尾部通常更胖,这意味着数据的可变性更高。

对于较低维的数据点,还将创建一个相似度矩阵(S2)。然后该算法将S1与S2进行比较,并通过处理一些复杂的数学运算来使S1与S2之间有所不同。包括使用两个分布之间的Kullback Leibler散度(KL散度)作为损失函数运行梯度下降算法。使用KL散度通过将两个分布之间相对于数据点位置的值最小化,帮助t-SNE保留数据的局部结构。

算法要点

t-SNE算法具有扩展密集簇并缩小稀疏簇的特点。

t-SNE不会保留群集之间的距离。

t-SNE是一种不确定性算法或随机算法,这就是为什么每次运行结果都会略有变化的原因。

即使它不能在每次运行中保留方差,也可以使用超参数调整来保留每个类之间的距离。

该算法涉及许多计算和计算。 因此,该算法需要大量时间和空间来计算。

困惑度(perplexity)是控制数据点是否适合算法的主要参数。 推荐范围是(5–50)。

困惑度应始终小于数据点的数量。

低困惑度→关心本地结构,并关注最接近的数据点。

高度困惑→关心全局结构。

t-SNE可以巧妙地处理异常值。

 matlab代码

clear all;
close all;
clc;

% 载入鸢尾花数据
A=xlsread('E:\IP9')
% load plot
% example1
% 欧式距离tsne结果
rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','euclidean');
figure;
gscatter(Y(:,1),Y(:,2),species)
title('Euclidean')




% example2
% 对比四种距离下的tsne降维效果
rng('default') % for reproducibility

Y = tsne(meas,'Algorithm','exact','Distance','mahalanobis');
figure
subplot(2,2,1)
gscatter(Y(:,1),Y(:,2),species)
title('Mahalanobis')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','cosine');
subplot(2,2,2)
gscatter(Y(:,1),Y(:,2),species)
title('Cosine')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','chebychev');
subplot(2,2,3)
gscatter(Y(:,1),Y(:,2),species)
title('Chebychev')

rng('default') % for fair comparison
Y = tsne(meas,'Algorithm','exact','Distance','euclidean');
subplot(2,2,4)
gscatter(Y(:,1),Y(:,2),species)
title('Euclidean')

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

t-SNE降维算法详解(附matlab代码) 的相关文章

  • 在 Matlab 中将绘图从高斯混合变换为均匀分布

    考虑以下抽签2x1Matlab 中的向量 其概率分布是两个高斯分量的混合 P 10 3 number draws v 1 First component mu a 0 0 5 sigma a v 0 0 v Second component
  • 如何使用神经网络保存 Sift 特征向量进行分类

    SIFT 特征的 Matlab 实现发现于http www cs ubc ca lowe keypoints http www cs ubc ca lowe keypoints 在 stackoverflow 的帮助下 我想将功能保存到 m
  • FFT 的功率谱密度

    我有一段代码可以获取部分信号的 FFT 现在我正在尝试获取 PSD Fs 44100 cj sqrt 1 T 6 dt 1 Fs left test 1 right test 2 time 45 interval 636 w range t
  • 在 Matlab 中保存当前运行的脚本

    有没有办法保存Matlab中当前运行的脚本 我有一个脚本 它会自动备份一组脚本 但如果我更改了当前脚本 则保存的版本将过期 也许可以调用一些java Thanks 在 Yair Altman 网站上的某个地方 请参阅我的其他答案中的链接 他
  • Matlab:掩码/创建一个知道其原点且具有一定半径的圆形 roi

    只是一个简单的问题 我有一张图像 并且提取了某个点 特征 我知道每个帧中该点的坐标 说 x1 和 y1 我需要一个圆形 ROI 形式 该点在图像上具有我选择的半径 我尝试了 impoly 和 roipoly 当我知道图像中的要点时 不知道如
  • 使用 GPU 进行 Matlab 卷积

    我用gpuArray尝试了matlab的卷积函数conv2 convn 例如 convn gpuArray rand 100 100 10 single gpuArray rand 5 single 并将其与 cpu 版本 convn ra
  • matlab mex 文件和 C++ dll (Windows)

    我有一个带有 Test 类的 DLL 标题 class MY EXPORT Test public int doit const string str 和来源 int Test doit const string str return in
  • 在 MATLAB 中检索 spfun、cellfun、arrayfun 等中的元素索引

    有什么办法可以找回index调用函数的元素的cellfun arrayfun or spfun行为 即检索函数范围内元素的索引 为了简单起见 假设我有以下玩具示例 S spdiags 1 4 0 4 4 f spfun x 2 x S 它构
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • MATLAB中如何画水平线和垂直线?

    我目前正在尝试在 MATLAB 中绘制简单的垂直线和水平线 例如 我想绘制线 y 245 我该怎么做呢 MATLAB 根据您提供的向量逐点进行绘图 因此 要创建一条水平线 您需要改变x同时保持y对于垂直线恒定 反之亦然 xh 0 10 yh
  • Matlab Mex文件编译

    我正在尝试编译一个 mex 文件以在 matlab 中使用套接字连接 问题是它总是说我没有安装sdk或编译器 但我已经安装了 Visual Studio 2010 Express Visual Studio 2012 Express Vis
  • 扩展 MATLAB 函数名称的最大长度

    我编写了一个 MATLAB 程序 可以动态创建自定义 MATLAB 函数 并使用以下命令在其他 MATLAB 实例中启动它们unix命令 我使用这个程序来自动化 fMRI 神经影像分析 使用 SPM8 for MATLAB 一切正常 但是
  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • Matlab 字段名索引[重复]

    这个问题在这里已经有答案了 所以我有一个包含多个表的元胞数组 我试图访问表的第一个列名称 c table1 table2 table3 以下两行都给了我错误 fieldnames c 1 1 fieldnames c 1 1 Error i
  • 如何在没有安装Visual Studio的另一台机器上使用Visual Studio生成的dll?

    我已经在 Visual Studio 2012 中生成了动态库 我想在另一台机器上使用该库 但我不想在远程机器上安装 Visual Studio 我有 mex 库和 dll 我想运行一个使用这两个库的脚本 当我运行脚本时 出现以下错误 缺少
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL

随机推荐

  • C++智能指针:shared_ptr用法详解

    C 智能指针 shared ptr用法详解 shared ptr是C 11里的新特性 其包装了new操作符在堆上分配的动态对象 如 shared ptr
  • MATLAB自动生成标记点

    在测试算法准确性的过程中 需要在图像上生成一些大小已知的标记点来识别 同时又需要生成的标记点位置随机 以测试算法的适用性 本人搜索自动生成标记点没有找到相关内容 因此将完成思路整理如下 随机生成点位置 MATLAB生成随机点很容易实现 使用
  • 解决django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.3 or newer is required; you have 1.0.

    最近在配置环境时遇到这样的问题 在网上查找了很多资料 比如注释base py中的代码 又或是添加如下代码 这些方法对我来说都不管用 后面又查到说可以降低django的版本 随后我重新安装了django2的版本 然后报以下错误 TypeErr
  • layui php+PHPExcel 拉取excel表格数据一键导入

    需求 大量数据需要导入数据库 直接拉取excel表格进行读取数据并存入数据库 过程中不对文件进行存储 使用上传过程中的缓存文件 前端代码 layui php
  • vs2019配置Qt5开发环境

    使用visual studi 2019配置qt5开发环境 以及创建qt项目s 一 下载安装visual Studio2019 1 进入visual studio 官网下载community 2019版本 安装器 2 下载完成后启动visua
  • Vue2里的computed的传参方法

    在使用element ui的时候 后台返回的字段需要你来判断显示什么 这时候可能就需要计算属性了 但是使用computed无法传值 可以通过computed定义的函数里面返回一个函数来接受传值 进行判断 如果直接使用computed传参是报
  • 使用nrm管理npm仓库

    引言 目前遇到了这样的问题 因为个人和公司的npm仓库环境不一样 导致使用时需要频繁的切换npm指向 所以 为了提高工作效率 就采用了nrm的方式来管理多个npm仓库 老规矩 先举一个 For example 当前有两个仓库指向 分别是 公
  • PyCharm安装教程最新版(社区版)

    1 官网下载地址 PyCharm the Python IDE for Professional Developers by JetBrains 2 安装 直接Install进行安装 最后点击finish即可 3 新建项目并测试 新建一个项
  • 线程安全分析

    1 成员变量和静态变量是否线程安全 如果它们没有被共享 则线程安全 如果它们被共享了 根据它们的状态是否能够改变 又分两种情况 如果只有读操作 则线程安全 如果有读写操作 则这段代码是临界区 需要考虑线程安全 2 局部变量是否线程安全 局部
  • 编译工具Make

    文章目录 make指令 指定目标 隐藏指令 通配符 伪目标 多目标 Makefile的命令 变量 变量的基础 赋值变量 函数调用 字符串操作函数 文件名操作函数 循环函数 条件判断函数 条件判断语句 隐式规则 隐式规则举例 隐式规则中的变量
  • Linux性能监控 -- vmstat命令

    文章目录 示例 字段说明 示例 输入vmstat命令后 第一个参数表示每1秒获取一次服务器资源 第二个参数表示总共获取10次 若第二个参数不设置 则表示持续获取服务器资源 字段说明 数据项 含义 r 表示有多少任务需要CPU执行 通常与后5
  • Button与ImageButton的点击监听事件-onClick

    Button与ImageButton自身都有一个onClick点击事件 通过自身的 setOnClickListener OnClickListener 的方法添加点击事件 所有控件都有一个OnClick事件 通过点击事件的监听可以实现点击
  • 吐血总结《Mysql从入门到入魔》,图文并茂

    文章目录 1 数据库操作 1 1显示数据库 1 2 创建数据库 1 3 使用数据库 1 4 查看当前数据库 1 5 删除数据库 2 表操作 2 1 创建表 2 2 更新表 2 2 1 添加列 2 2 2 删除列 2 3 查看表结构 2 4
  • CTF基本赛制与题型

    CTF简介 CTF的全称为Capture The Flag 即夺旗赛 CTF竞赛活动蓬勃发展 已成为了锻炼信息安全技术 展现安全能力和水平的绝佳平台 CTF号称计算机界的奥林匹克 CTF目标 CTF参赛队伍的目标为获取尽可能多的flag 参
  • 随机抽样一致性算法(RANSAC)示例及源代码

    作者 王先荣 大约在两年前翻译了 随机抽样一致性算法RANSAC 在文章的最后承诺写该算法的C 示例程序 可惜光阴似箭 转眼许久才写出来 实在抱歉 本文将使用随机抽样一致性算法来来检测直线和圆 并提供源代码下载 一 RANSAC检测流程 在
  • maven死活下载不了jar包的问题

    对应 问题6 选择适合自己的更新方式 通过排除法排除过的问题 1 idea版本问题 换了4个版本都有问题 2 电脑问题 差点重装 3 网络问题 换了手机网络一样不行 4 仓库 xml配置 或者maven插件版本的问题 试了很多版本 包括id
  • Spring Boot整合fastjson

    SpringBoot在构建RESTful风格的web服务时 默认使用的是Jackson作为JSON解析器 个人使用比较习惯的 json 框架是 fastjson 所以 spring boot 默认的 json 使用起来就很陌生了 所以很自然
  • Dynamics CRM: 使用setFilterXml来过滤需要在表单的Subgrid控件中进行展示的记录

    我们经常在表单中会用到subgrid控件 通常在一个表单中插入subgrid用来显示另外一个实体中的记录 而显示的内容我们是通过定义不同的视图来进行显示的 也可以通过javascript来进行一些控制 今天这篇博文我们使用另外一种方法来实现
  • KDUpdater 入门 (Qt5)

    KDTools 2 3 0 是KDAB公司的一个Qt4工具包 采用商业 GPL LGPL 三重授权 http www kdab com kdab products kd tools 该工具包中包含一个KDUpdater的组件 为Qt程序的自
  • t-SNE降维算法详解(附matlab代码)

    什么是t SNE t SNE的主要用途是可视化和探索高维数据 它由Laurens van der Maatens和Geoffrey Hinton在JMLR第九卷 2008年 中开发并出版 t SNE的主要目标是将多维数据集转换为低维数据集