首页 文章

加载并预测新数据sklearn

提问于
浏览
2

我训练了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 回答

  • 12

    不,这是不正确的 . 应使用列车数据拟合所有数据准备步骤 . 否则,您冒着应用错误转换的风险,因为估算的均值和方差可能在列车和测试数据之间有所不同 .

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

    At training

    # 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')
    

    At prediction

    #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
    

相关问题