zl程序教程

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

当前栏目

不输于LASSO的SVM单细胞分类器

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

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

索性就把各种其它机器学习算法都演示一遍吧,接下来是支持向量机,因其英文名为support vector machine,故一般简称SVM,五年前我就在咱们生信技能树公众号分享过它的用法,见:一文掌握SVM用法(基于R语言) ,如果要完全理解SVM原理及算法,还需要理解 线性回归,最小二乘法,逻辑回归,线性分类器,线性可分,核函数,损失函数。。。。。。

但是不要怕,不具体理解SVM原理及算法,我们仍然是可以使用它,左右不过是一个分类器罢了,就是根据一堆自变量来预测因变量,所以就是变量预测。值得一提的是,SVM通常应用于二元分类变量预测,但是经过一些改进也可以勉强对多元分类变量预测,同时基于SVM的SVR也可以预测连续变量。

通俗的理解,我们想根据年收入来预测(划分)某家庭是贫穷还是富有,可以简单的按照年收入50万这样的阈值来进行分类,这个时候就只有一个自变量,就是收入的金额这个数值,因变量也很简单,就是二元分类情况。只不过通常我们要使用SVM的场景,自变量和因变量往都往肯定不止一个,阈值也没有那么简单找到。

训练SVM单细胞分类器

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

library(e1071)
model = svm(predictor_data , target,kernel = "linear")
## 值得注意的是这里默认会选择 kernel = "radial" ,核函数的概念需要理解。 
summary(model)  
save(model,file = 'svm_output.Rdata') 

可以看到,用法其实就一句话代码而已,得到的SVM单细胞分类器模型如下所示 :

> summary(model)  

Call:
svm.default(x = predictor_data, y = target, kernel = "linear")


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  linear 
       cost:  1 

Number of Support Vectors:  1295

 ( 582 184 207 95 197 23 7 )


Number of Classes:  7 

Levels: 
 CD4 T Mono B CD8 T NK DC Platelet

即使是不懂SVM的统计学原理,仍然是很容易使用它,这就是使用R语言的好处,任意机器学习算法信手拈来。

共有9 种核函数,常用的为其中的前四个:linear,Polynomial,RBF,Sigmoid 其中 RBF 适用于因变量比较少,而 linear适用于因变量非常多,也就是本例子里面的基因非常多,所以我们现在linear。

训练好的模型,就可以使用predict()函数去测试集里面看看效果。

看看模型效果

也是超级简单的可视化 :

test_outputs = predict(model, test_expr)
head( test_outputs ) 
pred_y =  test_outputs

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

仍然是简单的肉眼看了看,也是比前面的 一个完美的单细胞亚群随机森林分离器是如何炼成的 好一点哦,跟 LASSO回归也可以用来做单细胞分类 的效果不相上下。

效果还不错

当然了,如果是系统性学习过机器学习算法,理论上我们的这样的分类器应该是有评价指标,而不是简单的肉眼看。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.

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