2016-12-21 3 views
0

私はcross_valを使用して良い結果を得ている分類器を持っています。基本的に私がやっているすべては、次のとおりです。基本的にsklearnクラシファイアフィットをcross_valで保存する

clf = RandomForestClassifier(class_weight="balanced") 
scores = cross_val_score(clf, data, target, cv=8) 
predict_RF = cross_val_predict(clf, data, target, cv=8) 

from sklearn.externals import joblib 
joblib.dump(clf, 'churnModel.pkl') 

私が何をしたいのかcross_valとJOBLIBへの輸出によりフィットなってきたモデルを取ることです。私は私が得る別のプロジェクトでそれを引っ張るしようとすると、しかし:

sklearn.exceptions.NotFittedError: Estimator not fitted, call `fit` before exploiting the model. 

だから私は実際に私のCLFにフィットを保存していないcross_val推測していますか? cross_valが生成しているモデルフィットをどのように維持しますか?

+1

どのモデルですか?バリデーションをクロスすると、*複数のモデルに適合します。 –

答えて

0

juanpa.arrivillagaが正しいです。私はあなたが手動でそれをやらなければならないのではないかと恐れていますが、scikit-learnはとても簡単です。 cross_val_scoreは、あなたに返されないディープコピーを作成しています。あなたは(すなわちclf_models)リストにjuanpa.arrivillagaのアドバイスを経由して

from sklearn.model_selection import StratifiedKFold 
from sklearn.ensemble import RandomForestClassifier 
from copy import deepcopy 

kf = StratifiedKFold(n_splits=8) 
clf = RandomForestClassifier(class_weight="balanced") 
clf_models = [] 

# keep in mind your X and y should be indexed same here 
kf.get_n_splits(X_data) 
for train_index, test_index in kf.split(X_data): 
    print("TRAIN:", train_index, "TEST:", test_index) 
    X_train, X_test = X_data[train_index], X_data[test_index] 
    y_train, y_test = y_data[train_index], y_data[test_index] 
    tmp_clf = deepcopy(clf) 
    tmp_clf.fit(X_train, y_train) 

    print("Got a score of {}".format(tmp_clf.score(X_test, y_test)) 
    clf_models.append(tmp_clf) 

-editをdeepcopiedモデルを持っているでしょう下回っ StratifiedKFoldは、より良い選択です。デモンストレーションのためだけに。

+0

おそらく 'StratifiedKFold'を使うほうがいいでしょう –

+0

私が正しく理解すれば、clf_modelsは親データのサブセットに適合する8モデルのリストですか?これを単一のモデルにするためのベストプラクティスはありますか?私は最高のスコアを持つものを選ぶか、それともそれらを混ぜる方法はありますか? –

+0

これは間違いなく、clf_modelsは8個の適合モデルのリストです。クロスバリデーションを使用している場合、目的は通常、モデルの適切なハイパーパラメータを見つけることです。モデルが訓練していないデータの倍数が将来のデータセットを特に代表しない場合には、最高のスコアを有するモデルを選択することが適切な選択肢となり得る。これが本当であるかどうかを調べるべきです。これらのことは通常ケースバイケースで決まります。 RandomForestClassifierは、あなたのケースでは結果を返さないかもしれません。要するに、それは依存している。 – itzjustricky

関連する問題