插入符号:`predict`在`train`公式删除变量

时间:2017-01-13 03:58:29

标签: r machine-learning r-caret

TL / DR ANSWER:在newdata参数中指定训练数据。

如何使用caret的{​​{1}}从训练有素的模型中持续提取类概率?目前,当使用公式表示法训练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.lda(modelFit,newdata)出错:变量数量错误

如果predict(fit.lda, type = "prob") 公式中省略了-Petal.Length,则没有错误。我在公式声明中做错了吗?

我想我可以深入了解模型的train槽并获取与类类型相对应的列(参见EDIT2),但这似乎是hackish。有没有办法获得{ {1}}按预期工作?

=====的修改 =====

我使用pred包中的predict训练了许多不同的模型(使用公式表示法),在尝试使用caretList时出现了各种错误:

  • caretEnsemble
  

knn3Train出错(train = c(....):'test'和'train'的差异

  • predict
  

警告讯息:   方法$ prob(modelFit = modelFit,newdata = newdata,submodels = param):     kernlab类概率计算失败;返回NAs

  • knn
  

myFunc [[1]](x,...)中的错误:     输入数据列28的数量与输入神经元的数量20不匹配

无误的方法是svmRadial和基于树的方法(mlpMLnnet

=====的 EDIT2 =====

以下内容不会重复进行重新采样。选择的答案要简单得多。

这是一个从训练模型中提取概率的自行解决方案,但是对于标准化,我更喜欢是否可以让rf表现出来。

< S>
xgbTree

1 个答案:

答案 0 :(得分:0)

只需使用newdata参数即可使用

predict(fit.lda, newdata = iris, type = "prob")

<强> [EDITED]

正如我们所看到的,对于lda,预测结果是相同的:

library(MASS)
fit.lda <- lda(Species ~ . -Petal.Length, data = iris)
identical(predict(fit.lda), predict(fit.lda, newdata=iris))
# [1] TRUE

library(randomForest)
fit.rf <- randomForest(Species ~ . -Petal.Length, data = iris)
identical(predict(fit.rf), predict(fit.rf, newdata=iris))
# [1] FALSE