首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >很容易解释的单细胞机器学习分类树

很容易解释的单细胞机器学习分类树

作者头像
生信技能树
发布2023-02-28 11:33:13
发布2023-02-28 11:33:13
7910
举报
文章被收录于专栏:生信技能树生信技能树

前面我们演示了 一个完美的单细胞亚群随机森林分离器是如何炼成的,以及 LASSO回归也可以用来做单细胞分类 的两个机器学习算法可以用来做单细胞分类器,而且效果杠杠的。而且也尝试了多种机器学习的算法,比如:不输于LASSO的SVM单细胞分类器

无论是随机森林,LASSO回归,还是支持向量机, 他们的模型都是有点抽象,不容易直观的可视化解释清楚。但是接下来我们要介绍的决策树模型,就不一样。

训练决策树模型

首先,复制粘贴前面的 一个完美的单细胞亚群随机森林分离器是如何炼成的 ,就可以把单细胞表达量矩阵划分为训练集和测试集,然后简单的安装和加载 rpart 包,运行里面的 rpart 函数即可:

代码语言:javascript
复制

library('rpart.plot')
library('rpart')
library('survival')

df = cbind(target=target,as.data.frame(predictor_data))
head(colnames(df)) 
multivariate <- paste(colnames(df)[-1],collapse = '-') 
s <-  paste0('target ~ ', multivariate )
s # as.formula(s) 
fit <- rpart( target ~. ,  
             data=df, method="class" ) 

summary(fit)  
save(fit,file = 'rpart_output.Rdata')

可以看到,我们输入的表达量矩阵是 2000 个基因在接近 2000个细胞里面的表达量信息:

代码语言:javascript
复制
>  dim(predictor_data)
[1] 1977 2000
> predictor_data[1:4,1:4]
                    ISG15     CPSF3L     MRPL20      ATAD3C
AAACATACAACCAC -0.8353028 -0.2741145  1.5056616 -0.04970561
AAACATTGAGCTAC -0.8353028 -0.2741145 -0.5625993 -0.04970561
AAACATTGATCAGC  0.3922351 -0.2741145  1.2450489 -0.04970561
AAACCGTGCTTCCG  2.2197621 -0.2741145 -0.5625993 -0.04970561

我们的决策树模型就是把这2000个基因组合一下,来划分细胞的分类。我们简单的可视化一下这个效果:

代码语言:javascript
复制

library(rpart.plot);  
rpart.plot(fit, branch=1, branch.type=2, type=2, extra=102,  
           shadow.col="gray", box.col="green",  
           border.col="blue", split.col="red",  
           split.cex=1.2 )

如下所示,虽然是有6个单细胞亚群,但是只需要5个基因就足以区分它们了 :

5个基因就足以区分它们了

在测试集看模型效果

同样的,训练好的模型,也需要在另外一个数据集看看效果:

代码语言:javascript
复制
test_outputs = predict(fit, as.data.frame(test_expr))
head( test_outputs ) 
pred_y = colnames(test_outputs)[apply(test_outputs, 1, which.max)]
pred_y = factor(pred_y,levels = levels(test_y))


pdf('rpart-performance.pdf',width = 10)
gplots::balloonplot(table(pred_y,test_y))
dev.off()

可以看到, 容易出问题的仍然是CD8和NK细胞的混入,以及CD4和CD8的混入,这个目前来说是无解的:

CD8和NK细胞的混入

我们可以简单的可视化前面的决策树模型的5个基因:

代码语言:javascript
复制
library(Seurat)
sce=CreateSeuratObject(counts = t(predictor_data) )
Idents(sce) = target
cg = c('FTL','HLA-DRA','NKG7','FCER1G','CST3')
VlnPlot(sce,features = cg , 
        stack = T) 
ggplot2::ggsave('rpart_models_VlnPlot.pdf' )

如下所示:

决策树模型的5个基因

对照前面的决策树模型看:

  • 确实是FTL基因可以区分单核细胞和其它细胞
  • 然后是HLA-DRA可以区分B细胞以及树突细胞和其它细胞,其中B细胞以及树突细胞的区分靠CST3
  • 然后T细胞里面的CD4靠NKG7区分出来,然后CD8和NK细胞靠FCER1G区分

这样的模型就非常容易解释清楚,比起前面的随机森林,LASSO回归,支持向量机来说。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 训练决策树模型
  • 在测试集看模型效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档