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

news2024/11/21 2:30:55

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

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

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

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

相关文章

AI三级淋巴结构·预测癌症预后和免疫疗法反应

小罗碎碎念 今天分享的这篇文章对于想从事三级淋巴结交叉研究等同学和老师来说,具有非常重要的参考价值,反正我写完这篇推文以后,觉得受益匪浅。 其中重点需要提醒大家关注的是——从2D组织切片计算的TLS面积已被验证为多种肿瘤类型的预后和…

pycharm打开服务器(linux)上的项目

先在本地打开项目 一、项目文件配置 tools-deployment-configuration 新增一个sftp连接 测试服务器是否可以连通 mappings中设置本地路径和服务器上的路径 二、环境配置 先参考文章 复现论文的conda环境(win和联网、离线linux)_conda复现环境-CSDN博…

bugku 网络安全事件应急响应

开启靶场: 开始实验: 使用Xshell登录服务器,账号及密码如上图。 1、提交攻击者的IP地址 WP: 找到服务器日志路径,通常是在/var/log/,使用cd /var/log/,ls查看此路径下的文件. 找到nginx文件夹。 进入ng…

SAP Credit Management-Reconcile Documented Credit Decisions

ECC 升级S4后,经过事后迁移后,出现如下报错 找到了这里的配置路径: DCD settings – to maintain/complete Create Profile for Case Search -> no entry UKM_CASE – DCD search -> no search fields BC set UKM_DCD_CUST not activated -> transactio

温故而知新-秒杀项目篇【面试复习】

温故而知新-秒杀项目篇【面试复习】 前言版权推荐温故而知新-论坛项目篇【面试】秒杀项目中注册模块怎么实现的?秒杀项目中登录模块怎么实现的?秒杀项目中显示登录用户信息怎么实现的?SessionStorage是什么?为什么不用session而用token什么是…

2024年电工杯高校数学建模竞赛(B题) 建模解析| 大学生平衡膳食食谱的优化设计 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长,就读于上海交通大学,截至目前已经帮200人完成了建模与思路的构建的处理了~ 本篇文章是鹿鹿学长经过深度思考,独辟蹊径,实现综合建模。独创复杂系统视角,帮助你解决电工杯的难关呀。 本题&…

南京中科微Ci2451+11dbm发射功率 国产8位RISC内核无线MCU芯片

Ci2451是一款在现有的2.4GHz射频芯片基础上,内部集成8位RISC内核(精简指令集)MCU的SOC芯片。 Ci2451引脚图↑ 无线MCU解决方案,集成丰富的MCU资源、更小尺寸,来满足设计中的各种内存、功率、尺寸要求,充分…

QCC30xx如何实单声道MONO输出

有客户提出需要将QCC30xx的输出改为单声道输出(我们的QCC30xx是双声道输出,如果采用单声道输出,我们需要进行混音操作)。 客户采用目前最新的 SDK上将INCLUDE_STEREO屏蔽掉,直接进行编译,会报一系列的问题,编译不过。 也有很多客户尝试在各个模式下强制将通道输出设置…

cert-s

绕不过,啊对对对。 安全公司的东西都是无敌的。 菜你就多练。

C中十进制转十六进制示例

uint8_t QR_code_RxBfr[255]{0}; uint8_t TouchCode[100];memcpy (&Sys.TouchCode[0], &QR_code_RxBfr[0], Sys.QR_code_Len);Str &Sys.TouchCode[TmpVble];Sys.Card_ID 0; while(0 ! isdigit(*Str)){Sys.Card_ID Sys.Card_ID*10 *Str - 0;Str;} 最后在通过以下…

Springboot阶段项目---《书城项目》

一 项目介绍 本项目采用集成开发平台IntelliJ IDEA开发了在线作业成绩统计系统的设计与实现,实现了图书商城系统的综合功能和图形界面的显示,可以根据每个用户登录系统后,动态展示书城首页图书,实现了分类还有分页查询&#xff0c…

CAN报文,Motorola和Intel格式

CAN报文,Motorola和Intel格式 车载测试系列:CAN报文之Intel格式与Motorola格式 当信号在一个字节内实现(信号不跨字节)时,Intel模式和Motorola模式的信号字节顺序,完全一样: 信号的高位&am…

leetcode-顺时针旋转矩阵-111

题目要求 思路 1.假设现在有一个矩阵 123 456 789 2.我们可以根据19这个对角线将数据进行交换&#xff0c;得到矩阵 147 258 369 3.然后将矩阵每一行的数据再翻转&#xff0c;得到矩阵 741 852 963 代码实现 class Solution { public:vector<vector<int> > rot…

【HMGD】STM32/GD32 I2C DMA 主从通信

STM32 I2C配置 主机配置 主机只要配置速度就行 从机配置 从机配置相同速度&#xff0c;可以设置第二地址 因为我的板子上面已经有了上拉电阻&#xff0c;所以可以直接通信 STM32 I2C DMA 定长主从通信代码示例 int state 0; static uint8_t I2C_recvBuf[10] {0}; stat…

ROS2安装教程之强大辅助

第一次接触ROS2&#xff0c;安装时跟这个&#xff0c;跟那个教程&#xff0c;真的是一把泪&#xff0c;耗费数多个小时&#xff0c;依旧存在一些或多或少的问题&#xff0c;最主要的是永远提示 直到遇到了一个鱼香大佬&#xff0c;是真的香啊&#xff0c;好不容易找到的资料&a…

深度学习——图像分类(CNN)—训练模型

训练模型 1.导入必要的库2.定义超参数3.读取训练和测试标签CSV文件4.确保标签是字符串类型5.显示两个数据框的前几行以了解它们的结构6.定义图像处理参数7.创建图像数据生成器8.设置目录路径9.创建训练和验证数据生成器10.构建模型11.编译模型12.训练模型并收集历史13.绘制损失…

145.栈和队列:删除字符串中的所有相邻重复项(力扣)

题目描述 代码解决 class Solution { public:string removeDuplicates(string s) {// 定义一个栈来存储字符stack<char> st;// 遍历字符串中的每一个字符for(int i 0; i < s.size(); i){// 如果栈为空或栈顶字符与当前字符不相同&#xff0c;则将当前字符入栈if(st.e…

SpringBoot项目中redis序列化和反序列化LocalDateTime失败

实体类中包含了LocalDateTime 类型的属性&#xff0c;把实体类数据存入Redis后变成这样&#xff1a; 此时&#xff0c;存入redis不会报错&#xff0c;但是从redis获取的时候&#xff0c;会报错&#xff1a; com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Ca…

AI - Transformer架构工作原理

一、概述 Transformer是由Vaswani等人在2017年提出的一种基于自注意力机制&#xff08;Self-Attention Mechanism&#xff09;的深度学习网络架构的大模型&#xff0c;被广泛应用于自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;如机器翻译、文本生成等任务。它摒弃…

LabVIEW高温往复摩擦测试系统中PID控制

在LabVIEW开发高温往复摩擦测试系统中实现PID控制&#xff0c;需要注意以下几个方面&#xff1a; 1. 系统建模与参数确定 物理模型建立: 首先&#xff0c;需要了解被控对象的物理特性&#xff0c;包括热惯性、摩擦系数等。这些特性决定了系统的响应速度和稳定性。实验数据获取…