zl程序教程

您现在的位置是:首页 >  Java

当前栏目

LASSO回归也可以用来做单细胞分类

2023-02-18 16:30:38 时间

前面的 一个完美的单细胞亚群随机森林分离器是如何炼成的 有一个评价是这样的机器学习模型都是黑箱子,其实随机森林还好,它可以拿到具体的每个分类的重要的基因列表,有点类似于每个单细胞亚群的特异性高表达量基因:

load(file='rf_output.Rdata')
load(file = 'input.Rdata')

rf_importances=importance(rf_output, scale=FALSE)
head(rf_importances)
confusion=rf_output$confusion
confusion

varImpPlot(rf_output, type=2, n.var=30, 
           scale=FALSE, 
           main="Variable Importance (Gini) for top 30 predictors",cex =.7)

table(target)
MDSplot(rf_output, target, k=2)

首先,复制粘贴前面的 一个完美的单细胞亚群随机森林分离器是如何炼成的 ,就可以拿到上面代码里面的两个rdata文件哈,然后得到的 rf_importances 这个数据里面有各个单细胞亚群对应的基因。

虽然随机森林已经是很完美了,但是机器学习的算法非常多,我们有必要多用几个看看效果,接下来就演示一下LASSO回归,它也可以用来做单细胞分类。

训练LASSO回归模型

首先,复制粘贴前面的 一个完美的单细胞亚群随机森林分离器是如何炼成的 ,就可以把单细胞表达量矩阵划分为训练集和测试集,然后走标准代码训练LASSO回归模型:


# family=“gaussian” 适用于一维连续因变量(univariate)
# family=“mgaussian” 适用于多维连续因变量(multivariate)
# family=“poisson” 适用于非负次数因变量(count)
# family=“binomial” 适用于二元离散因变量(binary)
# family=“multinomial” 适用于多元离散因变量(category)
library(glmnet)                         
model_lasso <- glmnet( predictor_data , target,
                      family="multinomial", nlambda=50, alpha=1)                                
print(model_lasso) 

cv_fit <- cv.glmnet(predictor_data , target,     
                    family="multinomial",
                    alpha = 1, nlambda = 1000) 
c(cv_fit$lambda.min,cv_fit$lambda.1se)
save(model_lasso,cv_fit,file='lasso_output.Rdata')

看看模型效果:

library(glmnet)  
load(file='lasso_output.Rdata')
test_outputs <-  predict(cv_fit,  as.matrix(test_expr) , 
                         type="response", s="lambda.1se") 
head( test_outputs ) 
pred_y = colnames(test_outputs)[apply(test_outputs, 1, which.max)]
pred_y = factor(pred_y,levels = levels(test_y))

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

仍然是简单的肉眼看了看,居然比前面的 一个完美的单细胞亚群随机森林分离器是如何炼成的 好一点哦,主要占比极低的树突细胞和血小板区分的比较好:

模型效果更好

当然了,如果是系统性学习过机器学习算法,理论上我们的这样的分类器应该是有评价指标,而不是简单的肉眼看。StatQuest生物统计学视频是一个很优秀的生物统计学教程,教程作者是Josh Starmer (个人博客https://statquest.org/),生信菜鸟图很早之前就推过相关的学习资源。而且还组建过学习小分队,给视频写配套笔记:

另外推荐生信菜鸟团的《周日-鲍志炜专栏》

如果是是python呢,我们生信菜鸟团的《周日-鲍志炜专栏》也有一个机器学习系列教程,目录如下:

  1. Jupyter Notebook 你不得不知的交互式笔记本
  2. 我最常用的 10 个 Jupyter Notebook 插件
  3. 免费的在线 Jupyter Notebook
  4. 机器学习实战 | 数据预处理
  5. 机器学习实战 | 特征选择
  6. 机器学习实战 | k-邻近算法
  7. 机器学习实战 | 决策树
  8. 机器学习实战 | 朴素贝叶斯
  9. 机器学习实战 | 逻辑回归
  10. 机器学习实战 | 支持向量机
  11. 机器学习实战 | 支持向量机·sklearn 参数详解
  12. 机器学习实战 | Adaboost
  13. 机器学习实战 | 机器学习性能指标
  14. 用小样本数据集进行机器学习建模的一些建议
  15. 用 Scikit-learn Pipeline 创建机器学习流程
  16. sklearn 模型的保存与加载

写在文末

我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是 jmzeng1314@163.com

如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:

We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.

十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。