2016-03-24 15 views
6

Ich möchte Beispielgewichte anwenden und gleichzeitig eine Pipeline von sklearn verwenden, die eine Feature-Transformation, z. Polynom, und wenden dann einen Regressor, z.B. ExtraTrees.sklearn pipeline - Anwenden von Beispielgewichten nach dem Anwenden einer Polynom-Feature-Transformation in einer Pipeline

Ich verwende die folgenden Pakete in den beiden folgenden Beispiele:

from sklearn.ensemble import ExtraTreesRegressor 
import numpy as np 
from sklearn.pipeline import Pipeline 
from sklearn.preprocessing import PolynomialFeatures 

Alles funktioniert gut, solange ich seperat die Eigenschaften verändern und erzeugen und das Modell trainieren danach:

#Feature generation 
X = np.random.rand(200,4) 
Y = np.random.rand(200) 

#Feature transformation 
poly = PolynomialFeatures(degree=2) 
poly.fit_transform(X) 

#Model generation and fit 
clf = ExtraTreesRegressor(n_estimators=5, max_depth = 3) 
weights = [1]*100 + [2]*100 
clf.fit(X,Y, weights) 

Aber tut es in einer Pipeline, funktioniert nicht:

#Pipeline generation 
pipe = Pipeline([('poly2', PolynomialFeatures(degree=2)), ('ExtraTrees', ExtraTreesRegressor(n_estimators=5, max_depth = 3))]) 

#Feature generation 
X = np.random.rand(200,4) 
Y = np.random.rand(200) 

#Fitting model 
clf = pipe 
weights = [1]*100 + [2]*100 
clf.fit(X,Y, weights) 

Ich bekomme die fol Lowing-Fehler: TypeError: fit() braucht höchstens 3 Argumente (4 gegeben) In diesem einfachen Beispiel ist es kein Problem, den Code zu ändern, aber wenn ich mehrere verschiedene Tests auf meine realen Daten in meinem echten Code ausführen möchte, in der Lage sein, Pipelines und Probengewicht zu verwenden

Antwort

8

Es gibt **fit_params in der fit Methode von Pipeline Dokumentation. Sie müssen angeben, auf welchen Schritt der Pipeline der Parameter angewendet werden soll. Sie können dies in der Dokumentation, indem Sie die Benennungsregeln erreichen:

For this, it enables setting parameters of the various steps using their names and the parameter name separated by a ‘__’, as in the example below.

Also alles, was gesagt wird, versucht die letzte Zeile zu ändern:

clf.fit(X,Y, **{'ExtraTrees__sample_weight': weights}) 

This is a good example, wie mit den Parametern in Pipelines zu arbeiten.

+1

Danke, Kevin! Das hat das Problem gelöst und das Beispiel ist wirklich schön zu sehen, wie Parameter in Pipelines funktionieren! – stefanE

Verwandte Themen