如何在 python 中使用保存模型进行预测
How to use save model for prediction in python
我正在 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 并执行预测吗?
- 还有其他预测方法吗?
向量化器是您模型的一部分。当您保存训练好的 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
函数并将原始文档作为输入。
根据搜索 "How to use saved model for prediction?",我被重定向到这里。所以只是为了添加到 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
您可以简单地将 clf.predict 与 .apply 和 lambda
一起使用
datad['Predictions']=datad['InputX'].apply(lambda x: unicode(clf.predict(count_vect.transform([x]))))
我正在 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 并执行预测吗?
- 还有其他预测方法吗?
向量化器是您模型的一部分。当您保存训练好的 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
函数并将原始文档作为输入。
根据搜索 "How to use saved model for prediction?",我被重定向到这里。所以只是为了添加到 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
您可以简单地将 clf.predict 与 .apply 和 lambda
一起使用datad['Predictions']=datad['InputX'].apply(lambda x: unicode(clf.predict(count_vect.transform([x]))))