Создать метрику RMSLE в курсоре в r

Может ли кто-нибудь помочь мне со следующим: мне нужно изменить мою модель обучения xgboost с пакетом вставки на метрику RMSLE по умолчанию. По умолчанию Caret и xgboost обучают и измеряют в RMSE.

Вот строки кода:

создать пользовательскую сводную функцию в формате каретки

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""


person Danil    schedule 19.10.2017    source источник


Ответы (1)


Я также столкнулся с той же проблемой в моем проекте. Это происходит даже после загрузки пакета метрик в память с помощью приведенной ниже команды.
library(Metrics)

Если вы видите, функция rmsle вызывается из другой функции с именем custom_summary. Он не вызывается напрямую. Поэтому я загрузил пакет Metrics из функции custom_summary, и это решило проблему для меня.

поэтому здесь функция custom_summary должна выглядеть так:

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

person Saptha    schedule 03.01.2018
comment
вместо library(Metrics) следует использовать Metrics::rmsle(data[, "obs"], data[, "pred"]) - person Jonathan Hill; 17.10.2018