搜索
查看: 4676|回复: 7

一些常用的machine learning R packages和简单介绍

[复制链接]

1

主题

7

帖子

41

积分

版主

Rank: 7Rank: 7Rank: 7

积分
41
发表于 2016-9-30 17:49:36 | 显示全部楼层 |阅读模式
本帖最后由 檀香沙 于 2016-10-29 18:42 编辑

因为研究相关和个人兴趣,所以在这里大概介绍几个自己常用的机器学习包,并且稍微介绍下它们的用途。


1. glmnet这个是S大统计大牛Rob Tibshirani和Trevor Hastie开发的ridge+lasso的包,主要是对线性模型加L2和L1的惩罚项实现了模型泛化以及变量筛选的功能。这个包很棒的是可以直接做coxph模型的survival分析,因为T和H他们的研究很大一部分都是跟生物医学相关的,所以survival被嵌入了。记住,因为惩罚项的原因,建模前要进行变量的标准化。l


2. randomForest
这个包也是很经典了,R上面实现随机森林的包。所谓随机森林,就是用bootstrap方法建立很多个decision tree,把它们aggregating到一起,即所谓的bagging了。随机森林有几个好处:模型泛化能力强,有变量重要性评估,非线性区分,另外还有一点非常重要,因为随机森林是基于决策树算法的,所以某种程度上可以认为是一种非参的方法,因此数据不需要进行标准化或者什么处理,就可以直接上模型。


随机森林不仅可以做分类,还可以做回归,但个人感觉回归效果似乎没分类好。另外,本人的新发现,随机森林可以用于特征工程,既将原变量通过森林转化(embedding)成为新的树变量,然后可以做很多其他计算。


3.gbm
这个包全称为Generized Boosted Model。所谓boosting,和上面随机森林里提到的bagging一样是一种方法,而不是一个具体模型,其思路在于将多个弱分类器组合加强成为一个强分类器。是不是有点类似随机森林的bagging,但不同之处在于bagging采用均匀采样方式(bootstrap),并且无权重的将决策树组合到一起,而boosting通过调整样本的权重(adaboost),或者通过不断对残差进行拟合(gradient boost),来调整和组合分类器进而产生强分类器。这个模型有较多参数需要调节,但如果调节好,效果可能不逊于甚至优于random forest。BTW,gbm也支持coxph的survival分析。


4.e1071
此Package能做的工作还蛮多的,包括幼稚(朴素)贝叶斯以及一些Clustering。但对于很多人来说,此包最重要的是可以做SVM(Support Vector Machine,支持向量机)。SVM是一个经典而强大的机器学习算法,由老毛国统计大神Vapnik和Chervonenkis开发,这两人可不得鸟,他们对机器学习的理论基础有着卓越贡献,VC理论VC维(多维C多漂亮??)等等都是他们提出的。

它的idea在于构建一个分类超平面(Hyper-Plane),即决策边界(Decision Boundary),这样的决策边界只由少数重要的样本,即支持向量(Support Vectors)通过最大化间隔(maximum margin)决定,而其他样本对于决策边界没有直接影响。为什么只由少量支持向量产生的决策边界会提高分类器的表现呢?我个人的理解是,支持向量通常是一些对于分类器比较challenge,比较容易分错的样本,而最大化决策边界与支持向量之间的margin则可以最小化这种分错的概率,进而提高模型泛化效果,试想当用SVM对testing data进行预测时,位于decision boundary的样本点则会有比较好的分类效果。

SVM还有两大重要的扩展功能,一是软间隔(Soft Margin),二是核函数(Kernel Function)。软间隔是通过对损失函数加一个惩罚项,使得Margin变的更加flexible,比如margin变宽,support vectors对决策边界的影响有权重差异,还容许少量错分以解决样本线性不可分的问题。核函数是通过不同的Kernel Function可以直接求得高维空间内积,进而在不增加计算复杂度的情况下,使得样本在高维空间线性(原空间非线性)分离。SVM有着较为坚实的数学理论基础,也常常最为机器学习理论学习的模范教程,有兴趣的同学可以看看具体的数学推导。虽然SVM是非常强大的分类器,但在实际应用中会稍微复杂一些,比如核函数及参数的选取,软间隔的参数设置等等,另外传统的SVM不提供概率预测和特征重要性估计。因此,在实际应用中我一般不直接使用SVM做我的模型,而更多会把它拿来和我想要的分类器做个对比(阳性对照组),如果我的分类器不比它差就可以说得过去。
BTW,这个包的名字e1071据说是开发者的办公室门牌号。。。。(这取名也忒随意了点吧)







(未完待续。。。)



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x



上一篇:测序建库策略与所适合地分析
下一篇:生物基础普及贴第一帖:等位基因
回复

使用道具 举报

1

主题

7

帖子

41

积分

版主

Rank: 7Rank: 7Rank: 7

积分
41
 楼主| 发表于 2016-10-29 18:38:00 | 显示全部楼层
自己顶
回复

使用道具 举报

2

主题

16

帖子

249

积分

中级会员

Rank: 3Rank: 3

积分
249
发表于 2017-2-23 00:42:15 | 显示全部楼层
没看完 不过先谢楼主了
回复 支持 反对

使用道具 举报

2

主题

17

帖子

145

积分

注册会员

Rank: 2

积分
145
发表于 2017-5-11 18:37:37 | 显示全部楼层
请问楼主有 randomForest 相应的脚本么  本人想用randomForest 进行生存相关的RNA筛查,望大神指导下,万分感谢!!!!!!!!
回复 支持 反对

使用道具 举报

1

主题

7

帖子

41

积分

版主

Rank: 7Rank: 7Rank: 7

积分
41
 楼主| 发表于 2017-6-2 11:52:29 | 显示全部楼层
miniaowai 发表于 2017-5-11 18:37
请问楼主有 randomForest 相应的脚本么  本人想用randomForest 进行生存相关的RNA筛查,望大神指导下,万分 ...

常用的randomForest包并不能做生存分析,而常用的生存分析的一般用线性模型。
如果你一定要用RF做survival的话,我找到一个randomSurvivalForest,可以试试。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

41

积分

版主

Rank: 7Rank: 7Rank: 7

积分
41
 楼主| 发表于 2017-6-2 11:53:54 | 显示全部楼层
miniaowai 发表于 2017-5-11 18:37
请问楼主有 randomForest 相应的脚本么  本人想用randomForest 进行生存相关的RNA筛查,望大神指导下,万分 ...

生存相关的RNA筛选,我建议你试试glmnet
回复 支持 反对

使用道具 举报

2

主题

41

帖子

385

积分

中级会员

Rank: 3Rank: 3

积分
385
发表于 2017-9-2 20:14:51 | 显示全部楼层
多谢群主分享~
学习了~~
如果大神能给点实战演示更妙了~
回复 支持 反对

使用道具 举报

0

主题

1

帖子

45

积分

新手上路

Rank: 1

积分
45
发表于 2018-7-16 22:37:50 | 显示全部楼层
虽然不懂,努力学习中!谢大神分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2019-4-26 10:47 , Processed in 0.035529 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.