您可以使用 Microsoft Azure ML 服务执行有效载荷日志、反馈日志,并测量性能准确性、运行时偏差检测、可解释性和模型评估的自动纠偏功能。
模型评估支持以下 Microsoft Azure Machine Learning 服务框架:
表 1. 框架支持详细信息
框架 | 问题类型 | 数据类型 |
---|---|---|
本机 | 分类 | 结构化 |
scikit-learn | 分类 | 结构化 |
scikit-learn | 回归 | 结构化 |
要生成漂移检测模型,必须在 Notebook 中使用 scikit-learn V0.20.2。
Azure自动化Machine Learning管理端点和Azure模型通过笔记本进行管理,以便进行模型评估。
添加Microsoft AzureML 服务
您可以使用以下方法之一配置模型评估,以便与Microsoft AzureML 服务配合使用:
- 首次添加机器学习提供程序时,可以使用配置界面。 有关更多信息,请参阅指定 Microsoft Azure ML Service 实例。
- 还可以使用 Python SDK 添加机器学习提供程序。 如果要拥有多个提供程序,必须使用此方法。 有关更多信息,请参阅添加 Microsoft Azure 机器学习引擎。
调用与AzureML 服务交互所需的各种 REST 端点。 为此,您必须绑定Azure Machine Learning服务。
- 创建 Azure Active Directory 服务主体。
- 通过用户界面或PythonSDK 添加AzureML 服务绑定时,指定证书详细信息。
JSON 请求和响应文件的需求
要使模型评估与AzureML 服务配合使用,您创建的网络服务部署必须满足某些要求。 根据以下需求,您创建的 Web 服务部署必须接受 JSON 请求并返回 JSON 响应。
必需的 Web 服务 JSON 请求格式
- REST API 请求主体必须是包含 JSON 对象的一个 JSON 数组的 JSON 文档
- JSON 数组必须名为
"input"
。 - 每个 JSON 对象只能包含简单的键值对,其中值可以为字符串、数字、
true
、false
或null
- 值不能是 JSON 对象或数组
- 数组中的每个 JSON 对象都必须指定相同的键(并从而指定相同的键数),无论是否存在非
null
值
以下样本 JSON 文件满足前述需求,并可用作模板来创建您自己的 JSON 请求文件:
{
"input": [
{
"field1": "value1",
"field2": 31,
"field3": true,
"field4": 2.3
},
{
"field1": "value2",
"field2": 15,
"field3": false,
"field4": 0.1
},
{
"field1": null,
"field2": 5,
"field3": true,
"field4": 6.1
}
]
}
必需的 Web 服务 JSON 响应格式
创建 JSON 响应文件时,记录以下项:
REST API 响应主体必须是包含 JSON 对象的一个 JSON 数组的 JSON 文档
JSON 数组必须名为
"output"
。每个 JSON 对象只能包含键值对,其中值可以为字符串、数字、
true
、false
、null
或者一个不包含任何其他 JSON 对象或数组的数组值不能是 JSON 对象
数组中的每个 JSON 对象都必须指定相同的键(以及键数),无论是否存在非
null
值对于分类模型:Web 服务必须为每个类别返回概率数组,并且概率的顺序对于数组中的每个 JSON 对象必须一致
- 示例:假设您有一个预测信用风险的二元分类模型,其中类别为
Risk
或No Risk
- 对于“output”数组中返回的每个结果,对象必须包含键/值对,其中含有固定顺序的概率,格式如下:
{ "output": [ { "Scored Probabilities": ["Risk" probability,"No Risk" probability ] }, { "Scored Probabilities": ["Risk" probability,"No Risk" probability ] } ]
- 示例:假设您有一个预测信用风险的二元分类模型,其中类别为
要与 Azure ML Studio 和 Azure ML Service 中使用的 Azure ML 可视工具一致,请使用以下键名:
- 表示模型预测值的输出键的键名
"Scored Labels"
- 表示每个类的概率数组的输出键的键名
"Scored Probabilities"
以下样本 JSON 文件满足前述需求,并可用作模板来创建您自己的 JSON 响应文件:
{
"output": [
{
"Scored Labels": "No Risk",
"Scored Probabilities": [
0.8922524675865824,
0.10774753241341757
]
},
{
"Scored Labels": "No Risk",
"Scored Probabilities": [
0.8335192848546905,
0.1664807151453095
]
}
]
}
样本 Notebook
以下 Notebook 显示如何使用 Microsoft Azure ML Service:
指定 Microsoft Azure ML Service 实例
配置模型评估的第一步是指定Microsoft AzureML 服务实例。 Azure ML Service 实例是存储 AI 模型和部署的位置。
人工智能模型和部署连接在AzureML 服务实例中,用于模型评估。 要连接您的服务,请转到配置"选项卡,添加机器学习提供程序,然后点击编辑"图标。 除了名称和描述以及环境是预生产还是生产之外,还必须提供以下信息:
- 客户机标识:客户机标识的实际字符串值,用于验证您的身份并认证和授权您对 Azure Service 发出的调用。
- 客户机私钥:私钥的实际字符串值,用于验证您的身份并认证和授权您对 Azure Service 发出的调用。
- 租户:您的租户标识对应于您的组织,并且是 Azure AD 的专用实例。 要查找租户标识,请将鼠标悬停在帐户名称上以获取目录和租户标识,或者在 Azure 门户网站中选择 Azure Active Directory > Properties> Directory ID。
- 预订标识:用于唯一识别您的 Microsoft Azure 预订的预订凭证。 每个服务调用的 URI 中的预订 IDforms 部分。
请参阅 How to: Use the portal to create an Azure AD application and service principal that can access resources,以了解有关如何获取 Microsoft Azure 凭证的指示信息。
现在您已准备好选择已部署模型并配置监视器。 您部署的模型会出现在Insights仪表板上,您可以单击添加到仪表板。 选中要监视的部署,然后单击配置。
有关更多信息,请参阅配置监视器。
Microsoft Azure ML Service 引擎的有效内容日志记录
添加 Microsoft Azure ML Service 引擎
IBMIBMwatsonx.aiRuntime 引擎绑定为自定义,由元数据组成。 IBMIBMwatsonx.aiRuntime 服务没有直接集成。
service_type = "azure_machine_learning_service"
added_service_provider_result = wos_client.service_providers.add(
name=SERVICE_PROVIDER_NAME,
description=SERVICE_PROVIDER_DESCRIPTION,
service_type = service_type,
credentials=AzureCredentials(
subscription_id= AZURE_ENGINE_CREDENTIALS['subscription_id'],
client_id = AZURE_ENGINE_CREDENTIALS['client_id'],
client_secret= AZURE_ENGINE_CREDENTIALS['client_secret'],
tenant = AZURE_ENGINE_CREDENTIALS['tenant']
),
background_mode=False
).result
可以使用以下命令查看服务绑定:
client.service_providers.list()
样本输出:
uid name service_type created
410e730f-8462-45fe-8b41-a029d6d6043a My Azure ML Service engine azure_machine_learning_service2019-06-10T22:10:29.398Z
添加 Microsoft Azure ML Service 预订
添加预订
asset_deployment_details = wos_client.service_providers.list_assets(data_mart_id=data_mart_id, service_provider_id=service_provider_id).result
asset_deployment_details
deployment_id=''
for model_asset_details in asset_deployment_details['resources']:
if model_asset_details['metadata']['guid']==deployment_id:
break
azure_asset = Asset(
asset_id=model_asset_details["entity"]["asset"]["asset_id"],
name=model_asset_details["entity"]["asset"]["name"],
url=model_asset_details["entity"]["asset"]["url"],
asset_type=model_asset_details['entity']['asset']['asset_type'] if 'asset_type' in model_asset_details['entity']['asset'] else 'model',
input_data_type=InputDataType.STRUCTURED,
problem_type=ProblemType.BINARY_CLASSIFICATION
)
deployment_scoring_endpoint = model_asset_details['entity']['scoring_endpoint']
scoring_endpoint = ScoringEndpointRequest(url = model_asset_details['entity']['scoring_endpoint']['url'],request_headers = model_asset_details['entity']['scoring_endpoint']['request_headers'],
credentials = None)
deployment = AssetDeploymentRequest(
deployment_id=model_asset_details['metadata']['guid'],
url=model_asset_details['metadata']['url'],
name=model_asset_details['entity']['name'],
description=model_asset_details['entity']['description'],
deployment_type=model_asset_details['entity']['type'],
scoring_endpoint = scoring_endpoint
)
asset_properties = AssetPropertiesRequest(
label_column="Risk ",
prediction_field='Scored Labels',
probability_fields=['Scored Probabilities'],
training_data_reference=training_data_reference,
training_data_schema=None,
input_data_schema=None,
output_data_schema=None,
)
subscription_details = wos_client.subscriptions.add(
data_mart_id=data_mart_id,
service_provider_id=service_provider_id,
asset=azure_asset,
deployment=deployment,
asset_properties=asset_properties,
background_mode=False
).result
获取预订列表
subscription_id = subscription_details.metadata.id
subscription_id
details: wos_client.subscriptions.get(subscription_id).result.to_dict()
启用有效内容日志记录
启用预订中的有效内容日志记录
payload_data_set_id = None
payload_data_set_id = wos_client.data_sets.list(type=DataSetTypes.PAYLOAD_LOGGING,
target_target_id=subscription_id,
target_target_type=TargetTypes.SUBSCRIPTION).result.data_sets[0].metadata.id
获取日志记录详细信息
subscription.payload_logging.get_details()
评分和有效内容日志记录
对模型评分。 有关完整示例,请参阅使用 Azure Machine Learning Service 引擎 Notebook。
在有效内容日志记录表中存储请求和响应:
wos_client.data_sets.store_records(data_set_id=payload_data_set_id, request_body=[PayloadRecord(
scoring_id=str(uuid.uuid4()),
request=request_data,
response=response_data,
response_time=460
)])
对于非 Python 语言,还可以使用 REST API 记录有效内容。
上级主题: 受支持的机器学习引擎,框架和模型