【降维算法UMAP】调参获得更适合的低维图

news2024/11/16 9:47:54

目录

UMAP降维介绍

UMAP的主要步骤

1. 学习高维空间中数据点间的距离

2. 构建高维图

local_connectivity参数

n_neighbors参数

3. 构建低维图

计算最小距离

min_dist超参数

最小化成本函数

R语言中的RunUMAP函数

关键参数

Reference

UMAP降维介绍

为什么要降维:单细胞转录组数据往往是数千*数万(细胞数*基因数)的矩阵数据,降维可以帮助可视化和理解大型高维数据集。

降维算法:在单细胞转录组生信分析中,常见的降维算法有两种,UMAP(Uniform Manifold Approximation and Projection) 和T-SNE(t-distributed stochastic neighbor embedding)。UMPA 运算速度会更快,并且在保留数据结构的同时提供了更好的扩展性。

UMAP的主要步骤

  1. 学习高维空间中的流形结构
  2. 找到该流形的低维表示,优化低维图

1. 学习高维空间中数据点间的距离

UMAP首先使用Nearest-Neighbor-Descent算法来找到每个数据点的最近邻。这个过程可以通过调整UMAP的超参数n_neighbors来指定我们想要使用多少个近邻点。

  • 影响因素:试验n_neighbors的数量是非常重要的,因为它会影响UMAP如何平衡数据的局部和全局结构。它通过限制局部邻域的大小来实现,在尝试学习流形结构时起到一定的调节作用。

  • n_neighbors的作用:小的n_neighbors值表示我们想要一个非常局部的解释,以准确捕捉数据结构的细节。而较大的n_neighbors值则意味着我们的估计将基于更大的区域,因此在整个流形中更广泛地准确

2. 构建高维图

UMAP假设数据点在流形上均匀分布,即它们之间的空间根据数据的密集程度而变化。涉及两个关键超参数local_connectivity和n_neighbors的作用:

local_connectivity参数

  • 理解为下限:这个参数是用来控制每个数据点至少连接到另一个点的确定性程度。
  • 默认值为1:意味着每个点都100%确定地连接到另一个点,也就是连接的数量的最低要求。

n_neighbors参数

  • 理解为上限:这个参数控制一个点直接连接到其第几个邻居的可能性。
  • 默认值为15:这表示一个点直接连接到它的第16个邻居的可能性为0%,因为在构建UMAP使用的邻域图时,它已经处在局部区域之外。例如2到15:这个范围表示点连接到其第2个到第15个邻居之间的确定性程度。它介于0%和100%之间,表示一定程度的确定性,但不是完全确定。

3. 构建低维图

从高维空间学习近似流形后,UMAP 的下一步将数据从高维空间投影到低维空间。

计算最小距离

在投影到低维空间时,UMAP希望保持流形上的距离与全局坐标系下的欧几里得距离相对应。

目标:不改变距离,而是希望流形上的距离在投影后仍然是在全局坐标系下的标准欧几里得距离。
 

min_dist超参数

为了实现这一目标,UMAP引入了一个名为min_dist(默认值为0.1)的超参数,用于定义低维嵌入点之间的最小距离。通过这个参数,可以控制投影到低维空间后点的最小分布,以避免低维嵌入中许多点相互重叠的情况。

 

最小化成本函数

在指定了最小距离后,UMAP算法开始寻找更好的低维流形表示。为了实现这一目标,UMAP通过最小化特定的成本函数(也称为交叉熵)来进行投影。

成本函数:通过最小化这个成本函数,UMAP寻找边的最优权值,这些权值决定了在低维表示中的点之间的连接。

优化过程:这个过程可以通过随机梯度下降法来进行优化。随机梯度下降法是一种优化方法,用于找到使成本函数最小化的参数值,即在这里是寻找使得低维表示最符合原始高维数据结构的参数。

R语言中的RunUMAP函数

RunUMAP(object, ...)

## Default S3 method:
RunUMAP(
object,
reduction.key = "UMAP_",
assay = NULL,
reduction.model = NULL,
return.model = FALSE,
umap.method = "uwot",
n.neighbors = 30L,
n.components = 2L,
metric = "cosine",
n.epochs = NULL,
learning.rate = 1,
min.dist = 0.3,
spread = 1,
set.op.mix.ratio = 1,
local.connectivity = 1L,
repulsion.strength = 1,
negative.sample.rate = 5,
a = NULL,
b = NULL,
uwot.sgd = FALSE,
seed.use = 42,
metric.kwds = NULL,
angular.rp.forest = FALSE,
verbose = TRUE,
...
)

### 参数说明:

- object:一个物体
- ...:传递给其他方法和UMAP的参数

- reduction.key:维度缩减键,指定维度名称的数字之前的字符串。默认为UMAP

- assay:提取数据的分析,或者用于在图形上运行UMAP构建图形的分析

- reduction.model:包含UMAP模型的DimReduc对象

- return.model:UMAP是否返回uwot模型

- umap.method:要运行的UMAP实现。
  - "uwot":运行UMAP通过uwot R包
  - "uwot-learn":运行UMAP通过uwot R包并返回学习的UMAP模型
  - "umap-learn":运行python umap学习包的Seurat包装器

- n.neighbors:局部近似流形结构中使用的相邻点的数量。一般应在5到50之间。

- n.components:要嵌入的空间的尺寸。

- metric:度量,用于衡量输入空间中的距离。

- n.epochs:用于优化低维嵌入的训练次数。根据数据集大小选择一个值(大数据集为200,小数据集为500)。

- learning.rate:嵌入优化的初始学习率。

- min.dist:控制允许嵌入压缩点的程度。默认0.3,越小则每个cluster越聚集。合理的值在 0.001 到 0.5 的范围内,0.1 是合理的默认值。

- spread:嵌入点的有效比例。

- set.op.mix.ratio:插值作为集合运算的参数,用于组合局部fuzzy单形集以获得全局fuzzy单形集。

- local.connectivity:本地连接性,即应假定在本地级别连接的最近邻居的数量。

- repulsion.strength:负样本的加权。

- negative.sample.rate:每个阳性样本要选择的阴性样本数。

- a:用于控制嵌入的参数。

- b:用于控制嵌入的参数。

- uwot.sgd:设置uwot::umap。

- seed.use:设置随机种子,默认为42。

- metric.kwds:传递给度量的参数字典。

- angular.rp.forest:是否使用角度随机投影林来初始化近似最近邻搜索。

- verbose:控制冗长输出。

- dims:用作输入特征的维度。

- reduction:用于UMAP输入的降维方法,默认为PCA。

- features:在特征子集上运行UMAP(而不是在缩减的维度集上运行)。

- graph:要在其上运行UMAP的图形的名称。

- nn.name:运行UMAP的knn输出的名称。

- slot:用于提取数据的插槽,默认为数据槽。

- reduction.name:在Seurat对象中存储维度缩减的名称。

不同min_dist参数和n_neighbors参数的效果图 

关键参数

object:

含义:要进行降维的Seurat对象或矩阵。
类型:Seurat对象或矩阵。


dims:

含义:要使用的维度数。
类型:整数向量。
默认值:NULL,表示使用所有维度。


n_neighbors:

含义:在计算邻域时要考虑的最近邻居数目。
类型:整数。
默认值:15。


metric:

含义:计算距离的度量方法。
类型:字符串。
默认值:"euclidean"。


min_dist:

含义:最小的距离。
类型:浮点数。
默认值:0.5。


spread:

含义:在高维空间中的分布。
类型:浮点数。
默认值:1.0。


n_components:

含义:输出的UMAP维度数。
类型:整数。
默认值:2。

 

Reference

[1] McInnes, L, Healy, J, UMAP: Uniform Manifold Approximation and Projection for Dimension Reduction, ArXiv e-prints 1802.03426, 2018

[2] Kobak, D., Berens, P. The art of using t-SNE for single-cell transcriptomics. Nat Commun 10, 5416 (2019). https://doi.org/10.1038/s41467-019-13056-x

[3] A Guide to Analyzing Single-cell Datasets, John F. Ouyang, January 2023

http://www.idata8.com/rpackage/Seurat/RunUMAP.html

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

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

相关文章

最长上升子序列(LIS)简介及其例题分析

一.最长上升子序列(LIS)的相关知识 1.最长上升子序列(Longest Increasing Subsequence),简称LIS,也有些情况求的是最长非降序子序列,二者区别就是序列中是否可以有相等的数。假设我们有一个序…

[数据结构]栈

1.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈&#…

【UEFI实战】BIOS中的openssl

BIOS中的openssl openssl是一个密码库或者密码工具,在密码学基础_hex string is too short, padding with zero bytes t-CSDN博客介绍了基本的密码学概念已经openssl工具的使用,而这里将介绍BIOS下如何使用openssl。 在开源的BIOS代码库EDK中包含一个C…

数据结构作业复盘1:字符串疑难杂症小汇总(字符串赋值,指针数组...)

学校里开始上数据结构了,一开始是从C语言一些相关的基础开始讲起。第一次作业主要是字符串相关的基础知识以及编程题目。先做了一部分,整理了一下一些字符串隐含的知识和一些易误易混的概念,算是给自己的一个复盘和归纳。 strcpy函数相关 首…

Linux系统编程之多线程

目录 1、进程与线程 2、线程的优势与使用理由 3、多线程的使用 3.1 线程的使用 1.线程创建函数 2.线程退出函数 3.线程的等待 4.线程脱离 5. 线程ID获取及比较 6.示例 3.2 互斥锁的应用 1.互斥锁相关API 2.示例 3.3 条件变量的使用 1. 创建及销毁条件变量 2. 等待…

数字化转型导师坚鹏:证券公司数字化领导力提升之道

证券公司数字化领导力提升之道 ——融合中西智慧,践行知行合一思想,实现知行果合一 课程背景: 很多证券公司存在以下问题: 不知道证券公司数字化思维如何提升? 不清楚证券公司数字化领导力模型内涵?…

加密与安全_探索数字证书

文章目录 Pre概述使用keytool生成证书使用Openssl生成证书 (推荐)证书的吊销小结 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 04 证书授权颁发机构(CA) & 数字证书 PKI - 数字签名与数字证…

土壤侵蚀量化评估

根据之前的文章,已经算出了R、K、LS、C、P 现在计算土壤侵蚀,将几个前期制作好的因子的TIFF文件,用栅格计算器相乘 发现局部地区存在轻度侵蚀,大部分区域是微度侵蚀 然后对比了一下范围 其中的几个因子都在文献范围内,说明计算结果并未出错,可能就是研究区正常范围和结…

《数字图像处理(MATLAB版)》相关算法代码及其分析(1)

目录 1 自适应中值滤波算法 1.1 函数定义 1.2 输入参数检查 1.3 初始化 1.4 自适应中值滤波过程 1.5 处理剩余未处理的像素 1.6 总结 2 计算输入数组的平均值 2.1 函数定义 2.2 注释 2.3 输入验证 2.4 计算平均值 2.5 总结 3 基于高斯模型的贝叶斯分类器 3.1 函…

【搭建 Hbase 集群】

搭建 Hbase 集群 一、准备工作二、三台服务器之间的 SSH 免密登录1.修改hosts文件添加DNS映射2.在每台服务器上生成 SSH 密钥对3.将公共密钥(通常为 ~/.ssh/id_rsa.pub)复制到目标服务器上4.从本地使用 SSH 命令无需密码连接到目标服务器 二、安装JDK1.执…

Linux/Docker 修改系统时区

目录 1. Linux 系统1.1 通过 timedatectl 命令操作1.2 直接修改 /etc/localtime 文件 2. Docker 容器中的 Linux 操作环境: CentOS / AlmaOSMySQL Docker 镜像 1. Linux 系统 1.1 通过 timedatectl 命令操作 使用 timedatectl list-timezones 命令列出可用的时区…

Learning from Unlabeled 3D Environments forVision-and-Language Navigation

这篇论文是关于高级指令的 摘要 在视觉和语言导航 (VLN) 中,实体代理需要按照自然语言指令在真实的 3D 环境中进行导航。现有 VLN 方法的一个主要瓶颈是缺乏足够的训练数据,导致对未见过的环境的泛化效果不理想。虽然 VLN 数据通常是手动收集的&#x…

2024年 前端JavaScript Web APIs 第一天 笔记

1.1 -声明变量const优先 1.2 -DOM树和DOM对象 1.3 -获取DOIM元素 1.4 -DOM修改元素内容以及年会抽奖 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content&quo…

初识面相对象深入理解、构造方法--学习JavaEE的day12

day12 一、初识面相对象深入理解 需求&#xff1a; 创建人类的对象&#xff0c;并操作对象 分析&#xff1a; 人类 - Person 属性&#xff1a;name、sex、age 方法&#xff1a;eat、sleep 场景&#xff1a;创建多个对象&#xff0c;去操作对象 public class Person {//成员变…

9、taocms代码审计

一、XSS 1、DOM型xss 限制 无复现 payload: aa)alert(1)( 触发的参数&#xff1a;name代码 根据路由找到对应的文件&#xff0c;在api.php里接受全局变量action&#xff0c;最终赋值给$m,判断 如果$m不在数组就结束&#xff0c;新建方法复制给$model。检查类的方法是否存…

2024 年广东省职业院校技能大赛(高职组)“云计算应用”赛项样题 2

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&#…

【全局异常处理记录】⭐️通过自定义全局处理器有效统一各种异常并记录

目录 前言 方案 示例 测试 总结 前言 朋友们大家好啊&#xff0c;随着项目的进行&#xff0c;接口也是越来越多了&#xff0c;每个接口无论调用成功与否&#xff0c;都要有相应的应对措施&#xff0c;总不能出错的时候返回一堆异常信息给调用者&#xff0c;所以每个接口都…

Python算法100例-3.2 水仙花数

完整源代码项目地址&#xff0c;关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展7.巧用字符串技巧 1&#xff0e;问题描述 输出所有的“水仙花数”。所谓的“水仙花数”是指一个三位数&#xff0c;其各位数字的立方和等于该…

【机器学习】有监督学习算法之:支持向量机

支持向量机 1、引言2、决策树2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;泡澡啊。 小鱼&#xff1a;不去 小屌丝&#xff1a;… 此话当真&#xff1f; 小鱼&#xff1a;此话不假 小屌丝&#xff1a;到底去还是…

奔跑吧,前端er!前端五大方向技能罗列,webGL、AI、桌面、游戏

经常看到头条上前端们争论各种框架的优劣&#xff0c;然后相互争吵不休&#xff0c;其实技术也好&#xff0c;框架也好&#xff0c;都是服务于项目需求的&#xff0c;争论的铁子们都站在自己的项目角度来品评工具&#xff0c;肯定是公说公有理婆说婆有理啦。 技术和框架是中性的…