一般来说,我对机器学习还比较陌生,希望将我的模型存储在云中,以便进行在线预测
我在Scikit learn Local(使用Jupyter笔记本)和Google AI平台(使用他们的培训工作功能)上成功地使用TfIdf vecotrizer(用于情绪分析)训练了一个逻辑回归模型
我必须提到,我在我的training package setup.py文件中包含了bs4、nltk、lxml,作为所需的PyPI包
我的训练算法是这样的:
将输入字符串及其标签(输出)的CSV文件作为数据帧导入(模型有一个输入变量,即字符串)。
使用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_
我可以使用
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格式不正确
谢谢你的帮助
好吧,我发现JSON格式确实格式不正确(回答时间:https://stackoverflow.com/a/51693619/10570541)
正如官方文档所述,JSON格式有新行和方括号来分隔实例,例如:
如果您有多个输入变量,则适用于此
对于一个输入变量,只需使用换行符即可
相关问题 更多 >
编程相关推荐