EDIT:ein zusätzliches Argument GenericUnivariateSelect ohne Rahmen Tricks vorbei
hier ist die komplette Rückverfolgung, wenn ich die make_scorer
Abhilfe in den Antworten ...
`File "________python/anaconda-2.7.11-64/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
execfile(filename, namespace)
File ""________python/anaconda-2.7.11-64/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
builtins.execfile(filename, *where)
File ""________/main_"________.py", line 43, in <module>
"_________index.fit(X,Y ,g=g,L=L)
File ""________/Core.py", line 95, in fit
X_preprocessed=self.preprocessing.fit_transform(X,y)
File ""________python/anaconda-2.7.11-64/lib/python2.7/site-packages/sklearn/pipeline.py", line 303, in fit_transform
return last_step.fit_transform(Xt, y, **fit_params)
File ""________/python/anaconda-2.7.11-64/lib/python2.7/site-packages/sklearn/base.py", line 497, in fit_transform
return self.fit(X, y, **fit_params).transform(X)
File "Base/Base.py", "________
score_func_ret = self.score_func(X, y)
TypeError: __call__() takes at least 4 arguments (3 given)`
Ich arbeite an vorgeschlagen gelten eine Sklearn-Pipeline.
custom_filter=GenericUnivariateSelect(Custom_Score,mode='MinScore',param=0.9)
custom_filter._selection_modes.update({'MinScore': SelectMinScore})
MyProcessingPipeline=Pipeline(steps=[...
('filter_step', None),
....])
ProcessingParams.update({'filter_step':custom_filter})
MyProcessingPipeline.set_params(**ProcessingParams)
wo SelectMinScore
ist ein Brauch BaseFilter
.
muss ich univariate Funktion Auswahl auszuführen basierend auf einem Custom_Score
, die ein zusätzliches Argument erhalten müssen, genannt XX hier
def Custom_Score(X,Y,XX=_XX):
# do stuff
return my_score
Leider AFAIK die sklearn API erlaubt keine zusätzlichen Argumente übergeben werden ein Parameter eines Parameters eines Schritts einer Pipeline.
Ich habe
versuchtMyProcessingPipeline({'filter_step':custom_filter(XX=_XX)})
aber das bricht Argument Kaskade vorbei (glaube ich).
Bis jetzt habe ich das gelöst, indem ich einen Wrapper geschrieben habe, wo _XX die Daten sind, die ich brauche, die leider zum Definitionszeitpunkt im Bereich der Funktion sein müssen. Also habe ich am Ende die Funktion innerhalb meiner main
Funktion definiert, so dass _XX existiert und es kann übergeben werden.
def Custom_Score_Wrapped(X,Y):
return Custom_Score(X,Y,XX=_XX)
Ich denke, das ist ein wirklich dreckiger Workaround.
Was ist der richtige Weg?
ich versucht habe, es tut nicht arbeiten. Ich die folgenden Fehler in der basefilter Klasse: File "Basis/base_dataframe.py", Linie 333, in fit score_func_ret self.score_func = (x, y) Typeerror: __call __() nimmt mindestens 4 Argumente (3 gegeben) – ErroriSalvo
so scheint es, die Filter-Klasse muss immer noch auf alle Argumente der score_func zugreifen, um zu arbeiten – ErroriSalvo
@Sabor können Sie bitte die komplette Stapel-Trace –