当前位置: 首页 > news >正文

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]

示例代码

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

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 resdef set_params(self, params):"""该算法无需任何输入参数,直接重载父类该函数,不处理算法参数设置逻辑"""return super().set_params(params)

将该文件保存在 ./lib/taosanalytics/algo/ad/ 目录下,然后重启 taosanode 服务。在 TDengine CLI 中执行 SHOW ANODES FULL 就能够看到新加入的算法,然后就可以通过 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 包。

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))
http://www.dtcms.com/a/308150.html

相关文章:

  • 【生活篇】Ubuntu22.04安装网易云客户端
  • 河南萌新联赛2025第(三)场:河南理工大学(补题)
  • .NET 10 中的新增功能系列文章3—— .NET MAUI 中的新增功能
  • gen_compile_commands.sh
  • elk部署加日志收集
  • 网络爬虫(python)入门
  • webpack-babel
  • 开发避坑短篇(11):Oracle DATE(7)到MySQL时间类型精度冲突解决方案
  • uniapp x swiper/image组件mode=“aspectFit“ 图片有的闪现后黑屏
  • Vue多请求并行处理实战指南
  • 【qiankun】基于vite的qiankun微前端框架下,子应用的静态资源无法加载的问题
  • [硬件电路-111]:滤波的分类:模拟滤波与数字滤波; 无源滤波与有源滤波;低通、带通、带阻、高通滤波;时域滤波与频域滤波;低价滤波与高阶滤波。
  • 2025做美业还有前景吗?博弈美业系统带来美业市场分析
  • rustdesk 1.4.1版本全解析:新增功能、性能优化与多平台支持详解
  • 【机器学习】KNN算法与模型评估调优
  • 深度学习批量矩阵乘法实战解析:torch.bmm
  • 【科普】在STM32中有哪些定时器?
  • 【Golang】用官方rate包构造简单IP限流器
  • 【STM32】HAL库中的实现(二):串口(USART)/看门狗(IWDG/WWDG)/定时器(TIM)
  • 三格——环网式CAN光纤中继器进行光纤冗余环网组网测试
  • 工业绝缘监测仪:保障工业电气安全的关键防线
  • C# 枚举器和迭代器(常见迭代器模式)
  • 26考研|数学分析:重积分
  • ubuntu24.04环境下树莓派Pico C/C++ SDK开发环境折腾记录
  • 设计模式:命令模式 Command
  • AI驱动下的数据新基建:腾讯游戏数据资产治理与湖仓架构革新
  • 【数据结构入门】时间、空间复杂度的计算
  • 装修风格怎么选
  • LoggerFactory(日志门面框架核心工厂类)详解
  • 【普中STM32精灵开发攻略】--第 1 章 如何使用本攻略