基于Caret的递归特征消除(RFE):如何获取各变量的OA与Kappa值?
用Caret包的RFE生成变量对应OA和Kappa值表格的方法
嘿,我来帮你搞定这个问题!要生成像你展示的那种“变量数量-OA-Kappa”对应表格,用Caret的递归特征消除(RFE)方法其实很简单,我分步骤给你讲清楚:
1. 前期准备:加载包与设置参数
首先得加载必要的R包,然后定义RFE的控制参数,比如交叉验证方式、评估指标这些:
# 加载所需包 library(caret) library(knitr) # 用来生成美观的Markdown表格 # 设置随机种子,保证结果可重复 set.seed(123) # 定义RFE控制参数:这里用10折交叉验证,重复3次 rfe_ctrl <- rfeControl( functions = rfFuncs, # 基础模型选随机森林,可替换为lmFuncs/gbmFuncs等 method = "repeatedcv", repeats = 3, number = 10, verbose = FALSE # 关闭冗余输出 ) # 指定要评估的变量数量范围(比如从1到你数据集的特征总数) var_count_range <- 1:ncol(your_features_data) # 替换成你的特征列数
2. 运行RFE特征选择
用rfe()函数执行递归特征消除,传入你的特征数据、响应变量、控制参数和变量数量范围:
# 运行RFE rfe_output <- rfe( x = your_features_data, # 替换为你的特征矩阵 y = your_response_variable, # 替换为你的响应变量(分类任务) sizes = var_count_range, rfeControl = rfe_ctrl, metric = "Accuracy" # 以OA(总体准确率)作为优化指标 )
3. 提取OA与Kappa值并整理表格
RFE的结果里已经包含了不同变量数对应的性能指标,我们直接提取并整理成数据框:
# 从RFE结果中提取关键数据:变量数、OA、Kappa(可按需添加标准差) performance_table <- rfe_output$results[, c("Variables", "Accuracy", "Kappa")] # 重命名列名,和你展示的表格格式对齐 colnames(performance_table) <- c("Number of Variables", "OA", "Kappa") # 如果需要添加OA和Kappa的标准差,就用这行: # performance_table <- rfe_output$results[, c("Variables", "Accuracy", "AccuracySD", "Kappa", "KappaSD")] # colnames(performance_table) <- c("Number of Variables", "OA", "OA SD", "Kappa", "Kappa SD")
4. 生成美观的表格
用knitr::kable()生成Markdown格式的表格,直接就能输出成你想要的样式:
kable(performance_table, caption = "RFE Feature Selection Performance Metrics")
举个实际例子,用内置的iris数据集跑的话,生成的表格会是这样:
| Number of Variables | OA | Kappa |
|---|---|---|
| 1 | 0.660000 | 0.4900000 |
| 2 | 0.953333 | 0.9300000 |
| 3 | 0.960000 | 0.9400000 |
| 4 | 0.960000 | 0.9400000 |
小提示:如果你的任务是回归问题,记得把
metric参数改成"RMSE"之类的回归指标,同时调整functions为对应的回归模型函数哦!
内容的提问来源于stack exchange,提问作者MSilvy
相关产品推荐
相关产品推荐

