2
を使用して訓練GradientBoostingClassifierのロード:の保存と、私は次のコードを使用してjoblib.dump使用して訓練GradientBoostingClassifierを保存しようとしていますjoblib.dump
# use 90% of training data
NI=int(len(X_tr)*0.9)
I1=np.random.choice(len(X_tr),NI)
Xi=X_tr[I1,:]
Yi=Y_tr[I1]
#train a GradientBoostingCalssifier using that data
a=GradientBoostingClassifier(learning_rate=0.02, n_estimators=500, min_samples_leaf=50,presort=True,warm_start=True)
a.fit(Xi,Yi)
# calculate class probabilities for the remaining data
I2=np.array(list(set(range(len(X_tr)))-set(I1)))
Pi=np.zeros(len(X_tr))
Pi[I2]=a.predict_proba(X_tr[I2,:])[:,1].reshape(-1)
#save indexes of training data and the predicted probabilites
np.savetxt('models\\balanced\\GBT1\\oob_index'+str(j)+'.txt',I2)
np.savetxt('models\\balanced\\GBT1\\oob_m'+str(j)+'.txt',Pi)
# save the trained classifier
joblib.dump(a, 'models\\balanced\\GBT1\\m'+str(j)+'.pkl')
分類器が訓練され、保存された後、私は、ターミナルを閉じました新しいターミナルを開き、
保存されたテスト・データセットに対する分類子をロードし、それをテストするために、次のコードを実行し# load the saved class probabilities
Pi=np.loadtxt('models\\balanced\\GBT1\\oob_m'+str(j)+'.txt')
#load the training data index
Ii=np.loadtxt('models\\balanced\\GBT1\\oob_index'+str(j)+'.txt')
#load the trained model
a=joblib.load('models\\balanced\\GBT1\\m'+str(j)+'.pkl')
#predict class probabilities using the trained model
Pi1=a.predict_proba(X_tr[Ii,:])[:,1]
# Calculate aupr for the retrained model
_prec,_rec,_=metrics.precision_recall_curve(Y[Ii],Pi1,pos_label=1)
auc=metrics.auc(_rec,_prec);
# calculate aupr for the saved probabilities
_prec1,_rec1,_=metrics.precision_recall_curve(Y[Ii],Pi[Ii],pos_label=1)
auc1=metrics.auc(_rec1,_prec1);
print('in iteration ', j, ' aucs: ', auc, auc1)
コードは次のように出力されます反復0のAUCで :0.0331879 0.0657821 ..... .......................... すべての場合、リロードされたクラシファイアのauprは、元の訓練されたクラシファイアと大きく異なります。私は読み込みと保存に同じバージョンのsklearnとpythonを使用しています。私は間違って何をしていますか?
は漬物を使用してモデルを保存https://machinelearningmastery.com/save-gradient-:それはdefault
コードは以下
auc
メトリックのと同じ結果を生成することにより、データをシャッフルboosting-models-xgboost-python/ – Paddyコードは正しいですか? => 'Ii = Pi = np.loadtxt ...'。ここでは、変数Piにロードしているインデックスを再割り当てします。 –
@Paddy。はい、彼は出来ます。しかし、問題は無関係であり、scikitのドキュメントは 'joblib'(http://scikit-learn.org/stable/modules/model_persistence.html#persistence-example)でscikitモデルを保存することをお勧めします。 –