【发布时间】:2019-12-08 12:22:18
【问题描述】:
总的来说,我对机器学习还很陌生,我想将我的模型存储在云中,以便进行在线预测。
我使用 Jupyter Notebook 在本地 Scikit-learn 上使用 TfIdf vecotrizer(用于情绪分析)成功地训练了一个逻辑回归模型,并使用他们的 Training Job 功能在 Google AI Platform 上成功训练了一个逻辑回归模型。
我必须提到,我在培训包 setup.py 文件中包含了 bs4、nltk、lxml 作为所需的 PyPI 包。
我的训练算法是这样的:
将输入字符串及其标签(输出)的 CSV 文件导入为 pandas 数据框(模型有 1 个输入变量,即字符串。)
使用 bs4 和 nltk 预处理输入字符串,以删除不必要的字符、停用词,并使所有字符变为小写(要重现这一点,只需使用仅小写字母的字符串)。
-
创建管道
from sklearn.feature_extraction.text import TfidfVectorizer tvec=TfidfVectorizer() lclf = LogisticRegression(fit_intercept = False, random_state = 255, max_iter = 1000) from sklearn.pipeline import Pipeline model_1= Pipeline([('vect',tvec),('clf',lclf)]) -
使用 GridSearchCV 进行交叉验证
from sklearn.model_selection import GridSearchCV param_grid = [{'vect__ngram_range' : [(1, 1)], 'clf__penalty' : ['l1', 'l2'], 'clf__C' : [1.0, 10.0, 100.0]}, {'vect__ngram_range' : [(1, 1)], 'clf__penalty' : ['l1', 'l2'], 'clf__C' : [1.0, 10.0, 100.0], 'vect__use_idf' : [False], 'vect__norm' : [False]}] gs_lr_tfidf = GridSearchCV(model_1, param_grid, scoring='accuracy', cv=5, verbose=1, n_jobs=-1) gs_lr_tfidf.fit(X_train, y_train) -
以最佳估计获得我想要的模型。这是保存在 Google model.joblib 文件中的模型。
clf = gs_lr_tfidf.best_estimator_
我可以使用
在我的 Jupyter Notebook 文件上输出一个简单的预测predicted = clf.predict(["INPUT STRING"])
print(predicted)
它为我的输入字符串打印预测标签。如['good']或['bad']
但是当模型成功训练并提交到 AI 平台时,当我尝试请求预测时,例如(以所需的 JSON 格式):
["the quick brown fox jumps over the lazy dog"]
["hi what is up"]
shell 返回此错误:
{
"error": "Prediction failed: Exception during sklearn prediction:
'numpy.ndarray' object has no attribute 'lower'"
}
这里可能出了什么问题?
这可能是依赖项的问题,我也必须在我的 google 托管模型中安装 bs4、lxml 和 nltk 的软件包吗?
还是我输入的 JSON 格式不正确?
感谢您的帮助。
【问题讨论】:
标签: python scikit-learn google-cloud-platform google-prediction