2016-04-16 29 views
7

Sto cercando di analizzare il mio modello con R con xgboost. Il modello di allenamento in generale funziona bene, ma con il caret è un problema con la metrica.R Metric RMSE non applicabile per i modelli di classificazione

Ho provato a impostare un fattore per una colonna di classe, bit non c'è ancora alcun risultato.

I miei dati

ID var1var2TARGET 
1 5 0 1 
2 4 3 1 
3 4 2 0 
4 3 1 0 
5 2 4 1 
6 1 2 1 
7 5 3 1 
8 4 1 0 
9 4 1 0 
10 2 4 1 
11 5 5 1 

Per questo lo faccio

train <- read.csv() 
train.y <- train$TARGET 
train$TARGET <- NULL 
train$ID <- NULL 
train.y <- lapply(train.y, factor) 

Poi mi preparano i parametri del modello

xgb_grid_1 = expand.grid(
    nrounds = 1000, 
    eta = c(0.01, 0.001, 0.0001), 
    max_depth = c(2, 4, 6, 8, 10), 
    gamma = 1 
) 

# pack the training control parameters 
xgb_trcontrol_1 = trainControl(
    method = "cv", 
    number = 5, 
    verboseIter = TRUE, 
    returnData = FALSE, 
    returnResamp = "all",              # save losses across all models 
    classProbs = TRUE,               # set to TRUE for AUC to be computed 
    summaryFunction = twoClassSummary, 
    allowParallel = TRUE 
) 

E dopo tutto questo, io chiamo la funzione treno

xgb_train_1 = train(
    x = train, 
    y = train.y, 
    trControl = xgb_trcontrol_1, 
    tuneGrid = xgb_grid_1, 
    method = "xgbTree" 
) 

mi dà

Error in train.default(x = train, y = train.y, trControl = xgb_trcontrol_1, : 
    Metric RMSE not applicable for classification models 

Perché potrebbe essere?

+0

rmse viene utilizzato per variabili dipendenti continue – user20650

+0

@ user20650 Puoi suggerire cosa dovrei cambiare? Ho preso questo esempio da un sito con lo stesso problema di classificazione. Sembra che mi sia sfuggito qualche punto – paveltr

+0

Non ho familiarità con il caret, ma guardando '? Train' sembra che l'argomento' metric' sia impostato su 'rmse' (*' metric = ifelse (is.factor (y), " Precisione "," RMSE "' *),. Quindi proverei a impostare il mio risultato su un fattore di 'treno.y <- fattore (treno $ TARGET)' oppure impostare esplicitamente 'metric =" Precisione "' – user20650

risposta

11

Si dovrebbe provare a cambiare train.y <- lapply(train.y, factor) a train.y <- factor(train.y, labels = c("yes", "no")).

caret di solito si lamenta se le etichette sono 0 o 1, quindi provare a cambiarlo.

+1

Grazie, finalmente ho capito – paveltr

Problemi correlati