我尝试使用MAPE作为评估模型性能的指标。
在LOOCV和并行执行的情况下,一切正常但如果我使用另一种重采样方法,我会收到此错误:
{:任务1失败 - “无法找到功能”mape“”
出错
而不是在串行执行中,这个问题就消失了。
下面的代码提供了一个示例。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>
我的操作系统是El Capitan 10.11.4,插入符号的版本是6.0.62。
答案 0 :(得分:2)
如消息所示,您的并行处理无法找到mape功能。
最简单的解决方案是将mape函数放在mapeSummary函数中,如下所示。然后您的并行进程将正常工作。
mapeSummary <- function (data, lev = NULL, model = NULL) {
mape <- function(y, yhat) mean(abs((y - yhat)/y))
out <- mape(data$obs, data$pred)
names(out) <- "MAPE"
out
}
<强>奖金:强>
您还可以使用clusterEvalQ
函数,clusterApply函数之一。这个工作如下,但不是最优雅的解决方案,需要更多的输入:
cl <- makePSOCKcluster(detectCores()-1)
clusterEvalQ(cl, mape <- function(y, yhat) mean(abs((y - yhat)/y)))
registerDoParallel(cl)
mapeSummary <- function (data, lev = NULL, model = NULL) {
out <- mape(data$obs, data$pred)
names(out) <- "MAPE"
out
}
#Bootstrapping - parallel
trControlBootPar <- trainControl(allowParallel = T,
verboseIter = T,
method = "boot",
summaryFunction = mapeSummary)
train(y = environmental$ozone,
x = environmental[, -1],
method = "glmnet",
trControl = trControlBootPar,
metric = "MAPE",
maximize = FALSE)
stopCluster(cl)
registerDoSEQ()