零基础入门转录组数据分析——机器学习算法之boruta(训练模型)

news2024/12/23 9:31:30

零基础入门转录组数据分析——机器学习算法之boruta(训练模型)

目录

  • 零基础入门转录组数据分析——机器学习算法之boruta(训练模型)
    • 1. boruta基础知识
    • 2. boruta(Rstudio)——代码实操
      • 2. 1 数据处理
      • 2. 2 构建boruta模型
      • 2. 3 训练模型结果简单可视化


您首先需要了解本贴是完全免费按实际案例分享基础知识和全部代码,希望能帮助到初学的各位更快入门,但是 尊重创作和知识才会有不断高质量的内容输出 ,如果阅读到最后觉得本贴确实对自己有帮助,希望广大学习者能够花点自己的小钱支持一下作者创作(条件允许的话一杯奶茶钱即可),感谢大家的支持~~~~~~ ^_^ !!!

注:当然这个并不是强制的哦,大家也可以白嫖~~,只是一点点小的期盼!!!

祝大家能够开心学习,轻松学习,在学习的路上少一些坎坷~~~请添加图片描述



1. boruta基础知识

1.1 训练模型是什么?
训练模型指的是利用特定的算法和大量的数据,让计算机生成一个可以解决特定问题的模型,这个过程的目的是使模型能够对新的、未见过的数据进行准确的预测或分类

1.2 训练模型和上一章筛选特征基因有什么联系?
上一章筛选完特征基因后就可以用筛选后的那些特征基因作为输入来训练模型

1.3 训练模型能干什么?
其可以在筛选完特征基因后验证特征筛选的有效性,即通过在一个新的数据集(通常是测试集或验证集)上训练模型,并评估其性能,可以验证特征筛选是否真正提高了模型的泛化能力。同时还可以看看用这些特征基因构建模型对于预测和分类的准确性。

举个栗子: 在上一章中筛选出来了7个特征基因,想进一步了解下这7个特征基因在什么样的参数条件下能够构建出最优模型,以及构建出来的模型它的预测准确性是多少,就可以在训练模型中找到答案。

注意:关于特征基因的验证通常不是用模型去验证的,通常可以直接用实验的手段去检测基因的表达水平,因此在这一章中仅介绍如何训练模型,对于如何验证不做过多介绍。

这一章可以作为拓展知识大家了解即可(前面的处理方式都与上一章一致)



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

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

废话不多说,代码如下:

2. 1 数据处理

设置工作空间:

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

加载包:

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

导入要分析的表达矩阵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)

导入分组信息表group

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

导入要筛选的基因hub_gene (8个基因)

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

从全部的基因表达矩阵中取出这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'))

2. 2 构建boruta模型

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

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变成了不重要的
在这里插入图片描述

------------------------------注意:从这一步开始就和上一章不一致了----------------------------

定义一个函数用来生成用于随机森林模型调参的mtry值列表

  • mtry值——是随机森林(Random Forest)算法中的一个重要参数,它决定了每个决策树在进行特征选择时考虑的特征数量。具体来说,mtry参数定义了每个决策树节点可用于分割的特征的最大数量

那么选择什么样的mtry值是合适的?(mtry值的选择)

  • (1)经验值: 通常,mtry的取值范围是0到p,其中p是特征的总数。取特征总数的平方根是一个常见的经验值,但这并不是绝对的,实际选择时需要根据数据和任务进行调整。
  • (2)交叉验证: 为了找到最佳的mtry值,可以通过交叉验证等方法进行调优。例如,在R的randomForest包中,可以使用rfcv()函数来执行随机森林交叉验证,从而选择最佳的mtry值。
  • (3)自适应选择: 有些随机森林实现支持自适应地选择mtry的值。在每次分裂时,算法会动态调整mtry的大小,以便更好地适应数据。
# 交叉验证选择参数并拟合模型,定义一个函数生成一些列用来测试的mtry (一系列不大于总变量数的数值)。
generateTestVariableSet <- function(num_toal_variable){
  max_power <- ceiling(log10(num_toal_variable))
  tmp_subset <- c(unlist(sapply(1:max_power, function(x) (1:10)^x, simplify = F)), ceiling(max_power/3))
  #return(tmp_subset)
  base::unique(sort(tmp_subset[tmp_subset<num_toal_variable]))
}

函数的具体作用分解如下:

  • (1)输入num_toal_variable——这个表示特征的总数
  • (2)计算最大幂次——通过 max_power <- ceiling(log10(num_toal_variable)) 计算特征总数的以10为底的对数的上整,这个值用于确定在生成候选 mtry 值时要考虑的幂次范围
  • (3)生成幂次序列——使用 sapply 函数和匿名函数 (1:10)^x 生成一个包含从1的幂到max_power的幂(每个幂次都取1到10的幂次方)的列表。这个列表通过 unlist 展开,以便形成一个单一的向量
  • (4)筛选和排序——从生成的幂次序列中筛选出小于或等于特征总数的值,以确保 mtry 值不会超过可用的特征数量。然后,使用 sort 函数对这些值进行排序,并使用 unique 函数去除任何重复的值,以生成一个有序的、无重复的 mtry 候选值列表。
  • (5)输出结果——最终返回这个排序且去重的 mtry 候选值列表

定义好计算mtry值的函数后就要准备输入的数据(从boruta模型中提取出通过筛选的基因

#提取重要的变量和可能重要的变量
boruta.finalVarsWithTentative <- data.frame(Item = getSelectedAttributes(final.boruta, withTentative = T), 
                                            Type = "Boruta_with_tentative")

boruta.finalVarsWithTentative如下图所示,第一列item就是那7个通过检验的特征基因,第二列type就是对应的类型
在这里插入图片描述

之后从全部的基因表达矩阵中提取出这7个基因对应的表达矩阵

boruta_train_data <- dat[, boruta.finalVarsWithTentative$Item]

boruta_train_data 如下图所示,行名为样本名,每一列对应一个基因。
在这里插入图片描述
之后将这个boruta_train_data 作为参数,输入到自定义函数中去计算相应的mtry值列表

boruta_mtry <- generateTestVariableSet(ncol(boruta_train_data))

可以看出输出mtry值列表有6个数值,分别是123456,不同的mtry值计算出来的结果不一样
在这里插入图片描述
接下来就要为训练模型做准备,首先是设置交叉验证方式

这里采用trainControl函数去设置:
(1)method=“repeatedcv”——指定了交叉验证的方法为“重复交叉验证”(repeatedcv)
(2)number=10——表示每次交叉验证将数据集分成10
(3)repeats=5——表示这个过程将重复5次

trControl <- trainControl(method = "repeatedcv", number = 10, repeats = 5)

接下来就要根据前面计算出来的mtry值列表生成一个网格,这个网格将用于在训练过程中测试不同的mtry值,以找到最优的mtry

tuneGrid <- expand.grid(mtry = boruta_mtry)

做好上述准备后就可以开始通过train函数尝试训练模型

  • x——表示输入的特征数据(boruta_train_data)
  • y——表示指定的目标变量(可以理解成分组)
  • method——使用的模型类型(这里是"rf",即随机森林)。
  • tuneGrid——用于调优的网格(这里是前面计算出来的mtry不同值)
  • metric——用于评估模型性能的度量标准
  • trControl——交叉验证的控制参数
train_data_group <- as.factor(dat$group)
borutaConfirmed_rf_default <- train(x = boruta_train_data, 
                                    y = train_data_group, 
                                    method = "rf", 
                                    tuneGrid = tuneGrid, 
                                    metric = "Accuracy", 
                                    trControl = trControl)

注意:在metric参数中,如果分组是一个二元分类问题的目标变量,需要选择"Accuracy"(准确率)或"ROC"(对于二分类问题的AUC值)。如果分组是一个具有多个类别的分类问题的目标变量,应该选择"Kappa"或"Accuracy"。

borutaConfirmed_rf_default如下图所示,介绍训练模型相对应的信息,比如:7个特征(7 predictor),二分类变量(2 classes),以及不同mtry对应的模型精确性,最后发现当mtry = 2时,模型为最优模型,其预测准确性为0.9613(最高)。
在这里插入图片描述
明确了最优模型之后,就要从模型中进一步提取出筛选后的基因及其对应的重要性并保存输出

gene_importance <- varImp(borutaConfirmed_rf_default)
gene_importance <- gene_importance$importance
gene_importance$symbol <- rownames(gene_importance)
colnames(gene_importance) <- c('importance', 'symbol')
gene_importance <- dplyr::select(gene_importance, symbol, importance)
gene_importance <- gene_importance[order(gene_importance$importance, decreasing = T), ]
write.csv(gene_importance, file = 'gene_importance_all.csv')

2. 3 训练模型结果简单可视化

接下来一步就是要对训练模型结果进行简单可视化,毕竟文章里是要放图的!!!

{
  p1 <- plot(borutaConfirmed_rf_default, xlab = "", xaxt = "n")
  
  p2 <- ggplot(gene_importance, 
               aes(x = reorder(symbol, importance), y = importance , fill=importance)) + #x、y轴定义;根据ONTOLOGY填充颜色
    geom_bar(stat="identity", width=0.8) +  #柱状图宽度
    scale_fill_continuous(low = '#8ECFC9', high = '#72B063')+  #柱状图填充颜色
    coord_flip() +  #让柱状图变为纵向
    xlab("") +  #x轴标签
    ylab("Importance") +  #y轴标签
    labs(title = "Boruta_analyse")+  #设置标题
    theme_bw() +
    theme(panel.grid = element_blank(),
          axis.text.x = element_text(family="Times", face = "bold", color="gray50", size = 14),
          axis.text.y = element_text(family="Times", face = "bold", color="black", size = 14),
          legend.title = element_text(family="Times", face = "bold", size = 15), # 图例标题大小
          legend.text = element_text(family="Times", face = "bold", size = 15), # 图例标签文字大小
          axis.title = element_text(family="Times", face = "bold", size = 15), # 坐标轴标题大小
          legend.position = "right",
          plot.title = element_text(family="Times", face = "bold", size = 15, hjust = 0.45), # 标题设置
          panel.background = element_rect(fill = "#f2f2f2") # 面板背景颜色
    )
  
  combined_plot <- plot_grid(p1, p2, ncol = 2, rel_heights = c(1, 4), align = 'v')
  
}

结果如下图所示,左边的图就是在训练模型的时候不同mtry对用的预测准确性,可以直观的看出当mtry = 2的时候此时模型预测准确性最高,右边的图就是输出了用于构建模型那7个基因的重要性。

在这里插入图片描述



结语:

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

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


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

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

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

相关文章

临床预测模型概述6-统计模型实操-单/多因素Cox回归

基础知识回顾&#xff1a; https://mp.weixin.qq.com/s/pXRZ1rYUr3lwH5OlDeB0_Q https://mp.weixin.qq.com/s/UVR6ZHCwhWqTfFBmPYPV9Q 接下来我们进行cox回归模型的实际操练。 简单回顾一下cox回归&#xff0c;在各种临床/基础数据分析中&#xff0c;经常需要分析各种影响/…

学校考场电子钟设置自动开关机,节能环保

在标准化考试中&#xff0c;准确的时间显示对于确保考试的公正性和秩序至关重要。然而&#xff0c;传统的电子钟系统往往存在一些问题&#xff0c;影响了考试管理的效率。 一、学校普通电子钟使用问题 二、学校考场电子钟优点 学校同步时钟系统通过自动同步网络或卫星时间的方式…

排序算法3:归并排序与计数排序

前言 Hello&#xff0c;小伙伴们&#xff0c;今天我们继续排序算法的学习&#xff0c;大家三连上车不迷路&#xff0c;我们现在开始今天的学习&#xff01;&#xff01;&#xff01; 1.归并排序 1.1归并排序的算法思想 归并排序&#xff08;MERGE_SORT&#xff09;是建立在归…

洗地机什么牌子最好?洗地机排行榜前十名大总结

在追寻现代家庭清洁新境界的旅程中&#xff0c;洗地机凭借其卓越的清洁效率成为了焦点。以下是我基于深入的市场调研、个人亲身体验以及广泛收集的用户反馈&#xff0c;精心整理出的一份洗地机品牌排行榜及特色亮点解析。请注意&#xff0c;以下排名并不代表绝对的优劣顺序&…

会展中心定位导航:一站式展会解决方案,招商管理系统与展位精准指引的数字化

在当今数字化浪潮下&#xff0c;会展中心作为连接全球商贸与文化的桥梁&#xff0c;其运营效率与参展体验成为衡量成功与否的关键指标。随着物联网、大数据及AI技术的飞速发展&#xff0c;智能定位导航系统应运而生&#xff0c;为会展中心带来了前所未有的变革。会展中心定位导…

线下支付场景之反扫支付

很多老板都在后台私信小编&#xff0c;你们牛卡派这些支付功能确实不错&#xff0c;但只局限于线上网站的场景&#xff0c;可我们没有技术&#xff0c;只是线下来收收款&#xff0c;有没有这方面的产品&#xff1f; 当然有&#xff01;&#xff01;我们牛卡派不仅专注于线上的支…

取消Edge浏览器自带的JSON格式化插件

取消Edge浏览器自带的JSON格式化插件 Edge 浏览器自带了 JSON 转换功能&#xff0c;即某个请求响应的是 JSON格式的数据的话 Edge浏览器则会完成自动转换。如图所示&#xff1a; 这样一来如果自己想要安装其他美观的 JSON 格式化工具则会发现不生效。如JSON Formatter 工具。 …

【YashanDB数据库】由于网络带宽不足导致的jdbc向yashandb插入数据慢

问题现象 某客户环境&#xff0c;客户的业务使用jdbc驱动向其他操作系统上的yashandb插入90万条数据&#xff0c;耗时大约30分钟。 问题的风险及影响 影响客户的业务处理效率 问题影响的版本 所有的yashandb版本 问题发生原因 jdbc执行batch insert时&#xff0c;是有绑…

基于Springboot + Vue的宿舍管理系统

前言 文末获取源码数据库 感兴趣的可以先收藏起来&#xff0c;需要学编程的可以给我留言咨询&#xff0c;希望帮助更多的人 精彩专栏推荐订阅 不然下次找不到哟 Java精品毕设原创实战项目 作者的B站地址&#xff1a;程序员云翼的个人空间-程序员云翼个人主页-哔哩哔哩视频 csd…

idm下载速度只有1m IDM下载速度不稳定什么原因 idm下载速度慢解决办法

IDM能够集成到大多数流行的浏览器中&#xff0c;并提供一键下载功能&#xff0c;方便用户快速下载网页中的文件。今天&#xff0c;我们学习IDM下载速度只有1M&#xff0c; IDM下载速度不稳定什么原因的内容。 一、 IDM下载速度只有1M的原因 IDM&#xff08;Internet Download…

红酒与书籍:品味文字与酒香的双重享受

在静谧的夜晚&#xff0c;当一杯洒派红酒&#xff08;Bold & Generous&#xff09;与一本好书相遇&#xff0c;便是一场品味文字与酒香的双重享受。红酒的醇厚与书籍的深邃相互交织&#xff0c;带来的是一场心灵的盛宴&#xff0c;让人沉醉其中&#xff0c;忘却尘世的喧嚣。…

87. UE5 RPG 实现技能面板技能的升级降级功能

在上一篇文章里&#xff0c;我们实现技能面板里的技能按钮配置数据&#xff0c;在角色对应的等级后&#xff0c;会解锁对应的技能&#xff0c;并实现了监听玩家角色所拥有的技能点数。 在这一篇里&#xff0c;我们将实现&#xff0c;通过玩家所拥有的技能点数&#xff0c;对技能…

AI入门指南(二):算法、训练、模型、大模型是什么?

文章目录 一、前言二、算法是什么&#xff1f;概念实际应用 三、训练是什么&#xff1f;概念实际应用 四、模型是什么&#xff1f;概念实际应用小结 五、大模型是什么&#xff1f;概念模型和小模型有什么区别&#xff1f;大模型分类实际应用 六、总结七、参考资料 一、前言 人…

宠物空气净化器对浮毛有效果吗?宠物空气净化器十大排名使用体验

宠物空气净化器对浮毛有效果吗&#xff1f;宠物空气净化器能够通过过滤和吸附作用&#xff0c;减少室内空气中的浮毛。不过&#xff0c;随着宠物空气净化器市场的火爆&#xff0c;许多商家企图从中分一杯羹&#xff0c;为了快速的进入市场缺少产品的研发&#xff0c;导致市面上…

海南云亿商务咨询有限公司怎么样正规吗?

在这个日新月异的数字时代&#xff0c;电商行业正以前所未有的速度蓬勃发展&#xff0c;而抖音作为短视频与社交电商的完美融合体&#xff0c;更是开辟了一片充满无限可能的电商新蓝海。在这片浪潮中&#xff0c;海南云亿商务咨询有限公司凭借敏锐的市场洞察力和专业的服务能力…

docker部署datahub

快速安装&#xff0c;有网环境用&#xff0c;但是我没有用 pip3 install datahub datahub docker quickstart一、安装并启动datahub #python安装客户端 pip3 install datahub #导入镜像 (base) [rootb28-16p4p170-lijia lijia]# ls *.tar cp-kafka.tar datahub-ac…

【ARM】ARM Cortex 处理器详细讲解

目录 ARM Cortex处理器详细讲解1. Cortex-A系列1.1 概述1.2 架构和版本**ARMv7-A****ARMv8-A****ARMv9-A** 1.3 关键特性1.4 应用场景 2. Cortex-M系列2.1 概述2.2 架构和版本**ARMv6-M****ARMv7-M****ARMv8-M** 2.3 关键特性2.4 应用场景 3. Cortex-R系列3.1 概述3.2 架构和版…

SVM支持向量机(Support Vectors Mechine)

SVM支持向量机&#xff08;Support Vector Mechine&#xff09; SVM是一种监督学习算法&#xff0c;常用于解决二分类问题&#xff08;也可以解决多分类问题&#xff09;&#xff0c;它可以处理线性可分的数据&#xff0c;同时也可以处理线性不可分的数据&#xff0c;广泛应用…

力扣Hot100-230二叉搜索树中第K小的元素

&#xff08;一&#xff09;题目 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1a;…

人工智能系统测试的流程与生命周期

今天我们一起来看一下&#xff0c;人工智能系统究竟应该用什么样的流程和方法去进行测试呢&#xff1f; 首先我们一起来看一下&#xff0c;一个企业的人工智能产品部署和发布的一个流程&#xff0c;首先企业会从历史数据库中&#xff0c;利用数据去训练出一个初始的模型&#x…