零基础入门转录组数据分析——机器学习算法之boruta(筛选特征基因)

news2024/11/15 8:22:35

零基础入门转录组数据分析——机器学习算法之boruta(筛选特征基因)

目录

  • 零基础入门转录组数据分析——机器学习算法之boruta(筛选特征基因)
    • 1. boruta基础知识
    • 2. boruta(Rstudio)——代码实操
      • 2. 1 数据处理
      • 2. 2 构建boruta模型
      • 2. 3 boruta结果简单可视化
    • 注:配套资源只要改个路径就能运行,本人已检测过可以跑通,请放心食用,食用过程遇到问题,可先自行百度,实在解决不了可以私信



1. boruta基础知识

1.1 boruta是什么?
Boruta算法是一种基于随机森林的特征选择方法,旨在从给定的特征集合中找到真正重要的特征,并区分出无关的特征

1.2 boruta的算法原理是什么?
Boruta算法的核心思想是通过比较原始特征与其对应的“影子特征”(shadow features)在随机森林中的重要性,来确定哪些特征是真正重要的。影子特征是通过将原始特征的顺序打乱、加入噪声和随机化来生成的,它们模拟了随机选择的特征,用于与原始特征进行比较

1.3 boruta的优势?

  • 自动化特征选择: Boruta算法可以自动进行特征选择,无需手动调整参数或选择特定的特征子集,这有助于减少人工干预。
  • 全相关特征选择: Boruta算法能够识别与目标变量全相关的特征,这些特征可能对预测模型具有显著贡献,有助于更全面地了解特征集合中的重要信息。
  • 避免过拟合: 与传统的特征选择方法相比,Boruta算法通过使用随机森林和自助重采样技术可以有效地处理大规模数据集并保持泛化能力,从而避免过拟合问题。
  • 提高模型可解释能力: Boruta算法提供了每个特征的重要性分数,这有助于理解特征之间的相对重要性并解释模型预测结果。

1.4 boruta的本质是什么?
筛选出一些关键特征,这些关键特征相对于其他特征来说,区分样本的能力更加精确。

举个栗子: 输入了8个基因的表达矩阵,此时先对数据中的这8个基因随机排列,构建随机组合的影子特征(shadow features),然后基于训练集中基因表达量对于样本的区分程度,对每个基因的重要性(importance)进行打分,看每个基因在原数据中的评分是否比在随机排列中的评分更高,有的话就被记录下来。

注:作者关于这个算法底层原理了解不深入,关于这个算法的底层概念大家可以自行检索学习,这个教程是带领大家实战——即用代码实现boruta筛选关键基因,重点不在于原理讲解

综上所述: boruta就是一种用来筛选 关键特征 的方法(其底层算法依据是随机森林),这个关键特征可以是临床指标,也可以是重要基因等,并且在关键特征选择的时候避免了人为的选择,输出基因重要性提高了可解释性。



2. boruta(Rstudio)——代码实操

本项目以TCGA——肺腺癌为例展开分析
物种:人类(Homo sapiens)
R版本:4.2.2
R包:tidyverse,Boruta,caret

废话不多说,代码如下:

2. 1 数据处理

设置工作空间:

rm(list = ls()) # 删除工作空间中所有的对象
setwd('/XX/XX/XX') # 设置工作路径
if(!dir.exists('./10_boruta')){
  dir.create('./10_boruta')
} 
setwd('./10_boruta/') 

加载包:

library(tidyverse)
library(Boruta)
library(caret)

导入要分析的表达矩阵train_data ,并对train_data 的列名进行处理(这是因为在读入的时候系统会默认把样本id中的“-”替换成“.”,所以要给替换回去

train_data <- read.csv("./data_fpkm.csv", row.names = 1, check.names = F)  # 行名为全部基因名,每列为样本名
colnames(train_data) <- gsub('.', '-', colnames(train_data), fixed = T)

train_data 如下图所示,行为基因名(symbol),列为样本名
在这里插入图片描述
导入分组信息表group

group <- read.csv("./data_group.csv", row.names = 1) # 为每个样本的分组信息(tumor和normal)
colnames(group) <- c('sample', 'group')

group 如下图所示,第一列sample为样本名,第二列为样本对应的分组 (分组为二分类变量:disease和control)
在这里插入图片描述
导入要筛选的基因hub_gene (8个基因)

hub_gene <- data.frame(symbol = gene <- c('ADAMTS2', 'ADAMTS4', 'AGRN', 'COL5A1', 'CTSB', 'FMOD', 'LAMB3', 'LAMB4'))
colnames(hub_gene) <- "symbol"

hub_gene 如下图所示,只有一列:8个基因的基因名
在这里插入图片描述
从全部的基因表达矩阵中取出这8个基因对应的表达矩阵,并且与之前准备的分组信息表进行合并

dat <- train_data[rownames(train_data) %in% hub_gene$symbol, ] %>%
  t() %>%
  as.data.frame() # 整理后行为样本名,列为基因名
dat$sample <- rownames(dat)
dat <- merge(dat, group, var = "sample")
dat <- column_to_rownames(dat, var = "sample") %>% as.data.frame()

table(dat$group)
dat$group <- factor(dat$group, levels = c('disease', 'control'))

dat 如下图所示,行为基因名,前8列为基因对应的表达矩阵,第9列为合并的分组信息表
在这里插入图片描述

2. 2 构建boruta模型

设置随机种子并运行Boruta特征选择

  • data = dat——使用Boruta算法在数据集dat上运行
  • group~.——表示预测的是dat中的group列
  • doTrace = 2——表示在控制台中显示详细的运行信息
  • maxRuns = 500——表示指定了算法运行的最大迭代次数为500。
set.seed(123)
boruta.train <- Boruta(group~., data = dat, doTrace = 2, maxRuns = 500)

boruta.train结果如下图所示,运行了499次迭代,耗时20.38秒,其中有7个特征是确定的,有一个特征—LAMB4是不确定的。
在这里插入图片描述

修正Boruta结果(这一步是可选的,主要用于修正Boruta算法可能产生的某些不稳定的特征选择结果

final.boruta <- TentativeRoughFix(boruta.train)

修正后的final.boruta结果如下图所示,其余没什么变化,唯独那个不确定的LAMB4变成了不重要的
在这里插入图片描述

2. 3 boruta结果简单可视化

接下来一步就是要对boruta结果进行简单可视化,毕竟文章里是要放图的,并且图片展现的效果会更好!!!

# boruta结果简单可视化(内置函数)
{
  plot(final.boruta, xlab = "", xaxt = "n")
  lz<-lapply(1:ncol(final.boruta$ImpHistory),function(i)
    
    final.boruta$ImpHistory[is.finite(final.boruta$ImpHistory[,i]),i])
  
  names(lz) <- colnames(final.boruta$ImpHistory)
  
  Labels <- sort(sapply(lz,median))
  
  axis(side = 1,las=2,labels = names(Labels),
       
       at = 1:ncol(final.boruta$ImpHistory), cex.axis = 0.8)
}

结果如下图所示横坐标为特征(基因名),及随机的影子特征,纵坐标为重要性,绿色的箱子表示通过验证筛选的特征,而红色的箱子表示未通过筛选的特征,蓝色箱子为影子特征,有时候结果还会出现黄色的箱子,那些就代表不确定的特征(可以选择性考虑是否纳入)。
在这里插入图片描述



结语:

以上就是boruta算法筛选关键基因的所有过程,如果有什么需要补充或不懂的地方,大家可以私聊我或者在下方评论。

如果觉得本教程对你有所帮助,点赞关注不迷路!!!


与教程配套的原始数据+代码+处理好的数据见配套资源

注:配套资源只要改个路径就能运行,本人已检测过可以跑通,请放心食用,食用过程遇到问题,可先自行百度,实在解决不了可以私信


  • 目录部分跳转链接:零基础入门生信数据分析——导读

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

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

相关文章

[Docker][Docker Volume]详细讲解

目录 1.什么是存储卷&#xff1f;2.为什么需要存储卷&#xff1f;1.数据丢失问题2.性能问题3.宿主机和容器互访不方便4.容器和容器共享不方便 3.存储卷分类1.volume docker 管理卷2.bind mount 绑定数据卷3.tmpfs mount 临时数据卷 5.管理卷 Volume1.创建卷1.-v 参数2.--mount …

《Milvus Cloud向量数据库指南》——向量数据库性价比大比拼:谁才是性能之王?

在分析这份向量数据库(Vector Databases)的性价比排名表格时,我们需要从多个维度深入探讨,包括但不限于硬件配置、价格/性能比(QP$,即每百万次查询所花费的价格)、数据集大小、查询类型(无标量过滤、低标量过滤、高标量过滤)以及不同服务提供商之间的比较。以下是一个…

微波治疗仪,美容仪,爆脂仪电源板

分享一下爆脂仪&#xff0c;美容仪&#xff0c;微波治疗仪电源板&#xff0c;高压输出为-2000v&#xff0c;驱动电流最大100mA&#xff0c;匹配磁控管功率输出100w

KubeBlocks v0.9 解读|最高可管理 10K 实例的 InstanceSet 是什么?

实例&#xff08;Instance&#xff09;是 KubeBlocks 中的基本单元&#xff0c;它由一个 Pod 和若干其它辅助对象组成。为了容易理解&#xff0c;你可以先把它简化为一个 Pod&#xff0c;下文中将统一使用实例这个名字。 InstanceSet 是一个通用 Workload API&#xff0c;负责…

python-进度条和计时器

from tqdm import tqdm import time# 设置任务的总步骤数 total_steps 100# 使用tqdm创建进度条 with tqdm(totaltotal_steps, unitstep) as pbar:# 开始计时start_time time.time()# 模拟任务步骤for i in range(total_steps):# 模拟每一步的工作负载time.sleep(0.1) # 假设…

C语言:自定义类型进阶(结构体、联合体、枚举)

自定义类型&#xff08;结构体、联合体、枚举&#xff09; 一、结构体&#xff08;一&#xff09;结构体的内存对齐1、结构体内存对齐规则&#xff08;1&#xff09;引子&#xff08;2&#xff09;offsetof 宏函数&#xff08;3&#xff09;内存对齐原理&#xff08;4&#xff…

【HM】DevEco Studio提供Hot Reload(热重载)能力确实好用!帮助开发者更快速进行调试。但要注意以下几点?

​​ 仅支持开发者在真机上运行/调试运行&#xff1a; 1、运行时&#xff0c;选择带H标识的entry&#xff1b; 2、运行设备选择已连接的真机&#xff1b; 3、运行中修改了文件后&#xff0c;点击H标识&#xff0c;在真机即刻可见效果。 注意约束条件&#xff1a; 只支持真…

硬盘信息,电脑硬盘查看工具

硬盘信息&#xff0c;电脑硬盘查看工具 硬盘信息&#xff0c;电脑硬盘查看工具

FPGA开发——状态机的使用

一、概述 我们在使用FPGA进行开发的过程当中&#xff0c;实现一个东西用得最多的实现方法就是状态机的实现方法&#xff0c;用一句话总结就是万物皆可状态机&#xff0c;这和我们在学习Linux时常说的在Linux中万物都是文件差不多&#xff0c;这里就主要就是突出状态机的应用范…

Moretl 文件同步工具 1.1.0.3

永久免费: 前往Gitee最新版本 更新内容 Winform全部切换到.Net Framework 4.0. 更符合大部分的自动化设备. Web提供.Net Framework 4.0的运行时环境安装包 Web打开时,若当前IP为设备,直接显示设备信息 介绍 用途: 定时全量或增量 采集工控机,办公电脑文件以及日志.(SCADA,I…

Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件

​​ jmeter性能测试 1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言&#xff0c;JMeter小巧轻便且免费&#xff0c;逐渐成为了主流的性能测试工具&#xff0c;是每个测试人员都必须要掌握的工具之一。 本文为JMeter…

进口不锈钢309S螺栓的应用优势

进口不锈钢309S螺栓因其优异的性能和广泛的应用范围而在许多行业中备受青睐。309S不锈钢是一种含硫的易切削不锈钢&#xff0c;具有良好的耐高温和耐腐蚀性能&#xff0c;使其成为高温环境下理想的选择。下面我们就来详细探讨一下进口不锈钢309S螺栓的应用优势。 一、309S不锈钢…

请你谈谈:spring拦截器的应用-preHandle postHandle afterCompletion执行顺序问题的讨论?

首先我们&#xff0c;给出一个demo来看下拦截器方法执行顺序&#xff1a; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.…

第一百八十五节 Java XML教程 - Java DOM简介

Java XML教程 - Java DOM简介 DOM是标准的树结构&#xff0c;其中每个节点包含来自XML结构的一个组件。 XML文档中两种最常见的节点类型是元素节点和文本节点。 使用Java DOM API&#xff0c;我们可以创建节点&#xff0c;删除节点&#xff0c;更改其内容&#xff0c;并遍历节…

TypeScript 定义不同的类型(详细示例)

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

抖音评论爬虫数据采集|抖音评论抓取工具|代码|源码

抖音评论提取软件使用说明 抖音视频评论提取到的内容&#xff1a;1&#xff1a;视频名称 2&#xff1a;视频作者 3&#xff1a;作者地址 4&#xff1a;视频地址 5&#xff1a;评论人昵称。6&#xff1a;评论人主页地址。7&#xff1a;评论内容 8&#xff1a;评论日期 软件支持…

我是客服新手,打字很慢,怎么办?

作为客服新手&#xff0c;打字速度缓慢可能影响工作效率&#xff0c;本文介绍了提高打字速度&#xff0c;以及使用聊天宝快捷回复工具等提效的诀窍 前言 我是客服新手&#xff0c;打字速度缓慢可能影响工作效率。本文将分享如何提高客服打字速度&#xff0c;包括使用聊天宝快捷…

协助我们进行论文写作的ChatGPT们究竟是如何工作的?

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 大型语言模型&#xff08;LLMs&#xff09;正在彻底改变我们与人工智能的互动方式&#xff0c;特别是在写作和创作领域。这些先进的人工智能系统不仅在改变作家和创作者的格局&#xff…

<数据集>遥感航拍飞机识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2398张 标注数量(xml文件个数)&#xff1a;2398 标注数量(txt文件个数)&#xff1a;2398 标注类别数&#xff1a;1 标注类别名称&#xff1a;[plane] 序号类别名称图片数框数1plane239815178 使用标注工具&#…

多微信管理不再难:聚合聊天神器助你轻松应对!

在当今社交媒体高度发达的时代&#xff0c;很多人都在使用多个微信账号来管理个人与工作联系。面对如此众多的信息沟通&#xff0c;如何高效管理成了一个难题。 幸运的是&#xff0c;聚合聊天神器的出现&#xff0c;彻底改变了这一局面&#xff0c;让我们轻松应对多微信账号的…