在SageMaker中使用RCF算法如何获取每个数据点的异常分数?
SageMaker RCF 异常检测:获取每个数据点的异常分数
Hey there! Let's break this down for you clearly:
为什么只得到单个异常分数?
你之前拿到的单个分数并不是平均分数,问题出在输入格式不符合SageMaker内置RCF算法的推理要求。
当你用" ".join(apple_stock_volumes)把所有成交量数据用空格拼成一行时,RCF会把这整行当成一个多维度的单一样本(而非4个独立的单维度样本),所以模型只会输出这个单一样本的异常分数。
如何获取每个数据点的对应分数?
正如你后来发现的,对于股票成交量这类单维度时间序列数据,SageMaker RCF要求每个数据点单独占一行。这样算法才会把每一行识别为一个独立样本,进而输出每个样本对应的异常分数。
修正后的代码如下:
import boto3 import json apple_stock_volumes = [123412, 465125, 237564, 238172] def inference(): client = boto3.client('sagemaker-runtime') # 将每个数据点转为字符串后用换行符拼接 body = "\n".join(map(str, 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()
运行这段代码后,你会得到包含4个异常分数的结果,格式类似{'scores': [{'score': 0.xxx}, {'score': 0.xxx}, {'score': 0.xxx}, {'score': 0.xxx}]},刚好对应每个输入的成交量数据点。
额外提示
拿到每个数据点的异常分数后,你就可以计算分数的均值和标准差,当某个数据点的分数超出设定阈值(比如均值+2倍标准差)时,就能触发你的告警逻辑,完全匹配你的初始需求。
内容的提问来源于stack exchange,提问作者A.S.
相关产品推荐
相关产品推荐

