如何对分类模型执行forward regression(前向回归)分析
多分类场景下前向特征选择的实现方案
你当前用的glm()默认拟合高斯线性模型,本身不支持多分类任务,多分类场景的前向选择可以通过「自定义选择逻辑+任意分类模型」的方式实现,核心思路是遵循前向选择的规则,每次引入一个能让模型验证集评价指标最优的特征,直到没有特征能提升指标或者达到预设的特征数量上限,非线性分类模型也可以适配这套逻辑。
具体实现步骤
- 第一步:调整多分类模型选型,多分类任务可以用
nnet包的multinom()函数(多项逻辑回归)、randomForest包的随机森林等,你自己需要用到的非线性分类模型都可以适配 - 第二步:自定义前向选择的循环逻辑,核心流程是:
- 初始化已选特征集合为空
- 每次遍历所有未选特征,分别加入已选集合后拟合多分类模型,计算测试集/验证集的分类准确率(也可替换为你需要的F1、AUC等指标)
- 选出能让指标提升最多的特征加入已选集合
- 重复步骤2-3,直到新增特征无法让指标提升,或达到你预设的最大特征数
适配你当前场景的可运行代码
# 加载依赖包 library(caTools) library(nnet) # 用于多项逻辑回归多分类,可替换为你需要的非线性分类模型对应的包 library(dplyr) # 原有数据读取和预处理逻辑 XBC <- read.csv("C:/Users/SFASi/Desktop/Fusarium Project September/XBC2/XBC(Raw) - Copy.csv") XBC <- XBC[ -c(1:3) ] cat_cols <- c(1,2,5,6,8,10) XBC[,cat_cols] <- lapply(XBC[,cat_cols],factor) # 确保因变量Treatment为因子类型 XBC$Treatment <- as.factor(XBC$Treatment) # 数据集划分 set.seed(100) spl = sample.split(XBC$Treatment, SplitRatio = 0.7) train = subset(XBC, spl == TRUE) test = subset(XBC, spl == FALSE) # 前向选择初始化 all_features <- setdiff(colnames(XBC), "Treatment") # 所有候选特征 selected_features <- c() # 已选特征集合 best_accuracy <- 0 # 初始最优准确率 max_features <- length(all_features) # 可自行调整最大选择特征数 # 前向选择循环 for (i in 1:max_features) { candidate_accuracy <- c() # 遍历所有未选特征 for (f in setdiff(all_features, selected_features)) { current_features <- c(selected_features, f) # 构造模型公式 formula <- as.formula(paste("Treatment ~", paste(current_features, collapse = "+"))) # 拟合多分类模型,此处可替换为你需要的非线性分类模型拟合代码 model <- multinom(formula, data = train, trace = FALSE) # 测试集预测 pred <- predict(model, newdata = test) # 计算评价指标,此处为准确率,可替换为你需要的指标 acc <- mean(pred == test$Treatment) candidate_accuracy[f] <- acc } # 筛选当前轮次最优特征 current_best_f <- names(which.max(candidate_accuracy)) current_best_acc <- max(candidate_accuracy) # 无指标提升则停止循环 if (current_best_acc <= best_accuracy) { break } # 保存最优特征和对应准确率 selected_features <- c(selected_features, current_best_f) best_accuracy <- current_best_acc # 打印每轮选择结果 cat("第", i, "轮选择特征:", current_best_f, ",当前最优准确率:", round(best_accuracy,4), "\n") } # 输出最终最优模型 final_formula <- as.formula(paste("Treatment ~", paste(selected_features, collapse = "+"))) final_model <- multinom(final_formula, data = train, trace = FALSE) summary(final_model)
非线形模型适配方法
如果你的分类模型不是多项逻辑回归,仅需要修改代码中模型拟合、预测、指标计算的对应部分即可,前向选择的循环框架不需要改动。
内容的提问来源于stack exchange,提问作者Calvin Chow
相关产品推荐
相关产品推荐

