机器学习中的特征选择(变量筛选)方法简介

2023-02-14 17:34:49 浏览数 (1)

面向医学生/医生的实用机器学习教程

变量选择(特征选择,feature selection) ,是机器学习领域非常重要的问题,到底哪些变量是有用的,哪些是不重要的,可以删除的,怎么选才能提高模型表现,理论非常复杂,实在不是一个临床医生能完全掌握的,以下简单介绍下,感兴趣的自己看书,后续会推一些相关R包的使用教程。

需要注意,这里介绍的变量选择方法可以用在临床预测模型中,但是和大家常见的先单因素后多因素这种完全不是一个概念,虽然它们的目的相同,都是为了提高模型表现。

当数据的维度增加时,决定模型最终使用哪些预测变量是很关键的问题。数据的维度就是自变量(预测变量)

特征选择是特征工程中非常重要的一部分内容,特征选择的方法非常多,主要可以分为以下3类,每个大类下又会细分为好多具体的方法,有机会慢慢介绍...

  • 过滤法(filter)
    • 缺失值比例、方差、相关系数、方差分析/t检验/卡方检验、ROC等
    • 信息增益 information gain
    • 最小冗余最大相关性mrmr,Minimum Redundancy Maximum Relevance
    • ...
  • 包装法(wrapper)
    • 向前、向后、逐步
    • 递归特征消除rfe(也属于向后)
    • 模拟退火
    • 遗传算法
    • ...
  • 嵌入法(embeded)
    • 随机森林
    • MARS
    • lasso
    • GBDT
    • ...

大家经常使用的逐步选择法(step/stepAIC),也属于包装法的一种,在之前的推文中已有介绍:R语言逻辑回归的细节解读,但是并不局限于逻辑回归。

3种方法的简单解释如下,以后单独演示时会专门再解释:

  • 过滤法:进行变量选择时不考虑模型表现和变量重要性等,只是通过变量自身的情况、变量间的关系进行选择。
  • 包装法:变量选择考虑到了模型表现和变量重要性等信息,属于是对每一个模型进行“量身定制”的变量
  • 嵌入法:变量选择的过程就在模型训练的过程之中

R语言中的实现

后续主要介绍3个包:caretmlr3tidymodels

caret包中主要可以实现包装法和过滤法

caret包中的封装法有递归特征消除(recursive feature elimination,rfe)算法,遗传算法(genetic algorithms,ga)和模拟退火(Simulated annealing,sa)算法。

过滤法通过sbf函数实现,但其实部分数据预处理方法属于过滤法的内容。

mlr3中的变量选择主要包括两种:过滤法和包装法。不过和caret的实现方法略有不同。

过滤法通过mlr3filters包实现,包装法通过mlr3fselect包实现,关于这两种方法的具体实现,早已在之前的推文介绍过,大家可以参考之前的推文mlr3特征选择

不过随着mlr3的更新,部分细节稍有不同,以后再给大家慢慢演示。

tidymodels中的特征选择很不完善,不如mlr3做得好,也不如caret做得好!

部分过滤法包含在recipes中,部分包装法和嵌入法现在并不成熟,没有完整的实现,部分可通过colina包实现,但是这个包并不属于tidymodels,而是个人开发者贡献的R包。

已经看到tidymodels的开发者有计划增加特征选择的这部分特性,但不知何时实现...

总的来说,想要在R中完整实现以上三种方法,一言难尽.....

0 人点赞