2016-03-24 32 views
6

Desidero applicare pesi campione e allo stesso tempo utilizzare una pipeline da sklearn che dovrebbe effettuare una trasformazione di funzionalità, ad es. polinomiale e quindi applicare un regressore, ad es. ExtraTrees.pipeline sklearn - Applicazione di pesi campione dopo l'applicazione di una trasformazione di funzionalità polinomiale in una pipeline

Sto usando i seguenti pacchetti nei due esempi che seguono:

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

Tutto funziona bene fino a quando ho separatamente trasformare le caratteristiche e generare e il training del modello in seguito:

#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) 

Ma farlo in una pipeline, non funziona:

#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) 

Ho la gente Lowing error: TypeError: fit() richiede al massimo 3 argomenti (4 dati) In questo semplice esempio, non è un problema modificare il codice, ma quando voglio eseguire diversi test sui miei dati reali nel mio codice reale, essere in grado di utilizzare tubazioni e peso campione

risposta

8

C'è menzione di **fit_params nel metodo fit della documentazione Pipeline. È necessario specificare a quale fase della pipeline si desidera applicare il parametro. È possibile raggiungere questo obiettivo, seguendo le regole di denominazione nella documentazione:

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.

Quindi, tutto ciò che viene detto, provare a cambiare l'ultima riga a:

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

This is a good example di come lavorare con i parametri in tubazioni.

+1

Grazie, Kevin! Questo ha risolto il problema e l'esempio è davvero bello vedere come funzionano i parametri nelle condotte! – stefanE