常见的变量选择方法
常见方法简介
变量选择(又叫特征选择,feature-selection),是机器学习和统计建模领域非常重要的问题,到底哪些变量是有用的,哪些是不重要的,可以删除的,怎么选才能提高模型表现,理论非常复杂,实在不是一个临床医生能完全掌握的,以下简单介绍下,感兴趣的自己看书。
在传统的临床预测模型中,比较常见的变量筛选方法有:
- 先单因素后多因素
- 最优子集(全子集回归)
- 逐步选择法
- lasso回归筛选变量
- 随机森林筛选变量
- …
我会在接下来的几章里详细介绍上面这几种方法.
除了以上方法外,在机器学习领域其实还有非常多专门用于特征选择的方法.
下面要介绍的变量筛选方法(并没有包含在本书中,可在公众号医学和生信笔记后台回复变量筛选获取相关合集)虽然可以用在临床预测模型中,但是和大家常见的“先单因素后多因素”这种完全不是一个概念,虽然它们的目的相同,都是为了提高模型表现以及减少使用的预测变量个数。
通常建议在机器学习为主的文章中使用以下变量选择方法,在传统的预测模型类文章中还是以上面介绍的方法为主。
当数据的维度增加时,决定模型最终使用哪些预测变量是很关键的问题。数据的维度就是自变量(预测变量)
特征选择是特征工程中非常重要的一部分内容,特征选择的方法非常多,主要可以分为以下3类,每个大类下又会细分为好多具体的方法,但是我基本都在公众号中介绍过了,感兴趣的可以自翻看历史推文。
- 过滤法(filter)
- 缺失值比例、方差、相关系数、方差分析/t检验/卡方检验、ROC等
- 信息增益 information gain
- 最小冗余最大相关性mrmr,Minimum Redundancy Maximum Relevance
- …
- 包装法(wrapper)
- 向前、向后、逐步
- 递归特征消除rfe(也属于向后)
- 模拟退火
- 遗传算法
- …
- 嵌入法(embeded)
- 随机森林
- MARS
- lasso
- GBDT
- …
大家经常使用的逐步选择法(step/stepAIC),也属于包装法的一种,但是并不局限于逻辑回归。
3种方法的简单解释如下,以后单独演示时会专门再解释:
- 过滤法:进行变量选择时不考虑模型表现和变量重要性等,只是通过变量自身的情况、变量间的关系进行选择。
- 包装法:变量选择考虑到了模型表现和变量重要性等信息,属于是对每一个模型进行“量身定制”的变量
- 嵌入法:变量选择的过程就在模型训练的过程之中
R语言中的实现
主要是3个R包:caret
、mlr3
、tidymodels
在caret
包中主要可以实现包装法和过滤法。
caret
包中的封装法有递归特征消除(recursive feature elimination,rfe)算法,遗传算法(genetic algorithms,ga)和模拟退火(Simulated annealing,sa)算法。
过滤法通过sbf
函数实现,但其实部分数据预处理方法属于过滤法的内容。公众号后台回复caret可以获取相关合集。
目前mlr3
已经实现了对这3种方法的支持,可以说是R语言中对变量筛选做的最好的综合性R包了。
过滤法和嵌入法通过mlr3filters
包实现,包装法通过mlr3fselect
包实现,关于3两种方法的具体实现,大家可以在公众号后台回复mlr3获取相关推文。
tidymodels
中的特征选择很不完善,不如mlr3
做得好,也不如caret
做得好!
部分过滤法包含在recipes
中,部分包装法和嵌入法现在并不成熟,没有完整的实现,部分可通过colina
包实现,但是这个包并不属于tidymodels
,而是个人开发者贡献的R包。
已经看到tidymodels
的开发者有计划增加特征选择的这部分特性,但不知何时实现…