加载并预测新数据sklearn

时间:2017-11-21 15:41:11

标签: python machine-learning scikit-learn logistic-regression joblib

我训练了一个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

1 个答案:

答案 0 :(得分:16)

不,这是不正确的。应使用列车数据拟合所有数据准备步骤。否则,您冒着应用错误转换的风险,因为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
相关问题