加载和预测新数据 sklearn

Load and predict new data sklearn

我训练了一个 Logistic 模型,交叉验证并使用 joblib 模块将其保存到文件中。现在我想加载这个模型并用它预测新数据。 这是正确的方法吗?尤其是标准化。我也应该对我的新数据使用 scaler.fit() 吗?在我遵循的教程中,scaler.fit 仅用于训练集,所以我在这里有点迷路。

这是我的代码:

#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

不,这是不正确的。所有数据准备步骤都应使用训练数据进行拟合。否则,您可能会应用错误的转换,因为 StandardScaler 估计的均值和方差在训练数据和测试数据之间可能存在差异。

同时训练、保存、加载和应用所有步骤的最简单方法是使用管道:

正在训练:

# prepare the pipeline
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.externals import joblib

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