2017-03-21 3 views
2

誰かがsklearnでアンサンブルを部分的に使う方法を教えてください。 私のモデルを再トレーニングしたくありません。 また、あらかじめ訓練されたアンサンブルモデルを渡すことはできますか? 投票分類器は、たとえば部分適合を使ったトレーニングをサポートしていないことが分かりました。sklearn投票アンサンブルを部分的に合わせて使用​​する

答えて

2

残念ながら、現在のところ、これはscikit VotingClassifierでは不可能です。

しかし、あなたがしようとプレフィットモデルを取ることができ、独自の議決分類器を実装するためにhttp://sebastianraschka.com/Articles/2014_ensemble_classifier.html(VotingClassiferがを実装しているから)を使用することができます。

また、我々はsource code hereを見て、私たちの使用にそれを修正することができます。

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

Mlxtendライブラリを使用すると、事前に装着モデルに渡すことができますVotingEnsembleの実装があります。たとえば、3つの事前訓練モデルclf1、clf2、clf3があるとします。次のコードは動作します。 falseに設定すると

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

EnsembleVoteClassifierで改装引数は分類が改装されることはありません。

一般的に、sci-kitが学んでいないより高度な技術的機能を探すときは、mlxtendを参照の第1のポイントとして見てください。

関連する問題