如何在caret中使用logLoss

5

我尝试通过caret(而不是准确度或Kappa的默认选项)将logLoss作为调整randomForest(其他分类器)时使用的性能度量进行整合。

第一个R脚本使用默认值执行而没有错误。但是,当使用第二个脚本时,会出现:

错误在{:任务1失败-“未使用参数(model = method)”

函数logLoss(predict(rfModel,test[,-c(1,95)],type="prob"),test[,95])通过利用单独训练的randomForest模型来工作。

数据框架有100多列和10,000多行。除了col=95中的9级类别“target”外,所有元素都是数字。行id位于col=1中。

不幸的是,我不能正确掌握 http://topepo.github.io/caret/training.html 提供的指导,也没有通过谷歌搜索获得太多帮助。

非常感谢您的帮助。

R脚本如下:

fitControl = trainControl(method = "repeatedcv",number = 10,repeats = 10)
rfGrid = expand.grid(mtry=c(1,9))
rfFit = train(target ~ ., data = train[,-1],method = "rf",trControl = fitControl,verbose = FALSE,tuneGrid = rfGrid)

无法运行的R脚本:

logLoss = function(data,lev=NULL,method=NULL) { 
lLoss = 0
epp = 10^-15
for (i in 1:nrow(data)) {
    index = as.numeric(lev[i])
    p = max(min(data[i,index],1-epp),epp)
    lLoss = lLoss - log(p)
 }
 lLoss = lLoss/nrow(data)
 names(lLoss) = c("logLoss")
 lLoss

}

fitControl = trainControl(method = "repeatedcv",number = 10,repeats = 10,summaryFunction = logLoss) 
rfGrid = expand.grid(mtry=c(1,9))
rfFit = train(target ~ ., data = trainBal[,-1],method = "rf",trControl = fitControl,verbose = FALSE,tuneGrid = rfGrid)
2个回答

4

我认为你应该在trainControl中设置summaryFunction=mnLogLoss,并在train中设置metric="logLoss"(我在这里找到了链接)。像这样:

# load libraries
library(caret)
# load the dataset
data(iris)
# prepare resampling method
control <- trainControl(method="cv", number=5, classProbs=TRUE, summaryFunction=mnLogLoss)
set.seed(7)
fit <- train(Species~., data=iris, method="rf", metric="logLoss", trControl=control)
# display results
print(fit)

2

您的参数名称不正确(即"unused argument (model = method)")。 网页上说最后一个函数参数应该叫做model而不是method


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接