2013-10-09 7 views
9

Ich frage mich, ob wir einen "optionalen" Schritt in sklearn.pipeline einrichten können. Zum Beispiel könnte ich für ein Klassifizierungsproblem versuchen, eine ExtraTreesClassifier mit UND ohne eine PCA Transformation davor zu versuchen. In der Praxis könnte es eine Pipeline mit einem zusätzlichen Parameter sein, der den Toggle des Schritts PCA angibt, so dass ich ihn über GridSearch und so weiter optimieren kann. Ich sehe keine solche Implementierung in der Quelle von slearn, aber gibt es irgendwelche um?Ist es möglich, einen bestimmten Schritt in der Sklearn-Pipeline umzuschalten?

Da ferner die möglichen Parameterwerte einer folgenden Stufe in der Pipeline zu den Parametern in einem vorhergehenden Schritt abhängen könnte (zB gültige Werte von ExtraTreesClassifier.max_features hängen von PCA.n_components) ist es möglich, eine derartige bedingte Abhängigkeit in sklearn.pipeline zu spezifizieren und sklearn.grid_search?

Vielen Dank!

Antwort

14
  • Pipeline Schritte derzeit nicht in einer Rastersuche optional gemacht werden, aber man konnte die PCA Klasse in Ihre eigene OptionalPCA Komponente mit einem boolean Parameter wickelt PCA auszuschalten, wenn als eine schnelle Abhilfe gefordert. Vielleicht möchten Sie einen Blick auf hyperopt werfen, um komplexere Suchräume einzurichten. Ich denke, es hat eine gute Sklearn-Integration, um diese Art von Mustern standardmäßig zu unterstützen, aber ich kann das Dokument nicht mehr finden. Vielleicht werfen Sie einen Blick auf this talk.

  • Für das abhängige Parameterproblem unterstützt GridSearchCV Bäume von Parametern, um diesen Fall zu behandeln as demonstrated in the documentation.

+7

Wie Eine Randbemerkung, beachten Sie, dass 'ExtraTreesClassifier.max_features' kann ein Float-Wert zwischen 0.0 und 1.0 anstelle einer Ganzzahl sein. Dies ist nützlich, wenn die tatsächliche Anzahl von Features wie in Ihrem Fall variabel ist. –

+0

Vielen Dank für die aufschlussreichen Antworten. Ich denke, sie sind genau das, wonach ich gesucht habe. – dolaameng

2

Von der docs:

Einzelne Schritte auch als Parameter ersetzt werden können, und nicht endgültige Schritte zu deren Keine ignoriert werden, indem:

from sklearn.linear_model import LogisticRegression 
params = dict(reduce_dim=[None, PCA(5), PCA(10)], 
       clf=[SVC(), LogisticRegression()], 
       clf__C=[0.1, 10, 100]) 
grid_search = GridSearchCV(pipe, param_grid=params)