amazon-web-services - 获取 SageMaker 中每个数据点的异常分数?
问题描述
我对 SageMaker 非常陌生,对于如何实现我正在寻找的输出,我遇到了一些困惑。我目前正在尝试使用内置的 RCF 算法对库存量列表执行异常检测,如下所示:
apple_stock_volumes = [123412, 465125, 237564, 238172]
我已经创建了一个训练作业、模型和端点,现在我正在尝试使用 boto3 调用端点。我当前的代码如下所示:
apple_stock_volumes = [123412, 465125, 237564, 238172]
def inference():
client = boto3.client('sagemaker-runtime')
body = " ".join(apple_stock_volumes)
response = client.invoke_endpoint(
EndpointName='apple-volume-endpoint',
Body=body,
ContentType='text/csv'
)
inference = json.loads(response['Body'].read())
print(inference)
inference()
我想要的是获得每个数据点的异常分数,然后提醒异常分数是否比平均值高几个标准差。但是,我实际上收到的只是一个异常分数。以下是我的输出:
{'scores': [{'score': 0.7164874384}]}
谁能向我解释这里发生了什么?这是平均异常分数吗?为什么我似乎无法让 SageMaker 输出与我的数据相对应的异常分数列表?提前致谢!
编辑:我已经在去年的历史卷数据 csv 上训练了模型,并且我创建了一个端点来命中。
编辑 2:我接受了@maafk 的回答,尽管我的问题的实际答案是在他的一条评论中提供的。我缺少的部分是每个数据点必须在您的 csv 输入到端点的新行上。一旦我替换body = " ".join(apple_stock_volumes)
,body = "\n".join(apple_stock_volumes)
一切都按预期工作。
解决方案
在您的情况下,您需要从历史库存量中获取分数的标准偏差,并通过计算来确定您的异常分数是多少3 * standard deviation
更新您的代码以一次对多条记录进行推理
apple_stock_volumes = [123412, 465125, 237564, 238172]
def inference():
client = boto3.client('sagemaker-runtime')
body = "\n".join(apple_stock_volumes). # New line for each record
response = client.invoke_endpoint(
EndpointName='apple-volume-endpoint',
Body=body,
ContentType='text/csv'
)
inference = json.loads(response['Body'].read())
print(inference)
inference()
这将返回一个分数列表
假设apple_stock_volumes_df
有你的卷和分数(在每条记录上运行推理之后):
score_mean = apple_stock_volumes_df['score'].mean()
score_std = apple_stock_volumes_df['score'].std()
score_cutoff = score_mean + 3*score_std
这里有一个很好的例子展示了这一点
推荐阅读
- python - 杀死敌人后如何添加血液粒子效果?
- python - 如何从文本文件中删除行?
- c# - .NET Core 3.1 中的“通过”控制器操作(获取和返回 JSON)
- vue.js - 为什么我的浏览器不能在 Vue 中使用 WebSockets 进行控制台日志记录?
- r - 新列表中的因子水平 (R)
- mule - 批量插入连接器获取当前索引的索引
- python - django-admin 中的自定义模型权限以编辑特定字段
- winapi - MSVS 2017:资源编辑器 RC2104:未定义的关键字或键名:TBS_NOTIFYBEFOREMOVE
- php - 安装“Laravel 电子商务主题和 CMS 管理面板”时,它给了我 404
- swiftui - 如何在模型类子属性更改时更新 SwiftUI 视图?