机器学习-特征选择:如何使用相关性分析精确选择最佳特征?

news2024/12/29 10:20:36

一、引言

「特征选择」在机器学习中发挥着重要的作用,它的目标是从众多可用特征中挑选出最具预测能力的特征子集,以提高模型性能和泛化能力。然而,由于现实中的数据集通常具有大量特征和复杂的相关性,特征选择变得非常具有挑战性。因此,寻找一种精确选择最佳特征的方法成为了研究的关键问题。

为了解决这个问题,本文致力于利用相关性分析来辅助特征选择过程。相关性分析作为一种用于量化特征之间关系的方法,可以帮助我们理解数据中的潜在模式和相互作用。通过分析特征之间的相关性,我们可以更加准确地选择具有高预测能力和独立性的特征,从而提高特征选择的效果和结果。

二、特征选择方法概述

特征选择是机器学习和数据挖掘中的关键步骤,用于从原始特征中选择出最具有代表性和预测能力的子集。在本节中,我们将详细介绍特征选择的三种常见方法:过滤式特征选择、包裹式特征选择和嵌入式特征选择。

2.1 过滤式特征选择

「过滤式特征选择」是一种基于特征本身的统计指标为基准进行特征评估和筛选的方法。它独立于任何特定的机器学习算法,并在特征选择前独立进行。过滤式特征选择的主要步骤包括统计指标计算和阈值设定。


  1. 「统计指标」:是用于衡量特征与目标变量之间相关性的度量。常用的统计指标包括方差、相关系数、卡方检验和互信息等。方差衡量特征的变异性,相关系数衡量特征与目标变量之间的线性关系,卡方检验用于离散特征的相关性检验,互信息用于衡量特征与目标变量之间的信息量。
  2. 「阈值设定」:通过设定阈值,我们可以根据统计指标的大小来筛选特征子集。通常,我们会选择与目标变量相关性高于阈值的特征。阈值的选择可以根据实际问题的需求和数据集的特点进行调整。

2.2 包裹式特征选择

包裹式特征选择是一种以特定机器学习算法的性能指标为基准进行特征评估和选择的方法。它将特征选择视为一个搜索问题,通过评估不同特征子集的性能来确定最佳特征组合。


  1. 「评估指标」:用于衡量特征子集的性能。常用的评估指标包括交叉验证准确率、均方误差、F1分数等,具体选择哪个评估指标取决于问题类型和任务需求。通过在特征子集上训练和评估机器学习模型,我们可以获得评估指标的值。
  2. 「搜索算法」:用于在特征子集空间中寻找最佳的特征组合。常用的搜索算法包括贪婪搜索、遗传算法、回溯算法等。这些算法通过不断地添加或删除特征,或者进行特征子集的组合和交换,来探索特征子集空间并寻找最佳的特征组合。

2.3 嵌入式特征选择

嵌入式特征选择是一种将特征选择与机器学习模型训练过程相结合的方法。它通过在模型训练过程中对特征进行惩罚或评估,实现同时进行特征选择和模型优化的目的。


  1. 「基于惩罚项的方法」: 使用正则化的技术,在目标函数中引入惩罚项来约束特征的系数。常见的基于惩罚项的方法包括L1正则化(Lasso)和L2正则化(Ridge),它们分别通过对特征的系数进行稀疏化和缩减,实现特征选择的效果。
  2. 「模型训练中的特征选择」:在一些机器学模型中,特征选择可以直接嵌入到模型训练的过程中,以在模型训练过程中动态选择和调整特征。

三、相关性分析与特征选择

相关性分析是特征选择过程中的重要步骤,用于评估特征与目标变量之间的相关性。通过分析特征与目标变量的相关关系,我们可以确定哪些特征对于预测目标变量是最具有预测能力的,从而帮助我们进行有效的特征选择。

  • 「相关性度量方法」

在进行相关性分析时,常用的相关性度量方法包括相关系数和其他相关性度量方法。


  1. 「相关系数」:是衡量两个变量之间线性相关程度的度量。常见的相关系数包括皮尔逊相关系数和斯皮尔曼相关系数。皮尔逊相关系数用于衡量两个连续变量之间的线性相关性,取值范围为-1到1,其中1表示正相关,-1表示负相关,0表示无相关性。斯皮尔曼相关系数用于衡量两个变量之间的单调相关性,不受线性关系的限制。
  2. 「其他相关性度量方法」:除了相关系数,还有其他一些相关性度量方法可用于分析特征和目标变量之间的相关性。例如,互信息可用于衡量两个变量之间的信息量。卡方检验可用于比较离散型特征与分类目标之间的相关性。这些方法可以根据具体问题的要求和数据的特点进行选择和应用。
  • 「相关性分析和特征选择的结合」

  1. 「过滤式特征选择中」,相关性分析被广泛应用于评估特征与目标变量之间的相关性。通过计算相关系数或其他相关性度量,我们可以筛选出与目标变量相关性较高的特征。设定合适的阈值,我们可以选择保留相关性高于阈值的特征,从而减少特征空间的维度,提高模型的训练效率。
  2. 「在包裹式特征选择中」,相关性分析可以用于评估特征子集的性能。通过计算特征子集与目标变量之间的相关性,我们可以确定特征子集的预测能力。在搜索算法中,通过不断地选择和排除特征,我们可以寻找具有最大相关性和最优性能的特征子集。
  3. 「在嵌入式特征选择中」,相关性分析可以影响模型训练过程中的特征选择。通过引入惩罚项或评估特征的重要性,模型可以倾向于选择与目标变量高度相关的特征。相关性分析可以帮助我们选择具有较高相关性的特征,并在模型训练过程中进行特征选择和模型优化。

四、相关性与特征选择流程

  1. 数据准备与预处理
  2. 相关性分析的实施

  • 收集数据:收集特征和目标变量的数据。
  • 计算相关性:使用合适的相关性度量方法计算特征与目标变量之间的相关性。常见的方法包括皮尔逊相关系数、斯皮尔曼相关系数、互信息、卡方检验等。根据数据的类型和问题的需求选择合适的方法。
  • 可视化分析:使用散点图、热力图、相关性矩阵等可视化工具将相关性结果进行可视化,以更直观地了解特征之间和特征与目标变量之间的相关性。

  1. 特征选择方法的选择与执行

根据问题的特点和数据集的规模,选择合适的特征选择方法进行特征选择。


  • 过滤式特征选择:基于统计指标和阈值设定的方法,选择与目标变量相关性高于一定阈值的特征。
  • 包裹式特征选择:基于评估指标和搜索算法,通过评估特征子集的性能来选择最佳特征子集。
  • 嵌入式特征选择:将特征选择嵌入到模型训练过程中,通过惩罚项或模型训练中的特征评估来选择特征。

  1. 型性能评估与调整

在完成特征选择后,需要使用选定的特征训练模型并评估模型的性能。根据评估结果,可以调整特征选择的方法、参数或模型的超参数,以进一步提高模型的性能。

五、实例演示

5.1 数据集载入

library(survival)
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表示事件发生)

5.2 相关性分析与特征选择

我们这部分先演示过滤式特征选择,如果想了解其它的两种特征选择方法,关注和联系我,我们一起讨论和学习。在这个数据集,我比较感兴趣的是各个特征与死亡或者复发时间的感兴趣。

  • 计算相关系数R和p值

# 计算皮尔逊相关系数
cor_pearson <- cor.test(gbsg$age, gbsg$rfstime, method = "pearson")
cor_pearson

# 计算Spearman相关系数
cor_spearman <- cor.test(gbsg$age, gbsg$rfstime, method = "spearman")
cor_spearman

# 计算Kendall's tau
cor_kendall <- cor.test(gbsg$age, gbsg$rfstime, method = "kendall")
cor_kendall

结果展示:

# > cor_pearson

        Pearson's product-moment correlation

data:  gbsg$age and gbsg$rfstime
t = 1.4132, df = 684, p-value = 0.158
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.02098285  0.12829501
sample estimates:
       cor 
0.05395755 


# > cor_spearman

        Spearman'
s rank correlation rho

data:  gbsg$age and gbsg$rfstime
S = 51463976, p-value = 0.2552
alternative hypothesis: true rho is not equal to 0
sample estimates:
     rho 
0.043504 


# > cor_kendall

        Kendall's rank correlation tau

data:  gbsg$age and gbsg$rfstime
z = 1.0904, p-value = 0.2756
alternative hypothesis: true tau is not equal to 0
sample estimates:
       tau 
0.02821487 

其中p-value即是P值,然后sample estimates的值就是R。这里介绍一下R和P的关系,以及这些参数怎么理解。

「R绝对值代表相关性,关系如下:」

  • 绝对值小于0.3:可认为两个特征之间的相关性较弱。
  • 绝对值约为0.3-0.5之间:可认为两个特征之间存在中度相关性。
  • 绝对值大于0.5:可认为两个特征之间存在较强的相关性。

「P值的理解:」

  • 小于0.05,可以认为两组特征关系显著
  • 大于0.05,可以认为两组特征关系不显著

「总结:是否相关看P值,相关类型和程度看R」


  • 图形化展示

优美的图形总是比单纯的数字更加形象和显著。让我们开始数据可视化模块吧!

library(ggplot2)
library(ggpubr)
library(ggExtra)

p1=ggplot(gbsg, aes(age,rfstime)) + 
      xlab("age")+ylab("rfstime")+
      geom_point(shape = 21, colour = "#4682B4", fill = "#87CEFA", size = 3, stroke = .5,alpha=0.8)+ geom_smooth(method="lm",formula = y ~ x,linetype=2,color="#6495ED",fill="#D3D3D3") + theme_bw()+
      stat_cor(method = 'spearman', aes(x =age, y =rfstime))
p2=ggMarginal(p1, type = "density", xparams = list(fill = "#FFE4B5"),yparams = list(fill = "#90EE90"))
p2

R值为0.044,弱相关;p为0.26,大于0.05,可以认为这两个特征之间相关性在统计上不显著。可以排除掉!


六、总结

相关性分析具有一定的局限性,如下:

  • 异常值的影响:相关性分析对异常值敏感,如果数据中存在异常值,可能会对相关性结果产生不良影响。
  • 非线性关系:皮尔逊相关系数假设变量之间存在线性关系,对于非线性关系,相关性分析可能会得出错误的结论。
  • 罪魁祸首谬误:相关性只能显示两个变量之间存在关系,不能确定其中任何一个变量是导致另一个变量发生变化的原因,即不能推断因果关系。
  • 样本大小:相关性的可靠性和显著性检验通常受到样本大小的影响。较小的样本容量可能导致不准确或不具有代表性的相关性结果。

改进方式,如下:

  • 多元回归分析:相比于简单的相关性分析,多元回归分析可以考虑多个变量之间的相互影响,从而更准确地解释变量之间的关系。
  • 非参数方法:针对非线性关系,可以采用非参数方法,如局部加权回归(LOESS)或核密度估计等,以获得更准确的相关性结果。
  • 考虑时间序列:对于时间相关的数据,可以使用时间序列分析方法,如自相关函数(ACF)和偏自相关函数(PACF),以揭示变量之间的动态关系。
  • 引入因果关系研究:除了相关性分析,更深入的研究可以包括因果关系的探索,通过实验设计或因果推理方法来确定变量之间的因果关系。
  • 多源数据整合:随着大数据时代的到来,将多个数据源整合起来可以提供更全面和准确的相关性分析结果,例如结合社交媒体数据、经济指标和医疗数据等

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

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

相关文章

[ 云计算 | AWS ] IAM 详解以及如何在 AWS 中直接创建 IAM 账号

本章节主要介绍 IAM 相关知识点以及在 AWS 控制台窗口如何创建一台 Amazon IAM 账号。 文章目录 一、什么是 IAM&#xff1f;二、IAM 常见种类2.1 EIAM2.2 CIAM2.3 云厂商 IAM 三、账号&#xff08;Account&#xff09;三户模型 四、认证&#xff08;Authentication&#xff09…

java使用Tess4J实现OCR图片文字识别

目录 介绍一、maven如下二、下载语言模型1.下载语言模型2.百度云下载 三、测试1.测试代码2.测试图片3.效果 介绍 Tess4J 是 Tesseract OCR 的 java api 实现库&#xff0c;你可以通过 java 调用来轻松的实现图片识别并提取文字&#xff0c;也就是 OCR 图片提取文字技术。 Tes…

黑客是什么?想成为黑客需要学习什么?

什么是黑客 在《黑客辞典》里有不少关于“黑客”的定义, 大多和“精于技术”或“乐于解决问题并超越极限”之类的形容相关。然而&#xff0c;若你想知道如何成为一名黑客&#xff0c;只要牢记两点即可。 这是一个社区和一种共享文化&#xff0c;可追溯到那群数十年前使…

mybits相关知识点

这里写目录标题 入门第一个程序步骤配置sql&#xff0c;建立数据库连接 jdbc数据库连接池简介连接池的切换总结 lombok Mybatis基础操作&#xff08;注解&#xff09;准备工作类型对应 删除简介具体代码 预编译简介优点优点1优点2 预编译的实现总结 新增简介具体代码 新增&…

如何发布插件到npm

首先 你需要注册一个npm账号 npm 网址&#xff1a;https://www.npmjs.com/ 点击 Sign in 跳转到登录页面 点击 Create Account 进行一个新建账户 注册完成后会有一封邮件发送一个一次性密码&#xff0c;到时候验证一下就行。 登录完成之后 点击你的头像 点击Account 进行验证…

ORA-01940 处理方法

问题描述 在删除用户时&#xff0c;提示 ORA-01940&#xff1a;无法删除当前连接的用户 处理方法 出现这种错误&#xff0c;是因为当前用户有连接的session。 1.通过如下语句查询对应的连接&#xff1a; select sid,serial# from v$session where usernameTSAI结果如下&am…

BACnet资料整理

BACnet stack 链接: link VS2019工程有几个编译错误&#xff0c;文件没有加入工程中 https://bacnet.sourceforge.net/ 使用该协议栈生成的几个工具 https://sourceforge.net/projects/bacnet/files/bacnet-tools/ BACnet stack BACnet基础 https://wenku.baidu.com/view/bd…

用OpenCV进行传统图像分割

1. 引言 欢迎回来&#xff0c;我的图像处理爱好者们&#xff01;本文我们将直接进入传统图像分析的新领域——图像分割&#xff0c;这是指将图像分成若干具有相似性质的区域的过程&#xff0c;从数学角度来看&#xff0c;图像分割是将图像划分成互不相交的区域的过程。 闲话少…

上海亚商投顾:沪指高开高走涨1.31% 汽车整车板块领涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日集体反弹&#xff0c;沪指全天高开高走&#xff0c;深成指、创业板指午后有所回落。中字头及以保险为…

3.FreeRTOS系统源码移植

目录 一、获取FreeRTOS源代码 二、FreeRTOS系统源码内容 三、FreeRTOS系统源码移植 一、获取FreeRTOS源代码 来FreeRTOS官方网站:https://www.freertos.org/ 我这里主要提供的是例程为FreeRTOS的V10.4.6版本 1、进入官网&#xff0c;点击Download FreeRTOS 2、点击Downl…

数分面试题-SQL高频考点

目录标题 1、SQL语言分类2、join连接3、列转换3.1 列转行3.2 行转列 4、分页查询5、字符串处理函数5.1 字符函数5.2 数学函数5.3 日期函数 6、索引6.1 什么是索引6.2 建立索引的优缺点6.3 索引有哪些6.4 索引为什么快6.5 什么情况下加索引6.6 怎么知道索引用没用上6.7 用过组合…

Axure教程—中继器删除与批量删除

本文介绍的是用Axure中的中继器实现删除与批量删除效果 效果 功能 1、选中某项数据删除&#xff0c;删除后提示“删除成功” 2、选择多项数据删除&#xff0c;删除后提示“删除成功”&#xff0c;如果不选取数据&#xff0c;点击”批量删除“按钮&#xff0c;提示”请至少选择…

SNMP 计算机网络管理 一文理清-管理信息库,OID,MIB结构树,SNMP协议体系结构

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

Java接口详解

目录 接口方法 接口的属性 接口方法 在Java设计的时候, 我们所说的接口,不同于类,我们尝尝希望一个类能满足某个特定的功能,或者需求. 我们在使用Arrays类中的sort方法对对象数组进行排序,但是对象所属的类必须实现Comparable接口: 可以看到里面只有一个方法: public inter…

【动态规划算法】第二题:⾯试题08.01.三步问题

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 &#x1f389;作者宣言&#xff1a;认真写好每一篇博客 &#x1f38a;作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 文章目录 前言 前言 今天我们开始讲解动态规…

MySQL数据库总结 之 约束(restraint) 外键约束

前三篇关于MySQL的博客&#xff0c;地址如下&#xff1a; 1. MySQL数据库 && SQL语言命令总结 && 数据类型、运算符和聚合函数汇总_Flying Bulldog的博客-CSDN博客 2. 从0到1 && 关于MySQL的数据库和表_Flying Bulldog的博客-CSDN博客 3. MySQL数据…

Protobuf实现序列化和反序列化详细步骤

步骤1&#xff1a;添加对应的依赖 <dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.7.1</version> </dependency>步骤2&#xff1a;编写bulid.bat文件执行&#xff0c…

react组件--npm发包总过程(超全教程!建议收藏!)

npm发包总过程 npm账号登录注册&#xff08;已有账号可跳过&#xff09;登录验证是否登录成功创建组件项目目录图新建文件夹&#xff0c;并初始化安装依赖/src/index.js --打包入口文件src/components/button/index.js --组件逻辑代码src/components/button/index.css --组件逻…

10 次面试 9 次被刷?吃透这 500 道大厂 Java 高频面试题后,怒斩 offer

很多 Java 工程师的技术不错&#xff0c;但是一面试就头疼&#xff0c;10 次面试 9 次都是被刷&#xff0c;过的那次还是去了家不知名的小公司。 问题就在于&#xff1a;面试有技巧&#xff0c;而你不会把自己的能力表达给面试官。 应届生&#xff1a;你该如何准备简历&#x…

verilog HDL -生成块 - generate——endgenerate

参考&#xff1a;vrilog数字系统设计 夏宇闻 【第3版】 5.7 生成块理解 生成语句可以动态的生成verilog代码&#xff0c;方便参数化模块的生成&#xff0c;大大的简化程序的编写过程,常用于以下情况&#xff1a; 对矢量中的多个位进行重复操作进行多个模块的实例引用的重复操…