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

如何在R的tidymodels或caret中实现有序回归/分类?

R语言中tidymodels、caret及其他框架对有序回归/分类的支持情况

一、Caret包的支持

Caret本身没有内置专门的有序回归/分类模型接口,但可以通过自定义适配的方式使用有序回归方法:

  • 先将目标变量转换为R中的有序因子(用ordered()函数指定类别顺序);
  • 直接调用MASS::polr、rms::orm这类统计包中的有序回归函数,通过caret的train()函数完成模型训练与交叉验证。

示例代码:

# 转换目标变量为有序因子
data$target <- ordered(data$target, levels = c("极低", "低", "中", "高", "极高"))

# 用caret训练polr有序回归模型
polr_caret <- train(
  target ~ .,
  data = data,
  method = "polr",
  trControl = trainControl(method = "cv"),
  tuneGrid = data.frame(method = "logistic"),
  metric = "Accuracy" # 也可选用更贴合有序分类的指标如MAE
)

二、Tidymodels生态的支持

Tidymodels通过其组件原生支持有序回归/分类任务:

  • 模型定义(parsnip):提供ordinal_reg()专用接口,可对接polr、orm等引擎,直接针对有序因子目标建模;
  • 评估(yardstick):内置ordered_accuracy()等专门适配有序分类的评估指标,避免普通多分类指标丢失顺序信息。

示例代码:

library(tidymodels)

# 数据预处理与拆分
data$target <- ordered(data$target, levels = c("极低", "低", "中", "高", "极高"))
set.seed(123)
data_split <- initial_split(data, prop = 0.8)
train_data <- training(data_split)
test_data <- testing(data_split)

# 定义有序回归模型
polr_spec <- ordinal_reg() %>%
  set_engine("polr") %>%
  set_mode("classification")

# 构建工作流并训练
polr_wf <- workflow() %>%
  add_formula(target ~ .) %>%
  add_model(polr_spec)

polr_fit <- fit(polr_wf, data = train_data)

# 评估模型性能
predict(polr_fit, test_data) %>%
  bind_cols(test_data) %>%
  metrics(truth = target, estimate = .pred_class) %>%
  filter(.metric == "ordered_accuracy")

三、其他R机器学习框架的支持

  • mlr3:内置TaskOrdinal专门任务类型,支持多种有序回归模型(如polr、orm),并配套有序分类专属评估指标;
  • randomForestSRC:提供针对有序分类优化的随机森林实现,建模时保留类别顺序信息;
  • xgboost:可通过将有序分类转换为排序任务(设置objective = "rank:pairwise")间接处理,适合树型集成模型场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:31:13