Ale*_*gan 8 python scikit-learn google-cloud-platform google-cloud-ml
Google Cloud ML-engine支持部署scikit-learn Pipeline对象的功能.例如,文本分类Pipeline可能如下所示,
classifier = Pipeline([
('vect', CountVectorizer()),
('clf', naive_bayes.MultinomialNB())])
Run Code Online (Sandbox Code Playgroud)
分类器可以训练,
classifier.fit(train_x, train_y)
Run Code Online (Sandbox Code Playgroud)
然后可以将分类器上传到Google云端存储,
model = 'model.joblib'
joblib.dump(classifier, model)
model_remote_path = os.path.join('gs://', bucket_name, datetime.datetime.now().strftime('model_%Y%m%d_%H%M%S'), model)
subprocess.check_call(['gsutil', 'cp', model, model_remote_path], stderr=sys.stdout)
Run Code Online (Sandbox Code Playgroud)
然后,Model并且Version可以被创建,或者通过谷歌云端控制台,或编程,连接'model.joblib'文件中Version.
然后,可以通过调用已部署的模型predict端点将此分类器用于预测新数据,
ml = discovery.build('ml','v1')
project_id = 'projects/{}/models/{}'.format(project_name, model_name)
if version_name is not None:
project_id += '/versions/{}'.format(version_name)
request_dict = {'instances':['Test data']}
ml_request = ml.projects().predict(name=project_id, body=request_dict).execute()
Run Code Online (Sandbox Code Playgroud)
Google Cloud ML引擎调用predict分类器的功能并返回预测的类.但是,我希望能够返回置信度分数.通常这可以通过调用predict_probaclassier 的函数来实现,但似乎没有更改被调用函数的选项.我的问题是:在使用Google Cloud ML引擎时,是否可以返回scikit-learn分类器的置信度分数?如果没有,您是否有任何关于如何实现这一结果的建议?
更新:
我找到了一个hacky解决方案.它涉及predict用自己的predict_proba函数覆盖分类器的功能,
nb = naive_bayes.MultinomialNB()
nb.predict = nb.predict_proba
classifier = Pipeline([
('vect', CountVectorizer()),
('clf', nb)])
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是这有效.如果有人知道更简洁的解决方案,请告诉我.
您正在使用的 ML Engine API 仅具有预测方法,如您在文档中看到的因此它只会进行预测(除非您通过您提到的 hack 强制它执行其他操作)。
\n\n如果您想对训练后的模型执行其他操作,您\xe2\x80\x99 必须加载它并正常使用它。如果您想使用存储在 Cloud Storage 中的模型,您可以执行以下操作:
\n\nfrom google.cloud import storage\nfrom sklearn.externals import joblib\n\nbucket_name = "<BUCKET_NAME>"\ngs_model = "path/to/model.joblib" # path in your Cloud Storage bucket\nlocal_model = "/path/to/model.joblib" # path in your local machine\n\nclient = storage.Client()\nbucket = client.get_bucket(bucket_name)\nblob = bucket.blob(gs_model)\nblob.download_to_filename(local_model)\n\nmodel = joblib.load(local_model)\nmodel.predict_proba(test_data)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
466 次 |
| 最近记录: |