2017-04-14 1 views
0

Ich führe einen GradientBoostingClassifier von Sklearn und ich bekomme etwas seltsame Ausgabe von der ausführlichen Ausgabe. Ich nehme zufällige 10% Proben aus meinem gesamten Datensatz und die meisten scheinen in Ordnung zu sein, aber manchmal bekomme ich seltsame Ergebnisse und schlechte Ergebnisse. Kann mir bitte jemand erklären, was vor sich geht?Fehler in Scikit-Learning GradientBoostingClassifier?

"gut" Ergebnis:

n features = 168 
GradientBoostingClassifier(criterion='friedman_mse', init=None, 
       learning_rate=0.01, loss='deviance', max_depth=4, 
       max_features=None, max_leaf_nodes=None, 
       min_impurity_split=1e-07, min_samples_leaf=1, 
       min_samples_split=2, min_weight_fraction_leaf=0.0, 
       n_estimators=2000, presort='auto', random_state=None, 
       subsample=1.0, verbose=1, warm_start=False) 
     Iter  Train Loss Remaining Time 
     1   0.6427   40.74m 
     2   0.6373   40.51m 
     3   0.6322   40.34m 
     4   0.6275   40.33m 
     5   0.6230   40.31m 
     6   0.6187   40.18m 
     7   0.6146   40.34m 
     8   0.6108   40.42m 
     9   0.6071   40.43m 
     10   0.6035   40.28m 
     20   0.5743   40.12m 
     30   0.5531   39.74m 
     40   0.5367   39.49m 
     50   0.5237   39.13m 
     60   0.5130   38.78m 
     70   0.5041   38.47m 
     80   0.4963   38.34m 
     90   0.4898   38.22m 
     100   0.4839   38.14m 
     200   0.4510   37.07m 
     300   0.4357   35.49m 
     400   0.4270   33.87m 
     500   0.4212   31.77m 
     600   0.4158   29.82m 
     700   0.4108   27.74m 
     800   0.4065   25.69m 
     900   0.4025   23.55m 
     1000   0.3987   21.39m 
     2000   0.3697   0.00s 
predicting 
this_file_MCC = 0.5777 

"Bad" Ergebnis:

Training the classifier 
n features = 168 
GradientBoostingClassifier(criterion='friedman_mse', init=None, 
       learning_rate=1.0, loss='deviance', max_depth=5, 
       max_features='sqrt', max_leaf_nodes=None, 
       min_impurity_split=1e-07, min_samples_leaf=1, 
       min_samples_split=2, min_weight_fraction_leaf=0.0, 
       n_estimators=500, presort='auto', random_state=None, 
       subsample=1.0, verbose=1, warm_start=False) 
     Iter  Train Loss Remaining Time 
     1   0.5542   1.07m 
     2   0.5299   1.18m 
     3   0.5016   1.14m 
     4   0.4934   1.16m 
     5   0.4864   1.19m 
     6   0.4756   1.21m 
     7   0.4699   1.24m 
     8   0.4656   1.26m 
     9   0.4619   1.24m 
     10   0.4572   1.26m 
     20   0.4244   1.27m 
     30   0.4063   1.24m 
     40   0.3856   1.20m 
     50   0.3711   1.18m 
     60   0.3578   1.13m 
     70   0.3407   1.10m 
     80   0.3264   1.09m 
     90   0.3155   1.06m 
     100   0.3436   1.04m 
     200   0.3516   46.55s 
     300  1605.5140   29.64s 
     400 52215150662014.0469   13.70s 
     500 585408988869401440279216573629431147797247696359586211550088082222979417986203510562624281874357206861232303015821113689812886779519405981626661580487933040706291550387961400555272759265345847455837036753780625546140668331728366820653710052494883825953955918423887242778169872049367771382892462080.0000   0.00s 
predicting 
this_file_MCC = 0.0398 
+0

Können Sie herausfinden, welche Datenmuster dieses Problem verursachen? –

+0

Ich trainiere auf "Bissproben" eines Datensatzes, der ungefähr 1 Million Reihen hat. Jedes Sample hat ungefähr 100k Zeilen. Das Problem scheint nicht mit den Eingabedaten zu sein, da ich einen sklearn.ensemble.ExtraTreesClassifier für dieselben Beispieldateien ohne Fehler ausgeführt habe. – denson

+0

Ok. Ich habe darum gebeten, dass wir ein reproduzierbares Beispiel dafür haben können, einen Fehler auf Sklearn zu machen. –

Antwort

1

Ihre Lernrate für die "schlechten" Beispiel zu hoch ist und Sie über den lokalen oder globalen Minima springen in dem Gradientenabstiegsschritt des Gradientenverstärkungsalgorithmus. Dies verursacht eine Divergenzsituation und führt zur Explosion des Fehlers, den Sie sehen. Werfen Sie einen Blick auf this lecture from Andrew Ng's Machine Learning Course. Der relevante Teil zur Lernrate kommt um 4:30 Uhr.

Denken Sie über Gradienten-Abstieg/Aufstieg als den Prozess der versuchen, Ihren Weg zum unteren oder oberen Rand eines Tales/Hügels oder idealerweise zum niedrigsten/höchsten Punkt weltweit zu finden. Wenn die Hügel/Täler sehr groß sind und Sie kleine Schritte machen, sollten Sie in der Lage sein, zumindest zu den lokalen Minima/Maxima zu finden. Aber wenn die Hügel/Täler im Verhältnis zur Größe Ihrer Schritte klein sind, wäre es sehr einfach, über Maxima/Minima zu springen und irgendwo schrecklich zu enden. Die Lernrate entspricht der Größe Ihrer Schritte, im "guten" Fall lag Ihre Lernrate (Alpha) bei 0,01, so dass Sie in der Lage waren, kleine Schritte in die richtige Richtung zu gehen (größtenteils), bis Sie die Minima erreicht haben Im "schlechten" Fall war Ihr Alpha 1,0, also machten Sie große Schritte und sprangen direkt über die lokalen Minima und landeten aufsteigend statt absteigend. Das ist eine sehr elementare Art zu denken, was die Lernrate innerhalb des Algorithmus macht.

Wenn Sie diesen Artikel auf tuning the learning rate on DatumBox lesen, sehen Sie eine oft recycelte Visualisierung des Prozesses (nicht sicher, wer dieses Bild von wem gestohlen hat, aber es ist überall) und eine kleine Diskussion über adaptive Änderung der Lernrate. Ich bin mir nicht sicher, ob dies der Standard in Sklearn ist, aber ich würde nicht darauf zählen.

+0

Da ich zufällig Parameter auswähle, wusste ich, dass einige Kombinationen "schlecht" wären. Der GradientBoostingClassifier scheint jedoch Müll auszugeben, wenn etwas schief geht. Bei einigen Eingangsbeispielen funktionieren die identischen Parameter tatsächlich gut und erzeugen eine ziemlich hohe Leistung. – denson

+0

Das ist wahrscheinlich ein Ergebnis des Zufallssaatguts. Verwenden Sie einen festen Samen? Wenn nicht auf der Grundlage, wo Sie den Abstieg starten, können einige Parameter manchmal funktionieren, andere nicht. – Grr

+0

Ich würde empfehlen, eine grid_serch mehr als nur Randomisieren von Parametern zu verwenden, wenn Sie ein optimales Modell finden. – Grr

Verwandte Themen