一、引言
「特征选择」在机器学习中发挥着重要的作用,它的目标是从众多可用特征中挑选出最具预测能力的特征子集,以提高模型性能和泛化能力。然而,由于现实中的数据集通常具有大量特征和复杂的相关性,特征选择变得非常具有挑战性。因此,寻找一种精确选择最佳特征的方法成为了研究的关键问题。
为了解决这个问题,本文致力于利用相关性分析来辅助特征选择过程。相关性分析作为一种用于量化特征之间关系的方法,可以帮助我们理解数据中的潜在模式和相互作用。通过分析特征之间的相关性,我们可以更加准确地选择具有高预测能力和独立性的特征,从而提高特征选择的效果和结果。
二、特征选择方法概述
特征选择是机器学习和数据挖掘中的关键步骤,用于从原始特征中选择出最具有代表性和预测能力的子集。在本节中,我们将详细介绍特征选择的三种常见方法:过滤式特征选择、包裹式特征选择和嵌入式特征选择。
2.1 过滤式特征选择
「过滤式特征选择」是一种基于特征本身的统计指标为基准进行特征评估和筛选的方法。它独立于任何特定的机器学习算法,并在特征选择前独立进行。过滤式特征选择的主要步骤包括统计指标计算和阈值设定。
-
「统计指标」:是用于衡量特征与目标变量之间相关性的度量。常用的统计指标包括方差、相关系数、卡方检验和互信息等。方差衡量特征的变异性,相关系数衡量特征与目标变量之间的线性关系,卡方检验用于离散特征的相关性检验,互信息用于衡量特征与目标变量之间的信息量。 -
「阈值设定」:通过设定阈值,我们可以根据统计指标的大小来筛选特征子集。通常,我们会选择与目标变量相关性高于阈值的特征。阈值的选择可以根据实际问题的需求和数据集的特点进行调整。
2.2 包裹式特征选择
包裹式特征选择是一种以特定机器学习算法的性能指标为基准进行特征评估和选择的方法。它将特征选择视为一个搜索问题,通过评估不同特征子集的性能来确定最佳特征组合。
-
「评估指标」:用于衡量特征子集的性能。常用的评估指标包括交叉验证准确率、均方误差、F1分数等,具体选择哪个评估指标取决于问题类型和任务需求。通过在特征子集上训练和评估机器学习模型,我们可以获得评估指标的值。 -
「搜索算法」:用于在特征子集空间中寻找最佳的特征组合。常用的搜索算法包括贪婪搜索、遗传算法、回溯算法等。这些算法通过不断地添加或删除特征,或者进行特征子集的组合和交换,来探索特征子集空间并寻找最佳的特征组合。
2.3 嵌入式特征选择
嵌入式特征选择是一种将特征选择与机器学习模型训练过程相结合的方法。它通过在模型训练过程中对特征进行惩罚或评估,实现同时进行特征选择和模型优化的目的。
-
「基于惩罚项的方法」: 使用正则化的技术,在目标函数中引入惩罚项来约束特征的系数。常见的基于惩罚项的方法包括L1正则化(Lasso)和L2正则化(Ridge),它们分别通过对特征的系数进行稀疏化和缩减,实现特征选择的效果。 -
「模型训练中的特征选择」:在一些机器学模型中,特征选择可以直接嵌入到模型训练的过程中,以在模型训练过程中动态选择和调整特征。
三、相关性分析与特征选择
相关性分析是特征选择过程中的重要步骤,用于评估特征与目标变量之间的相关性。通过分析特征与目标变量的相关关系,我们可以确定哪些特征对于预测目标变量是最具有预测能力的,从而帮助我们进行有效的特征选择。
-
「相关性度量方法」
在进行相关性分析时,常用的相关性度量方法包括相关系数和其他相关性度量方法。
-
「相关系数」:是衡量两个变量之间线性相关程度的度量。常见的相关系数包括皮尔逊相关系数和斯皮尔曼相关系数。皮尔逊相关系数用于衡量两个连续变量之间的线性相关性,取值范围为-1到1,其中1表示正相关,-1表示负相关,0表示无相关性。斯皮尔曼相关系数用于衡量两个变量之间的单调相关性,不受线性关系的限制。 -
「其他相关性度量方法」:除了相关系数,还有其他一些相关性度量方法可用于分析特征和目标变量之间的相关性。例如,互信息可用于衡量两个变量之间的信息量。卡方检验可用于比较离散型特征与分类目标之间的相关性。这些方法可以根据具体问题的要求和数据的特点进行选择和应用。
-
「相关性分析和特征选择的结合」
-
「过滤式特征选择中」,相关性分析被广泛应用于评估特征与目标变量之间的相关性。通过计算相关系数或其他相关性度量,我们可以筛选出与目标变量相关性较高的特征。设定合适的阈值,我们可以选择保留相关性高于阈值的特征,从而减少特征空间的维度,提高模型的训练效率。 -
「在包裹式特征选择中」,相关性分析可以用于评估特征子集的性能。通过计算特征子集与目标变量之间的相关性,我们可以确定特征子集的预测能力。在搜索算法中,通过不断地选择和排除特征,我们可以寻找具有最大相关性和最优性能的特征子集。 -
「「在嵌入式特征选择中」」,相关性分析可以影响模型训练过程中的特征选择。通过引入惩罚项或评估特征的重要性,模型可以倾向于选择与目标变量高度相关的特征。相关性分析可以帮助我们选择具有较高相关性的特征,并在模型训练过程中进行特征选择和模型优化。
四、相关性与特征选择流程
-
数据准备与预处理 -
相关性分析的实施
-
收集数据:收集特征和目标变量的数据。 -
计算相关性:使用合适的相关性度量方法计算特征与目标变量之间的相关性。常见的方法包括皮尔逊相关系数、斯皮尔曼相关系数、互信息、卡方检验等。根据数据的类型和问题的需求选择合适的方法。 -
可视化分析:使用散点图、热力图、相关性矩阵等可视化工具将相关性结果进行可视化,以更直观地了解特征之间和特征与目标变量之间的相关性。
-
特征选择方法的选择与执行
根据问题的特点和数据集的规模,选择合适的特征选择方法进行特征选择。
-
过滤式特征选择:基于统计指标和阈值设定的方法,选择与目标变量相关性高于一定阈值的特征。 -
包裹式特征选择:基于评估指标和搜索算法,通过评估特征子集的性能来选择最佳特征子集。 -
嵌入式特征选择:将特征选择嵌入到模型训练过程中,通过惩罚项或模型训练中的特征评估来选择特征。
-
型性能评估与调整
在完成特征选择后,需要使用选定的特征训练模型并评估模型的性能。根据评估结果,可以调整特征选择的方法、参数或模型的超参数,以进一步提高模型的性能。
五、实例演示
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),以揭示变量之间的动态关系。 -
引入因果关系研究:除了相关性分析,更深入的研究可以包括因果关系的探索,通过实验设计或因果推理方法来确定变量之间的因果关系。 -
多源数据整合:随着大数据时代的到来,将多个数据源整合起来可以提供更全面和准确的相关性分析结果,例如结合社交媒体数据、经济指标和医疗数据等