前面的 一个完美的单细胞亚群随机森林分离器是如何炼成的 有一个评价是这样的机器学习模型都是黑箱子,其实随机森林还好,它可以拿到具体的每个分类的重要的基因列表,有点类似于每个单细胞亚群的特异性高表达量基因:
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回归模型:
# 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呢,我们生信菜鸟团的《周日-鲍志炜专栏》也有一个机器学习系列教程,目录如下:
我在《生信技能树》,《生信菜鸟团》,《单细胞天地》的大量推文教程里面共享的代码都是复制粘贴即可使用的, 有任何疑问欢迎留言讨论,也可以发邮件给我,详细描述你遇到的困难的前因后果给我,我的邮箱地址是 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.
十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。