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

如何对分类模型执行forward regression(前向回归)分析

多分类场景下前向特征选择的实现方案

你当前用的glm()默认拟合高斯线性模型,本身不支持多分类任务,多分类场景的前向选择可以通过「自定义选择逻辑+任意分类模型」的方式实现,核心思路是遵循前向选择的规则,每次引入一个能让模型验证集评价指标最优的特征,直到没有特征能提升指标或者达到预设的特征数量上限,非线性分类模型也可以适配这套逻辑。

具体实现步骤

  • 第一步:调整多分类模型选型,多分类任务可以用nnet包的multinom()函数(多项逻辑回归)、randomForest包的随机森林等,你自己需要用到的非线性分类模型都可以适配
  • 第二步:自定义前向选择的循环逻辑,核心流程是:
    1. 初始化已选特征集合为空
    2. 每次遍历所有未选特征,分别加入已选集合后拟合多分类模型,计算测试集/验证集的分类准确率(也可替换为你需要的F1、AUC等指标)
    3. 选出能让指标提升最多的特征加入已选集合
    4. 重复步骤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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:39:03