【机器学习】必会降维算法之:t-分布邻域嵌入(t-SNE)

t-分布邻域嵌入(t-SNE)

  • 1、引言
  • 2、随机梯度下降(SGD)
    • 2.1 简介
      • 2.1.1 定义
      • 2.1.2 应用场景
    • 2.2 原理
    • 2.3 实现方式
    • 2.4 算法公式
    • 2.5 代码示例
      • 解析:
  • 3、总结

1、引言

小屌丝:鱼哥, 啥是降维算法
小鱼:我擦… 你是猴子派来搞笑的吗?
小屌丝:太浮躁了, 当然要自鱼自乐
小鱼:说的不错, 我正好买了钓竿, 咱去试试
小屌丝:我看看你的钓竿
小鱼:给
在这里插入图片描述

小屌丝:哎呦喂, 全套的, 不错啊
小鱼:那你看, 咱做事情,就是这么认真。
小屌丝:佩服,佩服, 在下确实佩服。
小鱼:.走啊, 钓场都联系好了
小屌丝:这么着急啊
小鱼:必须滴,必须得,
小屌丝:那去可以,前提是,跟我说一下t-SNE
小鱼:… 来吧, 时间就是金钱, 开整。

2、随机梯度下降(SGD)

2.1 简介

t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非常流行且有效的机器学习算法,用于高维数据的可视化。

它由Laurens van der Maaten和Geoffrey Hinton在2008年提出,目的是在低维空间(如二维或三维空间)中保持高维数据点的相对距离,从而便于我们通过可视化理解和解释数据的结构。

2.1.1 定义

t-SNE是一种统计方法,用于探索和可视化高维数据的结构。

它通过优化低维表示中的数据点位置,使得原始高维空间中相似的数据点在低维表示中保持接近,而不相似的点则远离。

2.1.2 应用场景

t-SNE的一些典型应用场景:

  • 市场细分与消费者行为分析:营销专家可以通过t-SNE将消费者的购买历史、偏好和行为模式等高维数据降维到二维或三维空间,从而识别不同的消费者群体和市场细分,以及它们之间的潜在关系。
  • 推荐系统:在推荐系统中,t-SNE可以帮助分析和理解用户的行为模式和偏好,进而提升推荐的准确性和个性化程度。通过对用户的历史行为和兴趣进行降维和可视化,可以更直观地了解用户的偏好和需求,从而提供更精准的推荐服务。
  • 生物信息学:在生物信息学领域,t-SNE被用于降维基因表达数据,帮助研究者发现疾病与基因之间的关联,以及生物标记物的识别。通过t-SNE,可以将复杂的基因表达数据映射到低维空间,揭示其中的模式和结构,为疾病的诊断和治疗提供新的思路。
  • 图像处理:t-SNE在图像分析中用于特征提取和降维,可以揭示图像数据中的模式和结构。例如,在图像分类、目标识别和异常检测等任务中,t-SNE可以帮助我们更好地理解和处理图像数据。
  • 社交媒体分析:企业可以利用t-SNE分析社交媒体数据,识别社区结构、舆论动态和影响力人物。通过t-SNE的可视化结果,可以更直观地了解社交媒体上的用户行为和网络结构,从而制定更有效的社交媒体策略。

2.2 原理

t-SNE的核心思想是将高维空间中的欧式距离转换为条件概率来表示相似性。

对于低维空间,t-SNE使用了一种特殊的概率分布——t分布,以更好地处理不同密度区域的数据点,并减少不同簇之间的重叠。

  • 相似度转换为概率:在高维空间中,数据点间的相似度通过高斯联合概率分布来表示;在低维空间中,相似度则通过t分布来表示。
  • KL散度最小化:t-SNE的目标是使得两个概率分布(高维和低维中的)之间的Kullback-Leibler (KL) 散度最小化。这通过梯度下降等优化算法实现。

在这里插入图片描述

2.3 实现方式

t-SNE的实现主要包括以下几个步骤:

  • 计算高维空间中的相似度:使用高斯核函数计算每对数据点之间的相似度,得到条件概率分布P。
  • 定义低维空间中的概率分布:在低维空间中,使用t分布(而非高斯分布)来计算数据点之间的相似度,得到条件概率分布Q。
  • 最小化KL散度:使用KL散度来衡量P和Q之间的差异,并通过梯度下降等优化算法来最小化这个差异。
    可视化:将优化后的低维表示进行可视化,展示数据的结构和关系。

2.4 算法公式

t-SNE中的关键公式主要包括:

  • 高维空间中的条件概率分布P:对于高维空间中的数据点 x i xi xi x j xj xj,它们之间的条件概率 p j ∣ i p_{j|i} pji由下式给出:
    p j ∣ i = exp ⁡ ( − ∥ x i − x j ∥ 2 / 2 σ i 2 ) ∑ k ≠ i exp ⁡ ( − ∥ x i − x k ∥ 2 / 2 σ i 2 ) p_{j|i} = \frac{\exp(-\lVert x_i - x_j \rVert^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-\lVert x_i - x_k \rVert^2 / 2\sigma_i^2)} pji=k=iexp(xixk2/2σi2)exp(xixj2/2σi2)
    其中, σ i \sigma_i σi是以数据点 x i xi xi为中心的高斯方差。
  • 低维空间中的条件概率分布Q:在低维空间中,使用t分布来计算数据点之间的相似度,得到条件概率分布Q。对于低维空间中的数据点 y i yi yi y j yj yj,它们之间的条件概率 q j ∣ i q_{j|i} qji由下式给出:
    q j ∣ i = ( 1 + ∥ y i − y j ∥ 2 ) − 1 ∑ k ≠ i ( 1 + ∥ y i − y k ∥ 2 ) − 1 q_{j|i} = \frac{(1 + \lVert y_i - y_j \rVert^2)^{-1}}{\sum_{k \neq i} (1 + \lVert y_i - y_k \rVert^2)^{-1}} qji=k=i(1+yiyk2)1(1+yiyj2)1
  • KL散度:用于衡量P和Q之间的差异,其公式为:
    K L ( P ∣ ∣ Q ) = ∑ i ∑ j p j ∣ i log ⁡ p j ∣ i q j ∣ i KL(P||Q) = \sum_i \sum_j p_{j|i} \log \frac{p_{j|i}}{q_{j|i}} KL(P∣∣Q)=ijpjilogqjipji

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-05-21
# @Author : Carl_DJ


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

# X的高维数据集,这里用随机数据模拟
np.random.seed(0) # 设置随机种子以确保结果的可复现性
X = np.random.rand(100, 50) # 示例:100个样本,每个样本50维

# 初始化t-SNE模型
# n_components表示目标低维空间的维度(这里设置为2,以便可视化)
# perplexity是t-SNE的关键参数,可以视为近邻的数量,较小的数据集通常推荐使用较小的perplexity值
# n_iter是优化过程的最大迭代次数,增加此值可以提高模型稳定性
tsne = TSNE(n_components=2, perplexity=30, n_iter=1000, random_state=0)

# 对数据进行降维处理
X_tsne = tsne.fit_transform(X)

# 可视化降维后的数据
# X_tsne[:, 0]和X_tsne[:, 1]分别是降维后的两个维度
plt.scatter(X_tsne[:, 0], X_tsne[:, 1])
plt.title('t-SNE visualization of high-dimensional data')
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.show()


解析:

  • TSNE类是scikit-learn中实现t-SNE算法的主要工具。通过调整其参数,可以控制降维过程和结果的不同方面。
  • perplexity参数很重要,它影响着数据点之间的相对距离。选择合适的perplexity值对于获得有意义的可视化结果至关重要。通常,这个值应该根据你的数据集的大小进行调整。
  • n_iter参数指定了算法运行的迭代次数。对于大多数数据集,1000次迭代足以收敛到稳定的解,但是对于某些复杂的数据集,可能需要更多的迭代次数。
  • 在可视化步骤中,我们简单地将降维后的数据点绘制在一个散点图上。每个点的位置都是基于其在降维后空间中的位置。

在这里插入图片描述

3、总结

t-分布邻域嵌入(t-SNE)是一种先进的非线性降维技术,尤其适用于高维数据的可视化。

通过将高维数据映射到低维空间(通常是二维或三维),t-SNE能够保留数据点的局部结构,使得在低维空间中,相似的数据点仍然保持相近的位置。

但是,在实施注意事项

  • 参数调整:t-SNE的性能受到多个参数的影响,如困惑度(perplexity)、学习率(learning rate)等。在实际应用中,需要根据具体的数据集和任务进行参数调整。
  • 数据预处理:在进行t-SNE降维之前,通常需要对数据进行适当的预处理,如标准化、去除噪声等。
  • 可视化解释:虽然t-SNE能够提供直观的可视化结果,但解释这些结果时需要结合领域知识和实际背景进行。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)评测一等奖获得者

关注小鱼,学习【机器学习】&【深度学习】领域的知识。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(二)可视化面板:Grafana的安装

其他相关文章 (一)一套开源的系统监控报警框架:Prometheus安装 什么是grafana Grafana是一个面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器。支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为…

【汽车操作系统】Autosar和商用OS

目录 什么是AUTOSAR? CP AUTOSAR架构 CAN通信 AP AUTOSAR 背景 CP&AP 开发方面的不同: WRLinux介绍 QNX介绍 什么是AUTOSAR? 随着汽车功能越来越多,导致ECU的数量越来越多。1993年的时候,奥迪A8才只有5个ECU现在典型的现代汽车…

用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见

在充满挑战的2024,企业如何以最小化的资源投入和试错成本,挖掘新的增长机会,实现确定性发展? “简单点”是当前商业环境的应对策略,也是奇点云2024 StartDT Day的核心理念。 5月28日,由奇点云主办的2024 S…

分享一个思路,使用插桩技术解决慢查询测试问题

前段时间,我负责测试的系统在生产环境运行出现问题。该系统对于响应时间要求较高,问题发生的时候并发很高,出现大量请求超时,超时请求比例随时间推迟越来越高,最后几乎全部请求都失败。滚动重启了所有进程后&#xff0…

Leetcode刷题2

文章目录 前言寻找两个正序数组的中位数1️⃣ 双指针快速排序2️⃣ 第k小数解法 Z 字形变换1️⃣ 个人解法2️⃣巧妙解法13️⃣巧妙解法2 字符串转换整数 (atoi)1️⃣ 常规方法2️⃣ 作弊方法😫 整数转罗马数字1️⃣ 常规方法:按照给定规则写出判断条件即…

ABB机器人手动模式切换自动模式时,速度自动更改为100%的解决办法

ABB机器人手动模式切换自动模式时,速度自动更改为100%的解决办法 如下图所示,手动切换到自动模式时,示教器上提示:速度将改为100%,但是我们正常使用时的速度可能不是100%,所以还需要手动去更改速度,不太方便。。。 解决办法可参考以下内容: 如下图所示,打开菜单—控制…

防火墙技术基础篇:解析防火墙的网络隔离机制

防火墙技术基础篇:解析防火墙的网络隔离机制 网络安全在现代社会中扮演着重要的角色,保护网络系统、用户和数据免受未经授权的访问、破坏和窃取。个人、企业和国家都需要加强网络安全意识,采取有效措施保护自身的网络安全。随着网络攻击手段…

Golang实现递归复制文件夹

代码 package zdpgo_fileimport ("errors""os""path/filepath""strings" )// CopyDir 复制文件夹 // param srcPath 源文件夹 // param desPath 目标文件夹 // return error 错误信息 func CopyDir(srcPath, desPath string) error {…

张量 t-product 积(matlab代码)

参考文献:Tensor Robust Principal Component Analysis with a New Tensor Nuclear Norm 首先是文章2.3节中 t-product 的定义: 块循环矩阵: 参考知乎博主的例子及代码:(t-product与t-QR分解,另一篇傅里叶对…

200smart【编程入门】

说明 编程时,遇到困难就按【F1】 【I】输入 200smart 上限 i0.0~i31.7 255bit【255个输入点】 i0.0~i31.7 八进制 【布尔 bool 】 ib0~ib127 【单字节】 8bit iw0~iw127 …

六零导航页 file.php 任意文件上传漏洞复现(CVE-2024-34982)

0x01 产品简介 LyLme Spage(六零导航页)是中国六零(LyLme)开源的一个导航页面。致力于简洁高效无广告的上网导航和搜索入口,支持后台添加链接、自定义搜索引擎,沉淀最具价值链接,全站无商业推广,简约而不简单。 0x02 漏洞概述 六零导航页 file.php接口处任意文件上传…

Java面试八股之++操作符是线程安全的吗

操作符是线程安全的吗 操作符本身在Java中并不是线程安全的。这个操作实际上包含三个步骤:读取变量的值、将值加1、然后将新值写回内存。在多线程环境下,如果多个线程同时对同一个变量执行操作,就可能出现竞态条件(race conditio…

TransFormer学习之基础知识:STN、SENet、CBAM、Self-Attention

1.空间注意力机制STN 参考链接:STN(Spatial Transformer Networks) 参考链接:通俗易懂的Spatial Transformer Networks(STN) 核心动机: 在空间中捕获重要区域特征(如图像中的数字),将核心区域进行放大居中,使得结果更…

K8S认证|CKA题库+答案| 7. 调度 pod 到指定节点

7、调度 pod 到指定节点 您必须在以下Clusterd/Node上完成此考题: Cluster Master node Worker node hk8s master …

GS5812G 21V、2A同步降压DC/DC转换器芯片IC

一般描述 该GS5812G是一个同步降压DC/DC转换器与快速恒定的时间(FCOT)模式控制。该器件提供4. 5V至21V的输入电压范围和2A连续负载电流能力。它是恒定时间脉宽调制(PWM)控制器,支持 FCOT模式控制。工作频率取决于输入和输出电压条件。 该GS5812G故障…

桌面藏线大法

1有线改无线: 蓝牙鼠标 蓝牙键盘 蓝牙耳机 2将排插贴到桌子底下 购物软件上搜 3断舍离 不要的电子产品统统扔掉 4 洞洞板和挂钩 这个不用介绍了

uniapp中使用mockjs模拟接口测试总结(swiper轮播图示例)

完整总结下在uni-app中如何使用Mock.js模拟接口测试,这在后台接口未就绪的情况下非常有用。同时也给出个首页swiper轮播图的mock接口使用。网上的文章都不太完整,这里总结下完整的使用示例,同时也支持h5和小程序平台,分享给需要的…

个人感觉对Material设计有用的几个网址

(一) Modular and customizable Material Design UI components for Android GIthub: material-components-android (二) 学习Material设计 Material Design (三) 用于创建Material主题,支持导出多种格式 material-theme-builder

谷歌蜘蛛池是什么?

或称为谷歌爬虫池,是一项专门针对谷歌搜索引擎优化(SEO)的先进技术,这种技术的主要目的是通过建立庞大的网站群体和复杂的链接结构来吸引和维持谷歌的爬虫程序的注意力,其核心是通过这种结构优化,增强特定网…

ESP32 实现获取天气情况

按照小安派AiPi-Eyes天气站思路,在ESP32 S3上实现获取天气情况。 一、在ESP32 S3实现 1、main.c 建立2个TASK void app_main(void) {//lvgl初始化xTaskCreate(guiTask, "guiTask", 1024 * 6, NULL, 5, NULL);//wifi初始化、socket、json处理taskcustom_…