【发布时间】:2017-05-28 09:16:30
【问题描述】:
TL/DR ANSWER:在newdata 参数中指定训练数据。
如何从使用caret 的predict 训练的模型中始终如一地提取类别概率?目前,当predict 的参数使用公式表示法进行训练并且使用-variable 指示变量被忽略时,我得到一个错误。
这可以通过以下方式复制:
fit.lda <- train(Species ~ . -Petal.Length,
data = iris,
preProcess = c("center", "scale"),
trControl = trainControl(method = "repeatedcv",
number = 10,
repeats = 3,
classProbs = TRUE,
savePredictions = "final",
selectionFunction = "best",
summaryFunction = multiClassSummary),
method = "lda",
metric = "Mean_F1")
然后下面一行将失败:
predict(fit.lda, type = "prob")
predict.lda(modelFit, newdata) 中的错误:变量数错误
如果在train 公式中省略了-Petal.Length,则不会出错。我对公式语句做错了吗?
我想我可以挖掘模型的 有没有办法获得 pred 插槽并获取与类类型相对应的列(请参阅 EDIT2),但这似乎是 hackish。predict按预期工作?
=====编辑=====
我使用 caretEnsemble 包中的 caretList 训练了许多不同的模型(使用公式表示法),但在尝试使用 predict 时出现各种错误:
-
knn
knn3Train(train = c(....) 中的错误:'test' 和 'train 的尺寸不同
-
svmRadial:
警告信息: 在方法$prob(modelFit = modelFit, newdata = newdata, submodels = param) 中: kernlab 类概率计算失败;返回 NAs
-
mlpML:
myFunc[[1]](x, ...) 中的错误: 输入数据列数 28 与输入神经元数 20 不匹配
没有错误的方法是nnet 和基于树的方法(rf、xgbTree)
=====EDIT2=====
以下不考虑重复重采样。选择的答案要简单得多。
这是从训练后的模型中提取概率的自制解决方案,但为了标准化,我更希望predict 能够正常运行。
grabProbs <- function(model) model$pred[, colnames(model$pred) %in% model$levels]
grabProbs(fit.lda)
【问题讨论】:
-
你现在有什么问题?
-
@sandipan 我只是想使用
predict有一种标准化的方法来从经过训练的模型中提取类概率(并在以后预测新数据)......正是predict的意思成为。编辑问题以澄清。
标签: r machine-learning r-caret