2016-06-03 16 views
3

In Abschnitt 3.4 von their article erklären die Autoren, wie sie mit fehlenden Werten umgehen, wenn sie nach dem besten Kandidaten für Baumwachstum suchen. Insbesondere erstellen sie eine Standardrichtung für diese Knoten, wobei als Teilungsfunktion eine mit fehlenden Werten in der aktuellen Instanzgruppe verwendet wird. Zur Vorhersagezeit wird, wenn der Vorhersagepfad diesen Knoten durchläuft und der Feature-Wert fehlt, die Standardrichtung eingehalten.xgboost: Behandlung von fehlenden Werten für die Suche nach Splitkandidaten

Die Vorhersagephase würde jedoch zusammenbrechen, wenn die Feature-Werte fehlen und der Knoten keine Standardrichtung hat (und dies kann in vielen Szenarien vorkommen). Mit anderen Worten, wie ordnen sie allen Knoten eine Standardrichtung zu, selbst solchen mit einer Funktion zum Fehlen von Teilen in der aktiven Instanz, die zur Trainingszeit eingestellt wurde?

Antwort

1

Mein Verständnis des Algorithmus ist, dass eine Standardrichtung Probabilistically basierend auf der Verteilung der Trainingsdaten zugewiesen wird, wenn keine fehlenden Daten zur Trainingszeit verfügbar sind. IE. Gehen Sie einfach in die Richtung mit den meisten Proben im Trainingssatz. In der Praxis würde ich sagen, dass es eine schlechte Idee ist, fehlende Daten in Ihrem Datensatz zu haben. Im Allgemeinen wird das Modell besser funktionieren, wenn der Datenwissenschaftler die Daten auf intelligente Weise bereinigt, bevor der GBM-Algorithmus trainiert wird. Zum Beispiel, ersetzen Sie alle NA durch den Mittelwert/Medianwert oder berechnen Sie den Wert, indem Sie die K nächsten Nachbarn finden und ihre Werte für dieses Merkmal mitteln, um den Trainingspunkt zu berechnen.

Ich frage mich auch, warum Daten zur Testzeit und nicht am Zug fehlen. Das scheint zu bedeuten, dass sich die Verteilung Ihrer Daten im Laufe der Zeit verändert. Ein Algorithmus, der trainiert werden kann, wie neue Daten verfügbar sind, wie ein neuronales Netz, kann in Ihrem Anwendungsfall besser sein. Oder Sie könnten immer ein Spezialistenmodell machen. Nehmen wir zum Beispiel an, dass das fehlende Feature die Kreditbewertung in Ihrem Modell ist. Weil einige Leute Sie möglicherweise nicht genehmigen, um auf ihre Kredite zuzugreifen. Warum trainieren Sie nicht ein Modell mit Kredit und eines ohne Kredit? Das Modell, das ausschließlich Kredite ausbildet, kann unter Verwendung anderer korrelierter Merkmale viel von dem Auftriebskredit erhalten.

0

Vielen Dank für Ihre Meinung @Josiah. Ja, ich stimme Ihnen vollkommen zu, wenn Sie sagen, dass es besser ist, die fehlenden Daten im Datensatz zu vermeiden, aber manchmal ist es nicht die optimale Lösung, sie zu ersetzen. Wenn wir einen Lernalgorithmus wie GBM haben, der mit ihnen umgehen kann, sollten Sie sie ausprobieren. Das Szenario, über das ich nachdenke, ist, wenn Sie einige Funktionen mit wenigen Fehlschreibungen haben (< 10%) oder sogar weniger. Im Hinblick auf den zweiten Punkt habe ich folgendes Szenario im Auge: Der Baum ist bereits zu einer gewissen Tiefe gewachsen, so dass der Instanzensatz nicht mehr der vollständige ist. Für einen neuen Knoten wird der beste Kandidat als Wert für ein Feature f gefunden, das ursprünglich einige Missings enthält, jedoch nicht in der aktuellen Instanzgruppe, sodass keine Standardverzweigung definiert ist. Auch wenn f einige fehlende Daten im Trainingsdatensatz enthält, hat dieser Knoten keine Standardverzweigung. Eine Testinstanz, die hier fällt, würde stecken bleiben.

Vielleicht haben Sie Recht und der Standardzweig wird derjenige mit mehr Beispielen sein, wenn keine Missings vorhanden sind. Ich werde versuchen, die Autoren zu erreichen und hier die Antwort, falls vorhanden, zu veröffentlichen.

+0

Ich weiß, dass es eine Weile her ist, seit du diese Antwort geschrieben hast, aber ich habe mich gefragt, ob du etwas Glück dabei hast, herauszufinden, was xgboost während der Vorhersage macht, wenn im Trainingsdatensatz keine Werte fehlen. – ponadto

+0

Hallo, bitte schauen Sie sich die Antwort unten von T. Scharf an – pmarini

6

xgboost berücksichtigt immer eine fehlende Wertteilungsrichtung, auch wenn keine vorhanden sind. Der Standardwert ist yes Richtung im Split-Kriterium.Dann ist es gelernt, wenn es jeden in Ausbildung ist

Vom Autorlink

enter image description here

Dies kann

durch den folgenden Code zu beachten
require(xgboost) 

    data(agaricus.train, package='xgboost') 

    sum(is.na(agaricus.train$data)) 
    ##[1] 0 

    bst <- xgboost(data = agaricus.train$data, 
         label = agaricus.train$label, 
         max.depth = 4, 
         eta = .01, 
         nround = 100, 
         nthread = 2, 
         objective = "binary:logistic") 

dt <- xgb.model.dt.tree(model = bst) ## records all the splits 

> head(dt) 
    ID Feature  Split Yes No Missing  Quality Cover Tree Yes.Feature Yes.Cover Yes.Quality 
1: 0-0  28 -1.00136e-05 0-1 0-2  0-1 4000.5300000 1628.25 0   55 924.50 1158.2100000 
2: 0-1  55 -1.00136e-05 0-3 0-4  0-3 1158.2100000 924.50 0   7 679.75 13.9060000 
3: 0-10 Leaf   NA NA NA  NA -0.0198104 104.50 0   NA  NA   NA 
4: 0-11  7 -1.00136e-05 0-15 0-16 0-15 13.9060000 679.75 0  Leaf 763.00 0.0195026 
5: 0-12  38 -1.00136e-05 0-17 0-18 0-17 28.7763000 10.75 0  Leaf 678.75 -0.0199117 
6: 0-13 Leaf   NA NA NA  NA 0.0195026 763.00 0   NA  NA   NA 
    No.Feature No.Cover No.Quality 
1:  Leaf 104.50 -0.0198104 
2:   38 10.75 28.7763000 
3:   NA  NA   NA 
4:  Leaf  9.50 -0.0180952 
5:  Leaf  1.00 0.0100000 
6:   NA  NA   NA 

> all(dt$Missing == dt$Yes,na.rm = T) 
[1] TRUE 

Quellcode https://github.com/tqchen/xgboost/blob/8130778742cbdfa406b62de85b0c4e80b9788821/src/tree/model.h#L542

+0

danke für Ihre Antwort, @TScharf – pmarini

+0

Bitte beachten Sie, dass der gleiche Autor hat auch widersprüchlichen Kommentar hier https://github.com/dmlc/xgboost/issues/21 gemacht # issuecomment-51982962. Wählen Sie also im Wesentlichen die Richtung aus, in der die Verstärkung maximal ist. Seltsamerweise beide Kommentare um dieselbe Zeit gemacht. – abhiieor

Verwandte Themen