2016-06-11 8 views
0

Ich habe kategorische Daten und eine Zielfunktion, die ich zu optimieren versuche. In xgboost docs wird erwähnt, dass Sie Ihre eigene Zielfunktion angeben können, aber den Verlauf und den Hessian-Wert zurückgeben müssen. Ich bin nicht sicher, was der Hessian oder Gradient bedeutet, wenn ich kategorische Daten habe. Die Zielfunktion sieht ungefähr so ​​ausIst es möglich, eine benutzerdefinierte Zielfunktion von kategorischen Daten an xgboost in Python zu liefern?

sum_{all classes i} ((number of correct predictions in class_i)/(number in class i)) 

Ist es möglich, in diesem Fall eine benutzerdefinierte Zielfunktion zu erstellen?

Antwort

0

Um den Gradienten und die Hesse (2. Ableitung) einer Zielfunktion analytisch zu berechnen, müssen Sie sie in Bezug auf die Vorhersagen Ihres Modells definieren und echte Beschriftungen angeben.

Von Ihrer Zielfunktion ist klar, dass Sie eine gewichtete Genauigkeit (ohne Prozentsatz) Metrik optimieren, wobei das Gewicht für eine Klasse von den Anzahl Instanzen dieser Klasse abhängt. Lassen Sie uns die folgenden drei Klassen definieren, A, B und C:
- C_A, C_B und C_C die Anzahl der korrekten Vorhersagen in entsprechenden Klassen;
- N_A, N_B, N_C die Anzahl der Instanzen in jeder dieser Klassen sein;
- N_A+N_B+N_C = T als Gesamtzahl der Instanzen.
Ihre Zielfunktion lautet dann: C_A/N_A + C_B/N_B + C_C/N_C.
Das kann auch geschrieben werden als: (C_A/T)*(T/N_A) + (C_B/T)*(T/N_B) + (C_C/T)*(T/N_C).
Dies kann direkt mit der Gesamtgenauigkeit verglichen werden: C_A/T + C_B/T + C_C/T

Dies bedeutet, dass Sie Ihr Ziel indirekt optimieren können, indem Sie die integrierte Zielfunktion "multi: softmax" in xgboost verwenden.

Verwandte Themen