gpt4 book ai didi

python - 从 Google Cloud ML-Engine 上部署的 SCIKITLEARN 模型进行预测

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:52 25 4
gpt4 key购买 nike

我创建了一个用于欺诈检测的机器学习模型:

实际模型代码的一小段如下:

from sklearn.metrics import classification_report, accuracy_score
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor

# define a random state
state = 1

# define the outlier detection method
classifiers = {
"Isolation Forest": IsolationForest(max_samples=len(X),
contamination=outlier_fraction,
random_state=state),
"Local Outlier Factor": LocalOutlierFactor(
n_neighbors = 20,
contamination = outlier_fraction)
}
import pickle
# fit the model
n_outliers = len(Fraud)

for i, (clf_name, clf) in enumerate(classifiers.items()):

# fit te data and tag outliers
if clf_name == "Local Outlier Factor":
y_pred = clf.fit_predict(X)
# Export the classifier to a file
with open('model.pkl', 'wb') as model_file:
pickle.dump(clf, model_file)
scores_pred = clf.negative_outlier_factor_
else:
clf.fit(X)
scores_pred = clf.decision_function(X)
y_pred = clf.predict(X)
# Export the classifier to a file
with open('model.pkl', 'wb') as model_file:
pickle.dump(clf, model_file)

# Reshape the prediction values to 0 for valid and 1 for fraudulent
y_pred[y_pred == 1] = 0
y_pred[y_pred == -1] = 1

n_errors = (y_pred != Y).sum()

# run classification metrics
print('{}:{}'.format(clf_name, n_errors))
print(accuracy_score(Y, y_pred ))
print(classification_report(Y, y_pred ))

我已经在 Google Cloud Platform 上成功创建了存储桶、ml 模型和版本。但是作为 ml world 的初学者,我很困惑,我如何将输入传递给这个模型以获得真实的预测,因为这个模型现在部署在谷歌的 ML-Engine 上。

Update: As stated in the N3da's answer, now I'm using this code for online prediction:

import os
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

PROJECT_ID = "PROJECT_ID"
VERSION_NAME = "VERSION"
MODEL_NAME = "MODEL_NAME"
credentials = GoogleCredentials.get_application_default()
service = discovery.build('ml', 'v1', credentials=credentials)
name = 'projects/{}/models/{}'.format(PROJECT_ID, MODEL_NAME)
name += '/versions/{}'.format(VERSION_NAME)

data = {
"instances": [
[265580, 7, 68728, 8.36, 4.76, 84.12, 79.36, 3346, 1, 11.99, 1.14,
655012, 0.65, 258374, 0, 84.12],
]
}

response = service.projects().predict(
name=name,
body={'instances': data}
).execute()

if 'error' in response:
print (response['error'])
else:
online_results = response['predictions']
print(online_results)

但它返回访问错误为:

googleapiclient.errors.HttpError: https://ml.googleapis.com/v1/projects/PROJECT_ID/models/MODEL_NAME/versions/VERSION:predict?alt=json returned "Access to model denied.">

请帮帮我!

最佳答案

成功创建Version 后,您可以使用gcloud 工具或发送http 请求来获取在线预测。来自 this ,这里是一个从 python 代码发送 http 请求的例子:

service = googleapiclient.discovery.build('ml', 'v1')
name = 'projects/{}/models/{}'.format(PROJECT_ID, MODEL_NAME)
name += '/versions/{}'.format(VERSION_NAME)

response = service.projects().predict(
name=name,
body={'instances': data}
).execute()

if 'error' in response:
print (response['error'])
else:
online_results = response['predictions']
上例中的

data 是一个列表,其中每个元素都是您的模型接受的一个实例。 Here是关于预测请求和响应的更多信息。

更新:对于您提到的权限问题,了解最初创建模型和版本的方式/位置(通过 gcloud、UI 控制台、笔记本电脑等)会有所帮助。错误消息表明您的用户可以访问您的项目,但不是模型。尝试从运行 Python 代码的任何位置运行 gcloud auth login,并确认它显示为默认项目的项目与您的 PROJECT_ID 匹配。

关于python - 从 Google Cloud ML-Engine 上部署的 SCIKITLEARN 模型进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49974030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com