如何在python中使用保存模型进行预测

时间:2015-12-03 15:17:45

标签: python-2.7 scikit-learn nltk prediction

我在python中进行文本分类,我想在生产环境中使用它来对新文档进行预测。我正在使用TfidfVectorizer来构建bagofWord。

我在做:

X_train = vectorizer.fit_transform(clean_documents_for_train, classLabel).toarray()

然后我正在进行交叉验证并使用SVM构建模型。之后我保存模型。

为了对我的测试数据进行预测,我正在另一个脚本中加载该模型,其中我有相同的TfidfVectorizer,我知道我不能对我的测试数据进行fit_transform。我必须这样做:

X_test = vectorizer.transform(clean_test_documents, classLabel).toarray()

但这是不可能的,因为我必须先适应。我知道有办法。我可以加载我的训练数据并像我在构建模型时那样执行fit_transform,但我的训练数据非常大,每次我想预测我都不能这样做。所以我的问题是:

  • 我可以在测试数据上使用TfidfVectorizer并执行预测吗?
  • 还有其他方法可以进行预测吗?

3 个答案:

答案 0 :(得分:4)

矢量图是模型的一部分。保存训练好的SVM模型时,还需要保存相应的矢量图。

为了使这更方便,您可以使用Pipeline构建单个“fittable”对象,该对象表示将原始输入转换为预测输出所需的步骤。在这种情况下,管道由Tf-Idf提取器和SVM分类器组成:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn import svm
from sklearn.pipeline import Pipeline

vectorizer = TfidfVectorizer()
clf = svm.SVC()
tfidf_svm = Pipeline([('tfidf', vectorizer), ('svc', clf)])

documents, y = load_training_data()
tfidf_svm.fit(documents, y)

这样,只需要保留一个对象:

from sklearn.externals import joblib
joblib.dump(tfidf_svm, 'model.pkl')

要在测试文档上应用模型,请加载训练好的管道,并像往常一样使用predict函数作为输入。

答案 1 :(得分:2)

我根据搜索“如何使用已保存的模型进行预测?”重定向到这里。所以只是添加到YS-L的答案,最后一步。

保存模型

from sklearn.externals import joblib
joblib.dump(fittedModel, 'name.model')

加载已保存的模型并预测

fittedModel = joblib.load('name.model')
fittedModel.predict(X_new)  # X_new is unseen example to be predicted

答案 2 :(得分:0)

你可以简单地将clf.predict与.apply和lambda

一起使用
datad['Predictions']=datad['InputX'].apply(lambda x: unicode(clf.predict(count_vect.transform([x]))))