赞
踩
在实际应用中,特征选择作为机器学习和数据挖掘领域的重要环节,对于提高模型性能和减少计算开销具有关键影响。特征选择是从原始特征集中选择最相关和最具区分力的特征子集,以提高模型的泛化能力和可解释性。
特征选择在实践中具有以下重要性:
特征选择方法可以分为三大类:过滤式方法、包裹式方法和嵌入式方法。过滤式方法独立于任何具体的学习算法,通过对特征进行评估和排序来选择特征子集。包裹式方法直接使用学习算法来评估特征子集的性能。嵌入式方法将特征选择融入到学习算法中,通过优化算法的目标函数来同时选择特征和训练模型。
总之,特征选择在机器学习和数据挖掘任务中扮演着重要的角色,能够提高模型性能、减少计算开销,并增强模型的可解释性。通过合理选择合适的特征选择方法,可以进一步优化实际应用中的模型训练和预测效果。
递归特征消除算法(Recursive Feature Elimination, RFE)是一种基于模型的特征选择方法,通过反复训练模型和剔除最不重要特征的方式来选择最优的特征子集。
具体步骤如下:
递归特征消除算法通过反复迭代剔除最不重要的特征,逐步降低特征子集的维度,直到达到预定的目标特征数量。这样做的好处是可以保留对目标变量预测具有重要贡献的特征,同时减少冗余和噪声特征的干扰。
递归特征消除算法的工作流程如下:
递归特征消除算法通过不断剔除特征,直至达到预设目标,从而选择出最佳的特征子集。这个过程是基于模型的特征选择方法中的一种重要实现方式,能够有效地提高模型性能和减少特征维度的影响。
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]
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都是适用于结果变量是连续变量的评估指标。当结果变量是分类变量时,在临床医学中应该使用适合的评估指标,如分类准确率、灵敏度、特异度等。
「递归特征消除算法具有以下优势」:
「递归特征消除算法适用于以下场景」:
「对未来研究的展望」:
*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。