Ich habe klassenunausgeglichene Daten und möchte die Hyperparameter der verstärkten Locke mit xgboost optimieren.
Fragen
- Gibt es für xgboost ein Äquivalent zu gridsearchcv oder randomsearchcv?
- Wenn nicht, was ist der empfohlene Ansatz, um die Parameter von xgboost zu optimieren?
machine-learning
cross-validation
xgboost
boosting
GeorgeOfTheRF
quelle
quelle
xgboost(max.depth)
oderxgb.train(max_depth)
? Verwendet xgboost uneinheitlich Punkt-gegen-Unterstrich für den Parameter an verschiedenen Stellen? Oder sind sie konvertiert?Antworten:
Da sich die Benutzeroberfläche von
xgboost
incaret
kürzlich geändert hat, finden Sie hier ein Skript, das eine vollständig kommentierte exemplarische Vorgehensweisecaret
zum Einstellen vonxgboost
Hyperparametern enthält.Dazu verwende ich die Trainingsdaten des Kaggle-Wettbewerbs "Give Me Some Credit" .
1. Ein
xgboost
Modell montierenIn diesem Abschnitt werden wir:
xgboost
Modell mit beliebigen Hyperparametern anxgb.cv
)Hier ist ein Code, um dies zu tun.
So sieht das Testen im Vergleich zur Trainings-AUC aus:
2. Hyperparametersuche mit
train
Für die Hyperparametersuche führen wir folgende Schritte durch:
data.frame
mit einzigartigen Kombinationen von Parametern, für die wir trainierte Modelle benötigen.Hier ist ein Code, der zeigt, wie das geht.
Zuletzt können Sie einen Bubbleplot für die AUC über die Variationen von
eta
und erstellenmax_depth
:quelle
xgboost
Parameter ist jetzt vorhanden, insbesondere Unterstützung fürgamma
ist neu. Hier ist eine vollständige Liste der unterstützten Parameter.scale_pose_weight
für eine unausgewogene Klassifizierung angegeben. Können Sie nähere Angaben dazu machen? Vielen Dank!scale_pos_weight
wird jetzt in der Parameterdokumentation dokumentiert .scale_pos_weight
ist kein Caret-Tuning-Parameter, kann aber manuell verglichen werden. In meinem Fall hatte die Verwendung des Gewichts nur geringe Auswirkungen (binäre Klassifizierung,> 20% Positiv)Caret-Paket haben xgboost integriert.
Beispielausgabe
Ein Nachteil, den ich sehe, ist, dass andere Parameter von xgboost wie Subsample usw. derzeit von Caret nicht unterstützt werden.
Bearbeiten
Gamma, colsample_bytree, min_child_weight und subsample etc können jetzt (Juni 2017) direkt mit Caret eingestellt werden. Fügen Sie sie einfach in den Rasterabschnitt des obigen Codes ein, damit es funktioniert. Vielen Dank an usεr11852 für die Hervorhebung im Kommentar.
quelle
caret
Jetzt (Feb-2017) unterstützt zusätzliche Parametergamma
,colsample_bytree
,min_child_weight
undsubsample
. (So effektiv können Sie fast alles stimmen - gegebene Zeit)Ich weiß, dass dies eine alte Frage ist, aber ich verwende eine andere Methode als die oben genannten. Ich benutze die BayesianOptimization-Funktion aus dem Bayesian Optimization-Paket, um optimale Parameter zu finden. Dazu erstellen Sie zunächst Kreuzvalidierungsfalten und anschließend eine Funktion
xgb.cv.bayes
, deren Parameter die zu ändernden verstärkenden Hyperparameter enthalten. In diesem Beispiel stimme ichmax.depth, min_child_weight, subsample, colsample_bytree, gamma
. Diesexgb.cv
Funktion rufen Sie dann mit den in den Eingabeparametern von eingestellten Hyperparametern aufxgb.cv.bayes
. Dann rufst duBayesianOptimization
mitxgb.cv.bayes
und die gewünschten Bereiche der aufsteigenden Hyperparameter auf.init_points
ist die Anzahl der anfänglichen Modelle mit zufällig ausgewählten Hyperparametern aus den angegebenen Bereichenn_iter
ist die Anzahl der Runden von Modellen nach den Anfangspunkten. Die Funktion gibt alle Boosting-Parameter und die Test-AUC aus.quelle
Dies ist eine ältere Frage, aber ich dachte, ich würde teilen, wie ich xgboost-Parameter abstimme. Ursprünglich dachte ich, ich würde Caret dafür verwenden, fand aber kürzlich ein Problem bei der Behandlung aller Parameter sowie fehlender Werte. Ich habe auch darüber nachgedacht, eine Iterationsschleife durch verschiedene Parameterkombinationen zu schreiben, wollte aber, dass sie parallel abläuft und zu viel Zeit benötigt. Die Verwendung von gridSearch aus dem NMOF-Paket bot das Beste aus beiden Welten (alle Parameter sowie Parallelverarbeitung). Hier ist ein Beispielcode für die Binärklassifizierung (funktioniert unter Windows und Linux):
quelle