TDengine 中 TDgp 中添加算法模型(异常检测)

异常检测

输入约定

execute 是算法处理的核心方法。框架调用该方法之前,在对象属性参数 self.list 中已经设置完毕用于异常检测的时间序列数据。

输出约定

execute 方法执行完成后的返回值是长度与 self.list 相同的数组,数组位置 -1 的标识异常值点。

例如:对于输入测量值序列 2 , 2 , 2 , 2 , 100 2, 2, 2, 2, 100 2,2,2,2,100,假设 100 是异常点,那么方法返回的结果数组则为 1 , 1 , 1 , 1 , − 1 1, 1, 1, 1, -1 1,1,1,1,−1

示例代码

下面我们开发一个示例异常检测算法,在异常检测中,将输入时间序列值的最后一个值设置为异常值,并返回结果。

python 复制代码
from taosanalytics.service import AbstractAnomalyDetectionService

# 算法实现类名称 需要以下划线 "_" 开始,并以 Service 结束
class _MyAnomalyDetectionService(AbstractAnomalyDetectionService):
    """ 定义类,从 AbstractAnomalyDetectionService 继承,并实现 AbstractAnomalyDetectionService 类的抽象方法  """

    # 定义算法调用关键词,全小写 ASCII 码
    name = 'myad'

    # 该算法的描述信息 (建议添加)
    desc = """return the last value as the anomaly data"""

    def __init__(self):
        """类初始化方法"""
        super().__init__()

    def execute(self):
        """ 算法逻辑的核心实现"""

        """创建一个长度为 len(self.list),全部值为 1 的结果数组,然后将最后一个值设置为 -1,表示最后一个值是异常值"""
        res = [1] * len(self.list)
        res[-1] = -1

        """返回结果数组"""
        return res

	
    def set_params(self, params):
        """该算法无需任何输入参数,直接重载父类该函数,不处理算法参数设置逻辑"""
        return super().set_params(params)

将该文件保存在 ./lib/taosanalytics/algo/ad/ 目录下,然后重启 taosanode 服务。在 TDengine CLI 中执行 SHOW ANODES FULL 就能够看到新加入的算法,然后就可以通过 SQL 语句调用该算法。

SQL 复制代码
--- 对 col 列进行异常检测,通过指定 algo 参数为 myad 来调用新添加的异常检测类
SELECT COUNT(*) FROM foo ANOMALY_WINDOW(col, 'algo=myad')

如果是第一次启动该 Anode, 请按照 TDgpt 安装部署 里的步骤先将该 Anode 添加到 TDengine 系统中。

单元测试

在测试目录 taosanalytics/test 中的 anomaly_test.py 中增加单元测试用例或添加新的测试文件。框架中使用了 Python Unit test 包。

python 复制代码
def test_myad(self):
    """ 测试 _IqrService 类 """
    s = loader.get_service("myad")

    # 设置需要进行检测的输入数据
    s.set_input_list(AnomalyDetectionTest.input_list, None)

    r = s.execute()

    # 最后一个点是异常点
    self.assertEqual(r[-1], -1)
    self.assertEqual(len(r), len(AnomalyDetectionTest.input_list))
相关推荐
xieliyu.8 小时前
MySQL 存储过程详解:概念、创建与删除全教程
开发语言·数据库·mysql
晓子文集8 小时前
Tushare接口文档:期货交易日历(fut_trade_cal)
大数据·算法
老胡全房源系统8 小时前
可以买断的房产中介ERP系统
大数据
ttwuai8 小时前
AI 生成后台删除按钮后,MySQL 软删除和唯一索引怎么验
数据库·mysql·golang
张人玉8 小时前
基于 Vue 3 + ECharts + Express + SQLite 构建的新能源汽车销量数据分析与可视化平台——新能源汽车销量数据分析系统
数据库·vue.js·sqlite·echarts
2601_963870178 小时前
【计算机毕业设计】基于Spring Boot的社区老年大学课程报名与学习系统的设计与实现
java·spring boot·学习
llwszx8 小时前
【Java/Go后端手撸原生Agent(第七篇):Token预算管理 + 滑动窗口上下文裁剪】
java·后端·python·agent开发·上下文工程·上下文裁剪·滑动窗口裁剪
专业工业电源打工人9 小时前
F0505S-2WR3 适配优选 钡特电源 DF2-05S05LS|2W 隔离 DC-DC 模块电源5V转5V硬件选型参数规格解析
大数据·网络·人工智能
^yi9 小时前
【Linux系统编程】进程状态的理解
算法·僵尸进程·孤儿进程·进程状态·挂起状态·阻塞状态
暖和_白开水9 小时前
数据分析agent(九-2):es启动补充
大数据·elasticsearch·搜索引擎