2015-10-13 4 views
11

Ich versuche, Modellparameter als Diktat an einen Scikit-learn-Schätzer zu übergeben und habe kein Glück. Es scheint nur mein Diktat in einen der Parameter zu verschachteln. Zum Beispiel:Übergeben Sie ein Diktat zu scikit learn estimator

params = { 
'copy_X': True, 
'fit_intercept': False, 
'normalize': True 
} 

lr = LinearRegression(params) 

Gibt mir:

LinearRegression(copy_X=True, 
     fit_intercept={'copy_X': True, 'fit_intercept': False,'normalize': True}, 
    normalize=False) 

Zusätzlich habe ich eine Funktion über die dict iterieren und eine Zeichenfolge erstellen können wie:

'copy_X=True, fit_intercept=True, normalize=False' 

Dies war ebenso erfolglos . Hat jemand hier einen Rat? Die einzige Einschränkung, die ich habe, ist, dass die Daten zu mir als ein Diktat kommen werden (naja, tatsächlich wird ein Json-Objekt mit json.uploads geladen).

Danke.

Antwort

16

Die beste Lösung, um Ihre Schätzer mit den richtigen Parametern zu initialisieren zu auspacken Wörterbuch wäre:

lr = LinearRegression(**params) 

Wenn aus irgendeinem Grund Sie brauchen Stellen Sie danach einige Parameter ein, die Sie verwenden könnten:

lr.set_params(params) 

Dies hat einen Vorteil gegenüber der Verwendung von setattr, da es Scikit ermöglicht, einige Validierungsprüfungen der Parameter durchzuführen.

+0

Dies sollte die akzeptierte Antwort sein - es ist der Standard Weg, um eine Reihe von Kwargs zu einer Funktion zu übergeben. – eqzx

2

Ich habe es. Verwendet setattr wie folgt.

for k,v in params.items(): 
    setattr(lr,k,v) 
0

fit_intercept ist das erste Argument des LinearRegression Objekt

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

so dass, warum Ihr Wörterbuch erklärt wird auf dieses Argument übergeben wird, die anderen args (auch optional) copy_X und normalize erhalten kein Parameter, so dass sie die Standardwerte verwenden.

Sie könnten auch tun:

params = { 
'copy_X': True, 
'fit_intercept': False, 
'normalize': True 
} 

lr = LinearRegression(copy_X = params['copy_X'], \ 
         fit_intercept = params['fit_intercept'], \ 
         normalize = params['normalize']) 
Verwandte Themen