2017-03-03 2 views
1

Hat scikit-learn einen Schätzer, der mehrere andere Schätzer ausführt und automatisch den mit der besten Leistung auswählt (z. B. anhand ihrer Kreuzvalidierungswerte)?Automatisch den besten aus mehreren Schätzern in scikit-learn auswählen

Ich glaube, dass es so etwas in einer Klasse geben muss, die der Schnittstelle des Schätzers entspricht, so dass es in einer pipeline kombiniert werden kann - richtig?

+0

ich denke du meinst ein Ensemble Methode http://scikit-learn.org/stable/modules/de semble.html? Aber ich bin durch deine Frage verwirrt. Cross_validation wird durch aggregierte Beispiele abgeleitet, sodass die Auswahl des besten basierend auf dem cross_validation-Fehler etwas wäre, was Sie bei der Vorverarbeitung und beim Testen tun würden, wenn Sie letztendlich einen besten Klassifikator auswählen. Wenn Sie nicht danach sind, können Sie die Frage klären? – gbtimmon

+0

Normalerweise würde ich die Leistung verschiedener Schätzer mit Kreuzvalidierung testen. Dann würde ich manuell die besten Ergebnisse für die endgültigen Vorhersagen auswählen. Jetzt möchte ich meinen gesamten Workflow mit sklearn-Pipelines implementieren, also muss dieser letzte Schritt von einer Klasse durchgeführt werden, die auch die Schätzer-Schnittstelle implementiert, glaube ich. Ich glaube nicht, dass "Ensemble-Methoden" die richtige Antwort sind - Vorhersagen sollten nicht kombiniert werden. – clstaudt

+1

IMO, Scikit enthält nichts, was Sie wollen. Aber Sie können Hinweise von hier nehmen: http://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html#sphx-glr-auto-examples-classification-plot-classifier-comparison-py –

Antwort

4

scikit-learn selbst hat derzeit nicht das, was Sie suchen. Es gibt jedoch Bibliotheken wie TPOT und automl-learn mit sklearn-ähnlicher Schnittstelle zur automatischen Auswahl des besten Schätzers oder sogar zur Konstruktion der gesamten Pipeline.

+0

Danke für die Klärung. Es ist überraschend, dass sklearn es nicht hat - ich glaube, das ist ein einfacher Schritt, der sehr oft in ML-Workflows durchgeführt wird. – clstaudt

1

Sie können GridSearchCV verwenden, nicht nur den besten Schätzer zu wählen, sondern auch den Hyper abzustimmen, zum Beispiel, ich bin mit diesem dem besten Text-Klassifikator für die Suche:

pipeline = Pipeline([ 
    ('vect', CountVectorizer(ngram_range=(2,2))), 
    ('tfidf', TfidfTransformer(use_idf=True)), 
    ('clf', SVC()) 
]) 

parameters = {'clf': [ 
    SVC(), 
    MultinomialNB(), 
    BernoulliNB(), 
    MLPClassifier(max_iter=1000), 
    KNeighborsClassifier(), 
    SGDClassifier(max_iter=1000), 
    RandomForestClassifier() 
]} 

gs_clf = GridSearchCV(pipeline, parameters, n_jobs=-1) 
gs_clf = gs_clf.fit(X, y) 

print("Best score", gs_clf.best_score_) 

for param_name in sorted(parameters.keys()): 
    print("%s: %r" % (param_name, gs_clf.best_params_[param_name])) 

Beispiel von den offiziellen Dokumenten : http://scikit-learn.org/stable/auto_examples/plot_compare_reduction.html#sphx-glr-auto-examples-plot-compare-reduction-py

Sie können Ihre eigene Scoring-Funktion selbst definieren, was „beste“ bedeutet für Sie zu definieren: http://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter

Verwandte Themen