2017-03-21 2 views
2

Kann jemand bitte sagen, wie Ensembles in Sklearn mit Teilanpassung zu verwenden. Ich möchte mein Modell nicht umschulen. Oder können wir vortrainierte Modelle zum Zusammenfügen übergeben? Ich habe gesehen, dass der Abstimmungs-Klassifizierer zum Beispiel kein Training unterstützt, das eine Teilanpassung verwendet.Verwendung von Sklearn-Voting-Ensemble mit Teilanpassung

Antwort

2

Leider ist dies zur Zeit in scikit VotingClassifier nicht möglich.

Aber Sie können http://sebastianraschka.com/Articles/2014_ensemble_classifier.html verwenden (aus dem VotingClassifer implementiert ist), um Ihre eigene Abstimmung Klassifikator zu versuchen und zu implementieren, die vormontierte Modelle nehmen.

Auch können wir am source code here schauen und es zu unserer Verwendung ändern:

from sklearn.preprocessing import LabelEncoder 
import numpy as np 

le_ = LabelEncoder() 

# When you do partial_fit, the first fit of any classifier requires 
all available labels (output classes), 
you should supply all same labels here in y. 
le_.fit(y) 

# Fill below list with fitted or partial fitted estimators 
clf_list = [clf1, clf2, clf3, ... ] 

# Fill weights -> array-like, shape = [n_classifiers] or None 
weights = [clf1_wgt, clf2_wgt, ... ] 
weights = None 

#For hard voting: 
pred = np.asarray([clf.predict(X) for clf in clf_list]).T 
pred = np.apply_along_axis(lambda x: 
          np.argmax(np.bincount(x, weights=weights)), 
          axis=1, 
          arr=pred.astype('int')) 

#For soft voting: 
pred = np.asarray([clf.predict_proba(X) for clf in clf_list]) 
pred = np.average(pred, axis=0, weights=weights) 
pred = np.argmax(pred, axis=1) 

#Finally, reverse transform the labels for correct output: 
pred = le_.inverse_transform(np.argmax(pred, axis=1)) 
1

Die Mlxtend Bibliothek verfügt über eine Implementierung von VotingEnsemble, die Sie in vormontiertem Modelle passieren lässt. Zum Beispiel, wenn Sie drei vortrainierte Modelle clf1, clf2, clf3 haben. Der folgende Code würde funktionieren.

mlxtend.classifier import EnsembleVoteClassifier 
import copy 
eclf = EnsembleVoteClassifier(clfs=[clf1, clf2, clf3], weights=[1,1,1], refit=False) 

Wenn auf false gesetzt die Refit Argument in EnsembleVoteClassifier stellt sicher, dass die Klassifizierer wieder anbringen nicht.

Im Allgemeinen, wenn Sie nach fortgeschrittenen technischen Funktionen suchen, die sci-kit lernen nicht bietet, schauen Sie nach mlxtend als ein erster Bezugspunkt.