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

使用Caret同时调用多模型报错:模型不在内置库

问题

在经典Iris数据集上以Sepal.Length为目标变量,使用caret包同时训练多个模型时,出现以下错误及警告:

Error: Model gbm is not in caret's built-in libraryModel knn is not in caret's built-in libraryModel lm is not in caret's built-in libraryModel bstSm is not in caret's built-in libraryModel rf is not in caret's built-in library
警告信息:In model == names(models): longer object length is not a multiple of shorter object length

使用的代码如下:

mix_dataset_tra <-iris  
TrainIndex <- createDataPartition(mix_dataset_tra$Sepal.Length, p=0.75, list= FALSE) 
train <- mix_dataset_tra[TrainIndex,]  
test <-mix_dataset_tra[-TrainIndex,]  
trc <- trainControl(method = "repeatedcv", number=10,repeats=3) 
AlgoritmListReg <- c("gbm","knn","lm","bstSm","rf")  
mixedModel<- caret::train(Sepal.Length~., data=train, method=AlgoritmListReg, trControl=trc)
解决方法

核心问题

caret原生的train()函数不支持直接传入模型列表实现批量训练,必须借助caretEnsemble包中的caretList()函数完成。此外,模型列表中的bstSm为拼写错误,需修正为正确的模型名称。

具体修正步骤

  1. 安装并加载依赖包
    部分模型需要额外的依赖库支持,先完成安装和加载:
install.packages(c("caret", "caretEnsemble", "gbm", "randomForest", "kknn", "smotefamily"))
library(caret)
library(caretEnsemble)

注:gbm对应梯度提升树包,randomForest对应随机森林包,kknn对应K近邻包,smotefamily是bstSmote的依赖。

  1. 修正模型列表
    将错误的bstSm改为正确的模型名,这里以bstSmote为例(若实际需求为其他模型,需对应调整名称):
AlgoritmListReg <- c("gbm","knn","lm","bstSmote","rf")
  1. 使用caretList()训练多模型
    替换原代码中的train()函数,改用caretList()实现批量训练:
mixedModel <- caretList(Sepal.Length~., data=train, trControl=trc, methodList=AlgoritmListReg)
  1. (可选)模型集成
    如果需要对训练好的多个模型进行集成,可使用caretEnsemble():
ensemble_model <- caretEnsemble(mixedModel)
summary(ensemble_model)

内容的提问来源于stack exchange,提问作者Gaetano C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:19:01