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

news2024/12/23 10:40:57

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

目录

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


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

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

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



1. xgboost基础知识

1.1 xgboost是什么?
XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升(Gradient Boosting)框架的高效、灵活且广泛使用的机器学习算法,通过多次迭代后旨在找到最优预测模型。

1.2 xgboost的算法原理是什么?
XGBoost的核心思想是通过组合多个弱学习器(通常是决策树)来形成一个强学习器。在每一次迭代中,XGBoost都会基于当前模型的预测结果和真实值之间的差异(残差)来训练一个新的弱学习器,然后将这个新的弱学习器加入到已有的模型集合中,以期望能够减少整体的预测误差,从而找到一个最优模型。

1.3 xgboost的优势?

  • 高效性: XGBoost在算法层面进行了多项优化,包括使用高效的树学习算法、支持并行和分布式计算、利用CPU缓存进行加速等,这使得它虽然需要经过多次迭代但是速度相对会很快
  • 准确性: XGBoost通过引入二阶泰勒展开来近似目标函数,并使用正则化项来控制模型的复杂度,从而能够更准确地拟合数据,提高模型的预测精度。
  • 灵活性: XGBoost支持多种类型的损失函数和弱学习器,同时也支持自定义评估函数,这使得它能够适应不同的机器学习任务。
  • 鲁棒性: XGBoost通过加入正则化项和使用贪心算法进行节点分裂,来防止过拟合,提高模型的泛化能力

1.4 xgboost的缺点?
在特征选择的时候只能输出每个特征的重要性,无法自动筛选出关键特征,需要人为选择关键特征,给最终结果添加部分主观性。

1.5 xgboost筛选基因的本质是什么?
XGBoost在训练过程中会自动评估每个特征的重要性(重要性通常基于该特征在构建决策树时对模型性能提升的贡献程度),之后人为的手动筛选关键特征。

举个栗子: 有8个基因构建xgboost模型来预测患病的概率,算法结果会输出每个基因的重要性评分,这样就知道哪些基因对预测结果影响最大,之后就人为选择一些关键基因。

综上所述: xgboost先通过多次迭代达到最优模型,然后输出每个特征的重要性,这时就可以根据重要性排序去获取那些比较重要的特征。



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

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

废话不多说,代码如下:

2. 1 数据处理

设置工作空间:

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

加载包:

library(tidyverse)
library(Matrix)
library(xgboost) 
library(ggplot2)

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

前置准备:将前8列转换成matrix矩阵

# 将trainset的1-8列(自变量)转换为矩阵
traindata1 <- data.matrix(dat[, -9])

traindata1 如下图所示,和dat类似,区别就在于traindata1没有第9列分组信息,并且是个矩阵,不是数据框。
在这里插入图片描述
之后将traindata1转换成稀疏矩阵traindata2,这一步是为了进一步减少内存使用。

# 利用Matrix函数,将sparse参数设置为TRUE,转化为稀疏矩阵
traindata2 <- Matrix(traindata1, sparse = T)

指定dat的最后一列分组信息作为因变量,并转为数值型

# 将因变量转换为numeric类型,-1是为了从0开始计数
train_y <- as.numeric(dat[, 9])-1

将准备好的稀疏矩阵traindata2和因变量train_y打包成一个列表(这么做是为了方便后续用数据构建xgboost模型

# 将自变量和因变量拼接为list
traindata <- list(data = traindata2, label = train_y)

将traindata列表里的表达矩阵traindata2和因变量train_y传入到xgb.DMatrix函数中转换成一个DMatrix对象(这个对象是xgboost算法内部用于存储数据和标签的优化格式,可以提高计算效率

dtrain <- xgb.DMatrix(data = traindata$data, label = traindata$label)

之后就是构建xgboost模型

  • data = dtrain —— 这个参数指定了要训练的数据,传入的应该是个DMatrix对象
  • max_depth = 5 ——这个参数定义了树的最大深度,增加这个值会使模型更加复杂,可以关注到更多细节,但同时也会导致过拟合。
  • eta = 0.3 ——这个参数通常被称为学习率/收缩率。它控制了在每一步中如何更新权重,从而减少每次迭代对模型的影响。较小的eta值就意味着更小的权重更新,可以使模型训练变慢,从而得到更好的结果和更好的泛化能力。
  • objective = ‘binary:logistic’ ——这个参数指定了学习任务的类型和相应的损失函数。binary:logistic表明是一个二分类问题,并且使用的是逻辑回归损失函数。xgboost算法支持很多不同的objective,适用于不同的情况,具体在这里不展开介绍,感兴趣的小伙伴可以自行查询函数帮助。
  • nround = 25 —— 这个参数指定了迭代次数,数值越大迭代次数越多,会使模型变得更复杂,同时也会增加过拟合风险和训练时间。
res.xgb <- xgboost(data = dtrain, max_depth = 5, eta=0.3, objective='binary:logistic', nround = 25)

构建完模型之后此时就可以从模型中提取变量的贡献度了

xgb_importance <- xgb.importance(train_matrix@Dimnames[[2]], model = res.xgb)    ##特征重要度

xgb_importance 如下图所示

  • Feature——这一列就是基因的名称
  • Gain——这一列表示每个特征在模型构建过程中平均增益的贡献,较高的增益值意味着该特征对于提升模型预测性能有更大的作用(重要)
  • Cover——这一列可以理解成平均覆盖度(不需要关注)
  • Frequency——这一列表示每个特征在树的构建过程中被用作分裂节点的频率,简单来说,值越大表明频率越高,也说明该特征在模型中被频繁使用,同样的对模型的预测能力有重要的贡献。(不需要关注)

在这里插入图片描述
接下来从构建好的xgboost模型中提取出最重要的5个基因并输出

## 结果
hub_gene <- xgb_importance[c(1 : 5), ]
hub_gene$Feature <- gsub('.','-',hub_gene$Feature,fixed = T )
write.csv(hub_gene, '01.hub_gene.csv')
write.csv(xgb_importance, '02.xgb_importance.csv')

2. 3 xgboost结果简单可视化

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

# xgboost结果简单可视化(ggplot2函数)
ggplot(xgb_importance, aes(x= reorder( Feature,Gain), y=Gain,fill=Feature)) +
  geom_bar(stat="identity") +
  theme_classic() +
  guides(fill=FALSE)+
  #theme(legend.position = )+
  scale_fill_manual(values=c("#8DD3C7","#FFFFB3","#BEBADA","#FB8072","#80B1D3","#FDB462","#B3DE69","#FCCDE5","#D9D9D9","#BC80BD","#CCEBC5","#FFED6F","#377EB8","#100EB2","#FDB999"))+
  coord_flip()+
  theme_bw()+
  ggtitle('XGBoost')+
  theme(plot.title = element_text(size=24,color='black', face = "bold",family='Times'),
        axis.title.x =element_text(size=18,color='black', face = "bold",family='Times'),
        axis.text.x =element_text(size=16, color='black', face = "bold",family='Times'),
        axis.title.y =element_blank(),
        axis.text.y=element_text(size=16,   color='black',face = "bold",family='Times'),
        legend.title=element_text(size=20, color='black', face = "bold",family='Times'),
        legend.text=element_text(size=18, color='black', face = "bold",family='Times'),
        title=element_text(size=20, color='black', face = "bold",family='Times'),
        strip.text = element_text(size = 14,family = "Times", face = "bold"))+
  theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+
  labs(x="gene",y="Gain",fill="")

结果如下图所示横坐标为贡献度(也可以叫成重要性),纵坐标为基因,柱子越高表明该基因越重要。
在这里插入图片描述



结语:

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

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


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

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

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

相关文章

第N高的薪水 [sql]

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGINset N N - 1;RETURN (# Write your MySQL query statement below.select distinct salary from Employee order by salary desc limit 1 offset N); END

VSCode使用conda虚拟环境配置

如何解决CondaError: Run ‘conda init‘ before ‘conda activate‘_condaerror: run conda init before conda activat-CSDN博客 首先检查自己的anaconda是否是添加到整个的环境变量里了 打开cmd如果conda和python都能够识别那么就是配置成功了 然后看插件是否安装&#xf…

1个惊艳的Python项目火出圈,已开源,10K stars!

本次分享一个Python工具Taipy:“To build data & AI web applications in no time”。 Taipy专为数据科学家和机器学习工程师设计,用于构建数据和AI的Web应用程序。 快速构建可投入生产的Web应用程序。无需学习HTML、CSS、JS等新前端语言,只需使用Python。专注于数据和A…

抖音短视频矩阵系统优势:为何选择短视频矩阵系统?

1. 抖音短视频矩阵系统 抖音短视频矩阵系统&#xff0c;是指通过抖音平台&#xff0c;以矩阵的形式进行短视频创作、发布和传播的一种模式。它以多样化的内容、丰富的表现形式、高度的专业化和协同性&#xff0c;吸引了大量用户和创作者的关注。 2. 短视频矩阵系统的优势 2.…

jdk和tomcat的环境配置以及使用nginx代理tomcat来实现负载均衡

目录 1.jdk环境配置 1.jdk下载 2.解压 3.将jdk-22.2移动到指定目录/usr/local/jdk22/下 4.配置文件 5.运行profile 6.测试 2.tomcat环境配置 1.下载tomcat 2.解压 3.将解压后的文件移动指定目录 4.启动tomcat 5.查看端口确定是否确定成功 6.测试 7.tomcat目录 1…

<数据集>航拍人车识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;9695张 标注数量(xml文件个数)&#xff1a;9695 标注数量(txt文件个数)&#xff1a;9695 标注类别数&#xff1a;4 标注类别名称&#xff1a;[car, pedestrian, truck, bus] 序号类别名称图片数框数1car923525710…

GIT如何将远程指定分支的指定提交拉回到本地分支

一、当前我的代码在这个提交&#xff0c;但可以看到远程仓库上面还有两次新的提交 二、现在我想让我本次的代码更新到最上面这个最新的提交 三、输入git fetch命令获取远程分支的最新提交信息。 四、输入 git log origin/<remote_branch_name>查看并找到想要更新的指定提…

Reat hook开源库推荐

Channelwill Hooks 安装 npm i channelwill/hooks # or yarn add channelwill/hooks # or pnpm add channelwill/hooksAPI 文档 工具 Hooks useArrayComparison: 比较两个数组的变化。useCommunication: 处理组件之间的通信。useCurrencyConverter: 货币转换工具。useCurre…

【SRC挖掘】众测下的SQL注入挖掘案例

众测下的SQL注入挖掘 众测下的SQL注入挖掘0x01原理&#xff1a;0x02测试方法&#xff1a;常用手法&#xff1a;注入存在点&#xff1a; 0x03案例&#xff1a;总结 众测下的SQL注入挖掘 0x01原理&#xff1a; sql注入的原理在这里就不在详细介绍了&#xff0c;我相信大多数师傅…

MySQL数据库 外键默认约束和action 基础知识【2】推荐

数据库就是储存和管理数据的仓库&#xff0c;对数据进行增删改查操作&#xff0c;其本质是一个软件。MySQL就是一种开源的关系型数库&#xff0c;也是最受欢迎的数据库之一&#xff0c;今天对MySQL数据的基础知识做了整理&#xff0c;方便自己查看&#xff0c;也欢迎正在学习My…

DITA的优点和缺点

作者 | Stefan Jung DITA的实施可能是一项复杂的任务&#xff0c;本节列出了在实施DITA之前需要了解它的优缺点。 - 1 - 优点 开放标准 被很多公司采用 可以与版本控制系统一起使用&#xff0c;比如&#xff1a;Git 可扩展&#xff0c;可以从文件系统开始&#xff0c;稍后…

openGauss 5.0 LTS部署至华为云ECS CentOS8.2实操教程

一、前言 openGauss是一款高可靠、高性能、高安全、易运维的开源关系型数据库管理系统&#xff0c;然而其全功能部署对系统要求非常高。 本实操教程能够使个人开发者以及高校师生能够以成本最小的方式快速将openGauss部署到华为云的ECS上&#xff0c;以便快速进行功能验证以及…

C#(asp.net)电商后台管理系统-计算机毕业设计源码70015

摘 要 随着互联网技术的不断发展&#xff0c;电商行业也越来越受到人们的关注。为了提高电商行业的管理效率和服务水平&#xff0c;本文提出了一种基于ASP.NET电商后台管理系统的设计与实现方案。 电商管理系统基于VisualStudio开发平台&#xff0c;采用C#编程语言和ASP.NET等技…

使用 ModelScope 本地部署图片变视频模型

最近在抖音上看到很多视频可以让图片动起来&#xff0c;搜了一下&#xff0c;stabilityai/stable-video-diffusion-img2vid-xt 这个模型可以实现图片到视频&#xff0c;可以生成 25 帧的视频。Kling 和 Runway 都支持从图片生成视频&#xff0c;本文将通过 ModelScope 搭建一个…

如何下载Maven指定版本

下载Maven指定版本的步骤如下&#xff1a;‌ 1.访问Maven官网&#xff1a;‌首先&#xff0c;‌需要访问Maven的官方网站&#xff0c;‌即https://maven.apache.org/。‌ 2.选择下载链接&#xff1a;‌在官网首页&#xff0c;‌找到“Download”选项并点击进入下载页面。‌ …

你真的懂二分吗?

二分简述&#xff1a; 二分算法&#xff0c;又称为二分搜索或折半搜索&#xff0c;是一种在有序数组中查找特定元素的搜索算法。其基本思想是将数组分成两半&#xff0c;然后根据目标值与中间元素的大小关系来决定是继续在左侧还是右侧进行搜索。这个过程会不断重复&#xff0…

YOLOv8改进 | 激活函数 | 十余种常见的激活函数一键替换【完整代码】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

HDU1089、1090、1091、1092、1093、1094、1095、1096、——A+B for Input-Output Practice

目录 HDU1089——AB for Input-Output Practice (I) HDU1090——AB for Input-Output Practice (II) HDU1091——AB for Input-Output Practice (III) HDU1092——AB for Input-Output Practice (IV) HDU1093——AB for Input-Output Practice (V) HDU1094——AB for Inpu…

VSCode上安装C#环境教程

本章教程,教你如何在vscode上,可以快速运行一些基础的c#代码。 1、下载 .NET Code SDK 下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/sdk-for-vs-code?utm_source=vs-code&utm_medium=referral&utm_campaign=sdk-install 根据自己的操作系统,选择…

NSSCTF-Web题目27(Nginx漏洞、php伪协议、php解析绕过)

目录 [HNCTF 2022 WEEK2]easy_include 1、题目 2、知识点 3、思路 [NSSRound#8 Basic]MyDoor 4、题目 5、知识点 6、思路 [HNCTF 2022 WEEK2]easy_include 1、题目 2、知识点 nginx日志漏洞执行系统命令 3、思路 打开题目&#xff0c;出现源码 题目要我们上传一个fi…