2016-05-05 7 views
1

Ich habe einen Datensatz mit 25000 Zeilen und 761 Spalten, die eine binäre Antwortspalte enthält. Meine binäre Antwort hatte Werte "-1" und "1". Ich habe versucht, darauf zu laufen xgboost und haben immer einen Fehler bekommen, dieFehlerbehebung XGBoost in R

xg_base<-xgboost(data = features,label = output,objective="binary:logistic",eta=1,nthreads=2,nrounds = 10 
      , verbose = T, print.every.n = 5) 


Error in xgb.iter.update(bst$handle, dtrain, i - 1, obj) : 
label must be in [0,1] for logistic regression 

sagt- änderte ich das Niveau meiner Antwort mit dem folgenden Kommando-

levels(output)[levels(output)=="-1"] <- "0" 

ich immer noch die gleichen Fehler und bin mir nicht sicher, was genau das Problem ist. Ein wichtiger Punkt ist, dass dies ein seltenes Ereigniserkennungsproblem ist, wobei der Anteil der positiven Fälle bei 1% der Gesamtbeobachtungen liegt. Könnte das der Grund sein, dass ich den Fehler bekomme?

+0

Ich denke, dass die Variable 'output' zwischen 0 und 1 sein muss, kein Faktor. Es ist möglich, dass Sie die Antwort rekodieren müssen, wenn Sie 'xgboost' verwenden. – steveb

Antwort

5

Nachdem Sie die -1 ist auf 0'en ändern, ändern output von Faktor numerischen:

output <- as.numeric(levels(output))[output] 

Ich glaube nicht, dass dies eine seltene auf den Fehler im Zusammenhang Ereigniserkennung Problem ist.

9

Nur so kann dies dazu beitragen, jemand eine Faktorvariable mit Ebenen 0 und 1 in Etikett für die Eingabe in XGBoost zu konvertieren versuchen, müssen Sie sich bewusst sein, dass Sie 1 nach der Konvertierung subtrahieren müssen integer (oder numerisch):

> f <- as.factor(c(0, 1, 1, 0)) 

# XGBoost will not accept this for label 
> as.integer(f) 
[1] 1 2 2 1 

# Correct label 
> as.integer(f) - 1 
[1] 0 1 1 0 
0

Bevor das Xgboost-Modell ausgeführt wird, müssen bestimmte Schritte berücksichtigt werden.

  1. Alle Variablen sollten
  2. für binäre Klassifizierung numerisch sein, sollte Ihre Ausgangsgröße reicht von 0 bis 1

Mit Ebenen (Ausgang) [Stufen (Ausgang) == "- 1" ] < - "0" ,, Ihre Ausgabevariable wird ein Zeichen sein. Ändern Sie es in numerisch, behalten Sie den Bereich zwischen 0 und 1 und Ihr Xgboost-Modell wird wahrscheinlich funktionieren.