2017-10-19 128 views
0

有人可以帮我解决以下问题:我需要将我的xgboost训练模型与插入符号包一起更改为未知错误度量RMSLE。默认情况下,caret和xgboost训练和测量RMSE。在插入符号中创建RMSLE度量标准

这里是行代码:

在插入符格式

custom_summary = function(data, lev = NULL, model = NULL){ 
out = rmsle(data[, "obs"], data[, "pred"]) 
names(out) = c("rmsle") 
out 
} 

创建控制对象

control = trainControl(method = "cv", 
        number = 2,  
        summaryFunction = custom_summary) 

创建的调谐参数网格中创建自定义摘要函数

grid = expand.grid(nrounds = 100, 
       max_depth = 6,   
       eta = 0.075,  
       gamma = 0, 
       colsample_bytree = 0.4, 
       min_child_weight = 2.25, 
       subsample = 1) 

cl = makeCluster(3, type="SOCK") #make clusters 

registerDoSNOW(cl) #register clusters 

set.seed(1) 

训练我的模型

caret4 = train(price_doc~. - sub_area - id, 
        data=train.train, 
        method="xgbTree", 
        trControl=control, 
        tuneGrid=grid, 
        metric="rmsle", 
        maximize = FALSE) 

和我不断收到一个错误:{:任务1失败 - “无法找到函数‘rmsle’”

回答

0

我也遇到同样的问题,在我的项目。 这甚至在使用以下命令将度量包加载到内存中之后。
库(度量)

如果你看到,rmsle功能正在从所谓custom_summary另一个函数调用。它不直接调用。 所以我从函数custom_summary中加载了Metrics包,它解决了我的问题。

所以在这里,在custom_summary函数应该是这样的:

custom_summary = function(data, lev = NULL, model = NULL) {
library(Metrics)
out = rmsle(data[, "obs"], data[, "pred"])
names(out) = c("rmsle")
out
}