You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于ranger包实现随机森林回归的Drop-column特征重要性方法

使用ranger包实现Drop-column特征重要性并构建最终模型

一、核心逻辑回顾

Drop-column重要性的核心思路:先训练基线模型并获取基线性能分数,随后依次删除单个特征、重新训练模型并计算对应性能,某特征的重要性为基线分数与删除该特征后模型分数的差值(差值越大,说明该特征对模型性能的贡献越强)。

二、具体实现步骤

1. 训练基线模型并计算基线性能

先基于完整特征训练基线模型,再计算其在测试集上的性能(以下示例以分类任务的准确率为例,回归任务可替换为RMSE、R²等指标):

library(ranger)
library(Metrics)

# 设置随机种子保证结果可复现
set.seed(123)
# 数据拆分(沿用你的示例)
train.idx <- sample(nrow(iris), 2/3 * nrow(iris))
iris.train <- iris[train.idx, ]
iris.test <- iris[-train.idx, ]

# 训练基线随机森林模型
baseline_model <- ranger(Species ~ ., 
                        data = iris.train, 
                        num.trees = 101,
                        seed = 123)

# 计算基线测试集准确率
baseline_pred <- predict(baseline_model, data = iris.test)$predictions
baseline_acc <- accuracy(iris.test$Species, baseline_pred)
cat("基线模型测试集准确率:", baseline_acc, "\n")

2. 计算Drop-column特征重要性

遍历每个特征,删除后重新训练模型并计算性能,最终得到各特征的重要性值:

# 获取所有特征名(排除目标变量)
feature_names <- setdiff(colnames(iris.train), "Species")
drop_col_importance <- numeric(length(feature_names))
names(drop_col_importance) <- feature_names

# 逐个删除特征计算重要性
for (feat in feature_names) {
  # 生成删除当前特征后的训练数据
  train_data_drop <- iris.train[, !colnames(iris.train) %in% feat]
  # 训练模型
  model_drop <- ranger(Species ~ ., 
                      data = train_data_drop, 
                      num.trees = 101,
                      seed = 123)
  # 计算测试集性能(注意同步删除测试集对应特征)
  test_data_drop <- iris.test[, !colnames(iris.test) %in% feat]
  pred_drop <- predict(model_drop, data = test_data_drop)$predictions
  acc_drop <- accuracy(iris.test$Species, pred_drop)
  # 计算重要性:基线性能与删除特征后性能的差值
  drop_col_importance[feat] <- baseline_acc - acc_drop
}

# 按重要性降序排序
drop_col_importance_sorted <- sort(drop_col_importance, decreasing = TRUE)
print("Drop-column特征重要性(降序排列):")
print(drop_col_importance_sorted)

3. 筛选重要变量并训练最终模型

根据重要性筛选目标特征(示例选择重要性大于0的特征,也可指定Top N数量),再用筛选后的特征训练最终模型:

# 筛选重要变量(示例规则:保留重要性大于0的特征)
selected_features <- names(drop_col_importance_sorted[drop_col_importance_sorted > 0])

# 构建最终模型的公式
final_formula <- as.formula(paste("Species ~", paste(selected_features, collapse = " + ")))

# 训练最终模型
final_model <- ranger(final_formula, 
                     data = iris.train[, c(selected_features, "Species")], 
                     num.trees = 101,
                     seed = 123)

# 输出筛选出的重要预测变量
cat("筛选出的重要预测变量:", paste(selected_features, collapse = ", "), "\n")

# 可选:评估最终模型性能
final_pred <- predict(final_model, data = iris.test[, c(selected_features, "Species")])$predictions
final_acc <- accuracy(iris.test$Species, final_pred)
cat("最终模型测试集准确率:", final_acc, "\n")

三、回归任务适配说明

如果是回归任务(例如预测连续型变量Sepal.Length),只需调整3个关键点:

  • 目标变量替换为连续型,公式改为Sepal.Length ~ .
  • 性能指标替换为回归类指标,比如rmse()或r2_score()(来自Metrics包)
  • 重要性计算逻辑调整为:删除特征后的RMSE - 基线RMSE(差值越大,说明该特征对降低预测误差的作用越强)

内容的提问来源于stack exchange,提问作者Nikos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:55:07