前面我们演示了 一个完美的单细胞亚群随机森林分离器是如何炼成的,以及 LASSO回归也可以用来做单细胞分类 的两个机器学习算法可以用来做单细胞分类器,而且效果杠杠的。
索性就把各种其它机器学习算法都演示一遍吧,接下来是支持向量机,因其英文名为support vector machine,故一般简称SVM,五年前我就在咱们生信技能树公众号分享过它的用法,见:一文掌握SVM用法(基于R语言) ,如果要完全理解SVM原理及算法,还需要理解 线性回归,最小二乘法,逻辑回归,线性分类器,线性可分,核函数,损失函数。。。。。。
但是不要怕,不具体理解SVM原理及算法,我们仍然是可以使用它,左右不过是一个分类器罢了,就是根据一堆自变量来预测因变量,所以就是变量预测。值得一提的是,SVM通常应用于二元分类变量预测,但是经过一些改进也可以勉强对多元分类变量预测,同时基于SVM的SVR也可以预测连续变量。
通俗的理解,我们想根据年收入来预测(划分)某家庭是贫穷还是富有,可以简单的按照年收入50万这样的阈值来进行分类,这个时候就只有一个自变量,就是收入的金额这个数值,因变量也很简单,就是二元分类情况。只不过通常我们要使用SVM的场景,自变量和因变量往都往肯定不止一个,阈值也没有那么简单找到。
训练SVM单细胞分类器
首先,复制粘贴前面的 一个完美的单细胞亚群随机森林分离器是如何炼成的 ,就可以把单细胞表达量矩阵划分为训练集和测试集,然后走标准代码 训练SVM单细胞分类器 :
代码语言:javascript复制library(e1071)
model = svm(predictor_data , target,kernel = "linear")
## 值得注意的是这里默认会选择 kernel = "radial" ,核函数的概念需要理解。
summary(model)
save(model,file = 'svm_output.Rdata')
可以看到,用法其实就一句话代码而已,得到的SVM单细胞分类器模型如下所示 :
代码语言:javascript复制> 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()
函数去测试集里面看看效果。
看看模型效果
也是超级简单的可视化 :
代码语言:javascript复制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/),生信菜鸟图很早之前就推过相关的学习资源。而且还组建过学习小分队,给视频写配套笔记:
- StatQuest生物统计学 - 二项分布
- StatQuest生物统计学 - 中心极限定理
- StatQuest生物统计学 - 箱线图
- StatQuest生物统计学 - 二项分布的极大似然估计
- StatQuest生物统计学 - 机器学习介绍
- StatQuest生物统计学 - 机器学习之ConfusionMatrix
另外推荐生信菜鸟团的《周日-鲍志炜专栏》
如果是是python呢,我们生信菜鸟团的《周日-鲍志炜专栏》也有一个机器学习系列教程,目录如下:
- Jupyter Notebook 你不得不知的交互式笔记本
- 我最常用的 10 个 Jupyter Notebook 插件
- 免费的在线 Jupyter Notebook
- 机器学习实战 | 数据预处理
- 机器学习实战 | 特征选择
- 机器学习实战 | k-邻近算法
- 机器学习实战 | 决策树
- 机器学习实战 | 朴素贝叶斯
- 机器学习实战 | 逻辑回归
- 机器学习实战 | 支持向量机
- 机器学习实战 | 支持向量机·sklearn 参数详解
- 机器学习实战 | Adaboost
- 机器学习实战 | 机器学习性能指标
- 用小样本数据集进行机器学习建模的一些建议
- 用 Scikit-learn Pipeline 创建机器学习流程
- 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.
十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。