2017-10-19 15 views
0

Quelqu'un pourrait m'aider s'il vous plaît avec ce qui suit: Je dois changer mon modèle d'entraînement xgboost avec caret package à un RMSLE métrique undefault. Par défaut, caret et xgboost s'entrainent et mesurent en RMSE.Créer une métrique RMSLE dans caret dans r

Voici les lignes de code:

fonction de création de résumé personnalisé en format caret

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

créer l'objet de contrôle

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

créer la grille des paramètres de réglage

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) 

former mon modèle

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

et je continue à obtenir une erreur: {: tâche 1 a échoué - « ne peut pas trouver la fonction « rmsle » »

Répondre

0

J'ai aussi rencontré le même problème dans mon projet. Cela se produit même après le chargement du package Metrics en mémoire à l'aide de la commande ci-dessous.
bibliothèque (métrique)

Si vous voyez, la fonction rmsle est appelée d'une autre fonction appelée custom_summary. Ce n'est pas appelé directement. J'ai donc chargé le paquet Métriques depuis la fonction custom_summary et cela m'a permis de résoudre le problème.

alors voici, la fonction custom_summary devrait ressembler à:

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