机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?

news2024/11/24 10:07:46

一、引言

在实际应用中,特征选择作为机器学习和数据挖掘领域的重要环节,对于提高模型性能和减少计算开销具有关键影响。特征选择是从原始特征集中选择最相关和最具区分力的特征子集,以提高模型的泛化能力和可解释性。

特征选择在实践中具有以下重要性:

  • 提高模型性能:通过选择最相关的特征子集,可以减少冗余和噪声特征的干扰,从而提高模型的预测准确性和泛化能力。
  • 减少计算开销:特征选择可以降低模型训练和推断过程中的计算复杂度,加快模型的训练速度和实时预测效率。
  • 提高模型解释性:通过选择具有较高可解释性的特征,可以增强对模型内部机制的理解,并为决策提供更清晰的解释和依据。

特征选择方法可以分为三大类:过滤式方法、包裹式方法和嵌入式方法。过滤式方法独立于任何具体的学习算法,通过对特征进行评估和排序来选择特征子集。包裹式方法直接使用学习算法来评估特征子集的性能。嵌入式方法将特征选择融入到学习算法中,通过优化算法的目标函数来同时选择特征和训练模型。

总之,特征选择在机器学习和数据挖掘任务中扮演着重要的角色,能够提高模型性能、减少计算开销,并增强模型的可解释性。通过合理选择合适的特征选择方法,可以进一步优化实际应用中的模型训练和预测效果。

二、递归特征消除算法概述

2.1 算法原理

递归特征消除算法(Recursive Feature Elimination, RFE)是一种基于模型的特征选择方法,通过反复训练模型和剔除最不重要特征的方式来选择最优的特征子集。

具体步骤如下:

  1. 首先,用训练数据训练一个初始模型,并计算每个特征的重要性得分(例如,使用模型的系数、特征对目标变量的影响等)。
  2. 然后,根据特征重要性得分对特征进行排序,从中选择得分最低的若干个特征作为待剔除的特征。
  3. 在剩余的特征上重新训练模型,并计算新的特征重要性得分。
  4. 如果特征数量达到预设的目标或者所有特征都被剔除完毕,停止算法;否则,回到第2步。
  5. 最终,选择剩余的特征作为最终的特征子集。

递归特征消除算法通过反复迭代剔除最不重要的特征,逐步降低特征子集的维度,直到达到预定的目标特征数量。这样做的好处是可以保留对目标变量预测具有重要贡献的特征,同时减少冗余和噪声特征的干扰。

2.2 工作流程

递归特征消除算法的工作流程如下:

  1. 初始化:选择一个合适的学习算法作为基础模型,并设定目标特征数量。
  2. 特征重要性评估:使用基础模型对原始特征进行训练,并计算特征的重要性得分。
  3. 特征排序:根据得分对特征进行排序,选择得分最低的若干个特征作为待剔除的特征。
  4. 特征剔除:从特征集中剔除待剔除的特征,得到新的特征子集。
  5. 判断停止条件:如果特征数量达到预设的目标或者所有特征都被剔除完毕,跳转到步骤7;否则,继续下一步。 回到步骤2:在新的特征子集上重新进行特征重要性评估和特征剔除。
  6. 结束算法:选择剩余的特征作为最终的特征子集。

递归特征消除算法通过不断剔除特征,直至达到预设目标,从而选择出最佳的特征子集。这个过程是基于模型的特征选择方法中的一种重要实现方式,能够有效地提高模型性能和减少特征维度的影响。

三、示例与代码实现

  • 「数据集准备」
library(survival)
head(gbsg)

结果展示:

   pid age meno size grade nodes pgr er hormon rfstime status
1  132  49    0   18     2     2   0  0      0    1838      0
2 1575  55    1   20     3    16   0  0      0     403      1
3 1140  56    1   40     3     3   0  0      0    1603      0
4  769  45    0   25     3     1   0  4      0     177      0
5  130  65    1   30     2     5   0 36      1    1855      0
6 1642  48    0   52     2    11   0  0      0     842      1
  • 「示例数据集介绍」
> str(gbsg)
'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1"1 2 1 1 1 2 2 1 2 2 ...

age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
  • 「数据预处理」
data <- gbsg
# 分割数据集为特征和标签
features <- data[, c("age""meno""size""grade""nodes""pgr""er""hormon")]
labels <- data$status


# 对特征数据进行预处理(例如归一化)
preprocessed_features <- scale(features)

# 划分训练集和测试集
set.seed(123)
train_indices <- sample(x = 1:nrow(data), size = 0.7 * nrow(data), replace = FALSE)
test_indices <- sample(setdiff(1:nrow(data), train_indices), size = 0.3 * nrow(data), replace = FALSE)

train_features <- preprocessed_features[train_indices, ]
train_labels <- labels[train_indices]

test_features <- preprocessed_features[test_indices, ]
test_labels <- labels[test_indices]
  • 「安装和加载必要的R软件包」
install.packages("caret")
library(caret)
  • 「模型拟合」
rfProfile <- rfe(train_features, train_labels,
                 sizes = c(1:8),
                 rfeControl = rfeControl(functions = rfFuncs))
rfProfile
plot(rfProfile, type = c("o""g"))

结果展示:

Recursive feature selection

Outer resampling method: Bootstrapped (25 reps) 

Resampling performance over subset size:

 Variables   RMSE Rsquared    MAE  RMSESD RsquaredSD    MAESD Selected
         1 0.5401  0.02005 0.4742 0.04158    0.02388 0.021952         
         2 0.5168  0.03063 0.4574 0.01733    0.02087 0.015997         
         3 0.5023  0.04217 0.4533 0.01358    0.02116 0.011811         
         4 0.4955  0.04681 0.4531 0.01010    0.01670 0.009401         
         5 0.4870  0.06166 0.4506 0.01024    0.02139 0.008108         
         6 0.4870  0.06795 0.4445 0.01205    0.02557 0.009362         
         7 0.4819  0.07893 0.4426 0.01155    0.02468 0.008790        *
         8 0.4826  0.07541 0.4457 0.01207    0.02717 0.009006         

The top 5 variables (out of 7):
   nodes, pgr, age, er, size

从结果中可以看出,当特征为7个时,RMSE最低,表示模型的预测性能最好,与实际观测值的接近程度最高。从7个特征中选出最优特征的前五个分别是nodes, pgr, age, er, size。

  • 「模型评估」
postResample(predict(rfProfile, test_features), test_labels)

结果展示:

      RMSE   Rsquared        MAE 
0.47191001 0.08849481 0.43901291 

这个结果看起来不行,不过没关系,我们的结果是分类变量,并非是连续变量,而RMSE、Rsquared和MAE都是适用于结果变量是连续变量的评估指标。当结果变量是分类变量时,在临床医学中应该使用适合的评估指标,如分类准确率、灵敏度、特异度等。

四、实验结果与讨论

  • 「特征选择结果分析」: 在递归特征消除算法中,通过不断剔除特征,最终选择出了一个最优的特征子集。对于特征选择结果的分析可以从以下几个方面进行:

  1. 特征重要性排序:根据特征的重要性得分进行排序,可以观察到哪些特征被认为是最重要的。通常情况下,得分较高的特征更加相关,对模型的预测性能有较大的贡献。
  2. 特征剔除情况:观察在不同迭代步骤中特征的剔除情况。某些特征可能在早期的迭代中就被剔除了,而有些特征可能一直保留到最后。这可以帮助我们判断哪些特征可能是冗余或者噪声的。
  3. 特征数目变化:记录每一步剔除特征后剩余的特征数目的变化情况。可以观察到随着特征的剔除,特征数目逐渐减少,达到预设的目标特征数目。
  • 「最优特征对模型性能的影响」: 递归特征消除算法的目标是选择出最佳的特征子集,以提高模型的性能。可以通过比较使用全量特征和最优特征子集在同一模型上的性能来评估选择结果的影响。

  1. 模型性能指标:主要关注模型的预测性能指标,例如准确率、召回率、F1值等。比较使用全量特征和最优特征子集在相同验证集上的性能指标,观察是否有明显的提升。
  2. 模型复杂度:随着特征数目的减少,模型的复杂度也会相应减小。可以观察模型的参数数量或复杂度的变化情况,判断是否存在过拟合或欠拟合的情况。
  3. 训练时间和资源消耗:特征剔除过程中,模型的训练时间和资源消耗可能会减少,因为训练数据的维度减小了。可以比较全量特征和最优特征子集的训练时间和资源消耗情况。

五、改进和注意事项

5.1 改进递归特征消除算法的效率:

  1. 并行化计算:可以通过使用并行计算来加速特征选择过程。将数据集分成多个子集,每个子集上运行一个特征选择过程,并最后合并结果。
  2. 提前停止准则:在特征选择过程中,可以设置一个提前停止准则,当剩余特征数目达到一定阈值时,停止进一步的迭代。这样可以节省计算资源。
  3. 特征采样:在大规模数据集中,可以对原始数据进行采样,然后在采样数据上进行特征选择。这样可以减小特征选择的计算量。

5.2 注意过拟合问题:

  1. 递归特征消除算法有可能选择了不具有统计显著性的特征,导致模型出现过拟合的问题。因此,在应用该算法时,需要采用合适的评估指标和交叉验证方法,以准确评估特征选择结果的泛化能力。
  2. 可以尝试使用正则化技术,如L1正则化(Lasso)或L2正则化(Ridge),在进行特征选择时加入惩罚项,以避免过度依赖某些特征,从而提高模型的泛化性能。
  3. 在特征选择过程中,可以监控模型在训练集和验证集上的性能变化。如果模型在训练集上的性能持续提升,但在验证集上的性能开始下降,可能存在过拟合问题。

六、总结:

「递归特征消除算法具有以下优势」

  1. 自动选择最佳特征子集,减少了数据维度,提高了模型的解释性和泛化性能。
  2. 可以通过特征重要性排序,帮助我们理解数据集的特征结构,揭示潜在的相关关系。
  3. 通过减小特征数目,可以加快训练时间和降低计算资源消耗。

「递归特征消除算法适用于以下场景」

  1. 特征数量较多,需要降维的情况,例如基因表达数据、图像处理等。
  2. 想要简化模型复杂度,并且保留最重要的特征。
  3. 需要理解数据集的特征重要性排序,以及特征与目标变量之间的关系。

「对未来研究的展望」

  1. 改进特征选择算法的效率和准确性,使其适用于大规模、高维度的数据集。
  2. 结合不同的特征选择方法,如过滤法、包装法和嵌入法,以获得更好的特征子集。
  3. 考虑特征之间的交互作用,将特征选择与特征工程相结合,以提高模型的预测性能。
  4. 探索自适应的特征选择算法,根据数据集的特点和模型的需求,自动调整特征选择的策略。
  5. 在不同领域中应用特征选择算法,例如医疗、金融、图像识别等,以解决实际问题。

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/877454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法笔试 java 输入输出练习

在线编程题刷题训练 所有答案 scancer函数的用法 输入输出总结top&#xff01;&#xff01;&#xff01;&#xff01; java如何调用函数&#xff08;方法&#xff09; java刷acm的各种输入输出 vscode配置java环境 子函数的调用&#xff0c;直接定义一个static子函数调用就…

人工智能任务1-【NLP系列】句子嵌入的应用与多模型实现方式

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务1-【NLP系列】句子嵌入的应用与多模型实现方式。句子嵌入是将句子映射到一个固定维度的向量表示形式&#xff0c;它在自然语言处理&#xff08;NLP&#xff09;中有着广泛的应用。通过将句子转化为向量…

ARM(汇编指令)

.global _start _start:/*mov r0,#0x5mov r1,#0x6 bl LoopLoop:cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0mov pc,lr*/ mov r0,#0x1mov r1,#0x0mov r2,#0x64bl Loop Loop:cmp r0,r2bhi stopadd r1,r1,r0add r0,r0,#0x01mov pc,lr stop:B stop.end

Android Ble蓝牙App(五)数据操作

Ble蓝牙App&#xff08;五&#xff09;数据操作 前言正文一、操作内容处理二、读取数据① 概念② 实操 三、写入数据① 概念② 实操 四、打开通知一、概念二、实操三、收到数据 五、源码 前言 关于低功耗蓝牙的服务、特性、属性、描述符都已经讲清楚了&#xff0c;而下面就是使…

vue自定义指令动态绑定

在企业微信侧边栏应用中&#xff0c;给dialog添加了拖拽功能&#xff0c;但是因为dialog高度超过了页面高度&#xff0c;所以高度100%时拖拽有个bug--自动贴到窗口顶部而且企业侧边栏宽高都有限制&#xff0c;拖拽效果并不理想&#xff0c;所以就想缩小dialog再进行拖拽。 拖拽…

(一)掌握最基本的Linux服务器用法——了解Linux服务器基本的使用方法、常用命令。

1、掌握最基本的Linux服务器用法 1、了解Linux服务器基本的使用方法、常用命令。 1、Linux系统简介 略 2、服务器连接方法 1、SSH远程终端&#xff0c;Windows可以使用xshell软件。 2、PuTTY主要用来远程连接服务器&#xff0c;缺点是功能单一&#xff0c;只是一个客户端&…

Tomcat+Http+Servlet

文章目录 1.HTTP1.1 请求和响应HTTP请求&#xff1a;请求行请求头请求体HTTP响应&#xff1a;响应行&#xff08;状态行&#xff09;响应头响应体 2. Apache Tomcat2.1 基本使用2.2 IDEA中创建 Maven Web项目2.3 IDEA中使用Tomcat 3. Servlet3.1 Servlet快速入门3.2 Servlet执行…

Python 3 使用Hadoop 3之MapReduce总结

MapReduce 运行原理 MapReduce简介 MapReduce是一种分布式计算模型&#xff0c;由Google提出&#xff0c;主要用于搜索领域&#xff0c;解决海量数据的计算问题。 MapReduce分成两个部分&#xff1a;Map&#xff08;映射&#xff09;和Reduce&#xff08;归纳&#xff09;。…

yolov8训练进阶:从配置文件读入配置参数

yolov8官方教程提供了2种训练方式&#xff0c;一种是通过命令行启动训练&#xff0c;一种是通过写代码启动。 命令行的方式启动方便&#xff0c;通过传入参数可以方便的调整训练参数&#xff0c;但这种方式不方便记录训练参数和调试训练代码。 自行写训练代码的方式更灵活&am…

【Vue框架】用户和请求

前言 在上一篇 【Vue框架】Vuex状态管理 针对Vuex状态管理以getters.js进行说明&#xff0c;没有对其中state引入的对象进行详细介绍&#xff0c;因为整体都比较简单&#xff0c;也就不对全部做详细介绍了&#xff1b;但其中的user.js涉及到获取用户的信息、前后端请求的token…

今天来给大家聊一聊什么是Hierarchical-CTC模型

随着人工智能领域的不断发展&#xff0c;语音识别技术在日常生活和工业应用中扮演着越来越重要的角色。为了提高识别准确性和效率&#xff0c;研究人员不断探索新的模型和算法。在这个领域中&#xff0c;Hierarchical-CTC模型引起了广泛的关注和兴趣。本文将介绍什么是Hierarch…

JavaFx基础学习【二】:Stage

一、介绍 窗口Stage为图中标绿部分&#xff1a; 实际为如下部分&#xff1a; 不同的操作系统表现的样式不同&#xff0c;以下都是以Windows操作系统为例&#xff0c;为了使大家更清楚Stage是那部分&#xff0c;直接看以下图&#xff0c;可能更清楚&#xff1a; 有点潦草&…

MachineLearningWu_15/P70-P71_AdamAndConv

x.1 算法参数更新 我们使用梯度下降算法来自动更新参数&#xff0c;但是由于学习率的不好选择性&#xff0c;我们有时候会下降地很快&#xff0c;有时候下降地很慢&#xff0c;我们期望有一种方式能够自动调整学习率的变化&#xff0c;这里引入Adaptive Moment Estimation/Ada…

City Walk带动茶饮品牌售1200万,媒介盒子带你探究奥秘

年轻人生活趋势又出现了一个新鲜词——City Walk&#xff0c;简单来说&#xff0c;City Walk就是没有目的地&#xff0c;没有目标&#xff0c;只是出行&#xff0c;填充自己的生活。 其实这个词源于gap year&#xff0c;而这个说法一直是国外的一些毕业生&#xff0c;大多会在…

解决方案 | 法大大加速医疗器械行业创新升级

科技的不断进步&#xff0c;带动医疗器械产品不断创新升级。数字化、智能化的技术也开始广泛应用在医疗器械行业中。行业的蓬勃发展&#xff0c;进一步驱动了医疗器械行业规范化管理政策的出台&#xff0c;2019年&#xff0c;《医疗器械产品注册管理办法》&#xff08;2019&…

Mongodb (四十一)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1.1 相关概念 1.2 特性 二、应用场景 三、安装 四、目录结构 五、默认数据库 六、 数据库操作 6.1 库操作 6.2 文档操作 七、MongoDB数据库备份 7.1 备…

Mybatis-Plus(四 )--其他功能和ActiveRecord和MybatisX和AutoGenerator

一.其他功能 1.自动填充 有些时候我们可能会在插入或者更新数据时&#xff0c;希望有些字段可以自动填充数据&#xff0c;比如密码&#xff0c;version等。 【1】添加TableField注解 TableField(fillFieldFill.INSERT)//插入数据时进行填充 private String password; 除了…

【机密计算实践】OPEN Enclave SDK 安装与构建

机密计算是基于硬件支持的可信执行环境的&#xff0c;比如 Intel SGX 硬件技术上面的 enclave 以及 Arm Trustzone 上的 OT-TEE&#xff0c;不过这些异构的 TEE 之间差异还是蛮大的&#xff0c;所以亟需一种能够屏蔽 TEE 差异软件中间件或者 SDK&#xff0c;这就是本文将要提到…

我学会这些车载技术,是不是就可以进【小米】车企?

作者&#xff1a;阿刁 随着智能化和电动化的发展&#xff0c;车载开发领域的前景非常广阔。许多手机厂商也纷纷加入进来&#xff0c;华为、小米等手机巨头也相继推出新能源汽车。所以在未来&#xff0c;车载系统将成为汽车的核心部分&#xff0c;涵盖车辆的控制、信息娱乐、智能…

“先锋龙颜美学”,比亚迪宋L 完成工信部申报,单双电机正式上市

根据工信部最新发布的《道路机动车辆生产企业及产品公告》&#xff08;第 374 批&#xff09;&#xff0c;我们得知比亚迪汽车公司的新款车型宋 L 已经顺利完成申报&#xff0c;并成功获得核准。这款车型将会有两个版本&#xff0c;分别是单电机和双电机版本。 此外&#xff0c…