0

ロジスティックモデルを訓練し、相互検証し、joblibモジュールを使用してファイルに保存しました。今私はこのモデルを読み込み、それを使って新しいデータを予測したいと思います。 これは正しい方法ですか?特に標準化。私も新しいデータにscaler.fit()を使うべきですか?私が従ったチュートリアルでは、scaler.fitはトレーニングセットでのみ使用されていたので、ここで少し失われています。ここで新しいデータをロードして予測するsklearn

は私のコードです:

#Loading the saved model with joblib 
model = joblib.load('model.pkl') 

# New data to predict 
pr = pd.read_csv('set_to_predict.csv') 
pred_cols = list(pr.columns.values)[:-1] 

# Standardize new data 
scaler = StandardScaler() 
X_pred = scaler.fit(pr[pred_cols]).transform(pr[pred_cols]) 

pred = pd.Series(model.predict(X_pred)) 
print pred 

答えて

4

いいえ、それは正しくないです。列車データを使用してすべてのデータ準備ステップを適合させる必要があります。そうでなければ、間違った変換を適用する危険があります。StandardScalerの推定値は、列車とテストデータの間でおそらく異なるためです。

、訓練セーブ、ロードと同時に、すべての手順を適用する最も簡単な方法は、パイプラインを使用することです:

トレーニング時:

# prepare the pipeline 
from sklean.pipeline import make_pipeline 
pipe = make_pipeline(StandardScaler(), LogisticRegression) 
pipe.fit(X_train, y_train) 
joblib.dump(pipe, 'model.pkl') 

予測時:

#Loading the saved model with joblib 
pipe = joblib.load('model.pkl') 

# New data to predict 
pr = pd.read_csv('set_to_predict.csv') 
pred_cols = list(pr.columns.values)[:-1] 

# apply the whole pipeline to data 
pred = pd.Series(pipe.predict(pr[pred_cols])) 
print pred 
+0

ありがとう、David! –

関連する問題