2016-08-04 36 views
4

Ich möchte verstehen, wie max_samples Wert für einen Bagging-Klassifikator die Anzahl der Proben für jeden der Basisschätzer verwendet.Wie wirkt sich das Schlüsselwort "max_samples" für einen Bagging-Klassifikator auf die Anzahl der Stichproben aus, die für jeden der Basisschätzer verwendet werden?

Dies ist die Gridsearch Ausgabe:

GridSearchCV(cv=5, error_score='raise', 
     estimator=BaggingClassifier(base_estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None, 
      max_features=None, max_leaf_nodes=None, min_samples_leaf=1, 
      min_samples_split=2, min_weight_fraction_leaf=0.0, 
      presort=False, random_state=1, spl... n_estimators=100, n_jobs=-1, oob_score=False, 
     random_state=1, verbose=2, warm_start=False), 
     fit_params={}, iid=True, n_jobs=-1, 
     param_grid={'max_features': [0.6, 0.8, 1.0], 'max_samples': [0.6, 0.8, 1.0]}, 
     pre_dispatch='2*n_jobs', refit=True, scoring=None, verbose=2) 

Hier finden bin ich heraus, was die besten params waren:

print gs5.best_score_, gs5.best_params_ 
0.828282828283 {'max_features': 0.6, 'max_samples': 1.0} 

nun die beste Rastersuche Schätzer und ich bin Kommissionierung versuchen, das zu sehen Anzahl der Proben, die der spezifische Bagging-Klassifikator in seinem Satz von 100 Basis-Entscheidungsbaum-Schätzern verwendet hat. Jetzt

val=[] 
for i in np.arange(100): 
    x = np.bincount(gs5.best_estimator_.estimators_samples_[i])[1] 
    val.append(x) 
print np.max(val) 
print np.mean(val), np.std(val) 

587 
563.92 10.3399032877 

, ist die Größe des Trainingssatzes 891. Da CV 5, 891 * 0,8 = 712,8 in jede Absackung Klassifikator Auswertung gehen sollte, und da max_samples 1,0, 891 * 0,5 * 1,0 = 712,8 sollte die Anzahl der Proben pro Basisschätzer, oder etwas in der Nähe davon?

Also, warum ist die Zahl im Bereich 564 +/- 10, und der maximale Wert 587, wenn nach Berechnung, sollte es nahe 712 sein? Vielen Dank.

Antwort

2

Nachdem ich weitere Nachforschungen angestellt habe, denke ich, dass ich herausgefunden habe, was vor sich geht. GridSearchCV verwendet Kreuzvalidierung auf die Trainingsdaten zu bestimmen die besten Parameter, aber der Schätzer es zurückgibt passt auf die gesamte Trainingssatz, nicht eine der CV-Falten. Dies ist sinnvoll, weil mehr Trainingsdaten normalerweise besser sind.

Also, die BaggingClassifier Sie zurück von GridSearchCV ist fit für den vollen Datensatz von 891 Datenproben. Es ist also richtig, dass bei max_sample = 1 jeder Basisschätzer 891 Stichproben aus dem Trainingssatz zufällig zieht. Standardmäßig werden jedoch die Proben mit dem Ersatz gezeichnet, so dass die Anzahl der eindeutigen Proben aufgrund von Duplikaten geringer ist als die Gesamtzahl der Proben. Wenn Sie ohne Ersetzung zeichnen möchten, legen Sie das Bootstrap-Schlüsselwort von BaggingClassifier auf false fest.

Jetzt, genau wie nahe sollten wir erwarten, dass die Anzahl der verschiedenen Proben auf die Größe des Datensatzes beim Zeichnen ohne Ersatz sein?

Basierend auf this question ist die erwartete Anzahl von unterschiedlichen Proben beim Zeichnen von n Proben mit Ersetzung aus einer Menge von n Proben n * (1- (n-1)/n)^n. Wenn wir 891 in diesen Stecker, bekommen wir

>>> 891 * (1.- (890./891)**891) 
563.4034437025824 

Die erwartete Anzahl von Proben (563,4) ist sehr nah an Ihrem beobachtet Mittelwert (563,8), so scheint es, dass nichts Ungewöhnliches passiert.

+0

Der Grund, warum ich ein wenig verwirrt bin, ist, weil ich erwarte, dass die Schlüsselwörter max_features und max_samples ähnlich funktionieren. Wenn ich estimators_features_ verwende, um zu sehen, welche Features zum Trainieren der 100 Basis-Entscheidungsbaum-Schätzer verwendet wurden, sehe ich, dass alle 100 Bäume jeweils eine Untermenge von 9 Merkmalen verwendeten und mein Datensatz 16 Merkmale und 0,6 * 16 = 9,6 hatte macht Sinn, 9 Features als Maximalwert zu haben. Aber es gibt keinen Baum mit weniger als 9 Funktionen, alle haben 9. Jetzt im Fall von Proben, sollten beide alle eine zufällige Teilmenge von 712 Proben verwenden, oder ich erwartete, dass die Zahl näher an 712 sein würde. – hkhare

+0

Das Problem ist, dass Samples standardmäßig mit Ersetzung gezeichnet werden. – bpachev

+0

OK.Ich habe mehr Nachforschungen angestellt, und es stellt sich heraus, dass GridSearchCV einen Schätzer zurückgibt, der auf den vollen Datensatz von 891 Punkten trainiert wurde. Wenn Sie Sampling mit Ersatz durchführen, erhalten Sie auch einige Duplikate. Siehe meine neu geschriebene Antwort für die Details. – bpachev