IoTDB组件AI Node发布9个月,如何使用你了解了吗?

news2024/11/15 9:48:43

122c434e22cb04a1010ffe904572d333.jpeg

数据 x AI +,第一批用户已认可!

在工业智能化转型中,时序数据库与 AI 技术的结合对故障和异常预测场景的准确性和效率至关重要,逐渐成为行业前沿关注热点。在此方面,IoTDB 已迈出支持 AI 深度分析的重要一步,于 2023 年 12 月 3 日 IoTDB 用户大会上推出了内生机器学习节点 AINode

AINode 的设计允许用户通过简单的 SQL 语句引入和运行外部机器学习模型,将模型的创建、管理及推理成功融合在数据库引擎中,极大地简化了时序分析任务的同时,大幅扩展了对时序数据进行机器学习分析的能力,其易用性与性能表现广受用户好评。

通过深入探讨 AINode 在工业应用中的案例及效果,并详解应用的具体场景与步骤,本文将让你更加全面地了解 IoTDB 的数据分析核心 AINode。

01 应用案例

我们先来看几个 AINode 赋能工业预测场景的案例:

(1)电力负载预测

在部分工业场景下,会存在预测电力负载的需求,预测结果可用于优化电力供应、节约能源和资源、支持规划和扩展以及增强电力系统的可靠性。

我们所使用的 ETTh1 的测试集的数据包含间隔 1h 采集一次的电力数据,每条数据由负载和油温构成,分别为:High UseFul Load, High UseLess Load, Middle UseLess Load, Low UseFul Load, Low UseLess Load, Oil Temperature。

在该数据集上,IoTDB-ML 的模型推理功能可以通过以往高中低三种负载的数值和对应时间戳油温的关系,预测未来一段时间内的油温,赋能电网变压器的自动调控和监视。

步骤一:数据导入

用户可以使用 tools 文件夹中的 import-csv.sh 向 IoTDB 中导入 ETT 数据集:

bash ./import-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -f ../../ETTh1.csv

步骤二:模型导入

我们可以在 iotdb-cli 中输入以下 SQL 从 huggingface 上拉取一个已经训练好的模型进行注册,用于后续的推理。

create model dlinear using uri 'https://huggingface.co/hvlgo/dlinear/resolve/main'

该模型基于较为轻量化的深度模型 DLinear 训练而得,能够以相对快的推理速度尽可能多地捕捉到序列内部的变化趋势和变量间的数据变化关系,相较于其他更深的模型更适用于快速实时预测。

步骤三:模型推理
IoTDB> select s0,s1,s2,s3,s4,s5,s6 from root.eg.etth LIMIT 96
+-----------------------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+
|                         Time|root.eg.etth.s0|root.eg.etth.s1|root.eg.etth.s2|root.eg.etth.s3|root.eg.etth.s4|root.eg.etth.s5|root.eg.etth.s6|
+-----------------------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+
|2017-10-20T00:00:00.000+08:00|         10.449|          3.885|          8.706|          2.025|          2.041|          0.944|          8.864|
|2017-10-20T01:00:00.000+08:00|         11.119|          3.952|          8.813|           2.31|          2.071|          1.005|          8.442|
|2017-10-20T02:00:00.000+08:00|          9.511|           2.88|          7.533|          1.564|          1.949|          0.883|           8.16|
|2017-10-20T03:00:00.000+08:00|          9.645|           2.21|          7.249|          1.066|          1.828|          0.914|          7.949|
......
|2017-10-23T20:00:00.000+08:00|          8.105|          0.938|          4.371|         -0.569|          3.533|          1.279|          9.708|
|2017-10-23T21:00:00.000+08:00|          7.167|          1.206|          4.087|         -0.462|          3.107|          1.432|          8.723|
|2017-10-23T22:00:00.000+08:00|            7.1|           1.34|          4.015|          -0.32|          2.772|           1.31|          8.864|
|2017-10-23T23:00:00.000+08:00|          9.176|          2.746|          7.107|          1.635|           2.65|          1.097|          9.004|
+-----------------------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+
Total line number = 96


IoTDB> call inference(dlinear_example, "select s0,s1,s2,s3,s4,s5,s6 from root.eg.etth", window=head(96))
+-----------+----------+----------+------------+---------+----------+----------+
|    output0|   output1|   output2|     output3|  output4|   output5|   output6|
+-----------+----------+----------+------------+---------+----------+----------+
|  10.319546| 3.1450553|  7.877341|   1.5723765|2.7303758| 1.1362307|  8.867775|
|  10.443649| 3.3286757| 7.8593454|   1.7675098| 2.560634| 1.1177158|  8.920919|
|  10.883752| 3.2341104|   8.47036|   1.6116762|2.4874182| 1.1760603|  8.798939| 
......
|  8.0115595| 1.2995274| 6.9900327|-0.098746896|  3.04923|  1.176214|  9.548782|
|   8.612427| 2.5036244| 5.6790237|  0.66474205|2.8870275| 1.2051733|  9.330128|
|  10.096699|  3.399722|    6.9909|   1.7478468|2.7642853| 1.1119363|  9.541455|
+-----------+----------+----------+------------+---------+----------+----------+
Total line number = 48

我们将对油温的预测的结果和真实结果进行对比,可以得到以下的图像。

图中 10/24 00:00 之前的数据为输入模型的过去数据,10/24 00:00 后的黄色线条为模型给出的油温预测结果,而蓝色为数据集中实际的油温数据(用于进行对比)。

3d0ae0af359801a86d2e667435ce60a6.png

可以看到,我们使用了过去 96 个小时(4 天)的六个负载信息和对应时间油温的关系,基于之前学习到的序列间相互关系对未来 48 个小时(2 天)的油温这一数据的可能变化进行了建模,可以看到可视化后预测曲线与实际结果在趋势上保持了较高程度的一致性。

(2)变电站功率预测

变电站需要对电流、电压、功率等数据进行电力监控,用于检测潜在的电网问题、识别电力系统中的故障、有效管理电网负载以及分析电力系统的性能和趋势等。

我们利用某变电站中的电流、电压和功率等数据构成了真实场景下的数据集。该数据集包括变电站近四个月时间跨度,每 5 - 6s 采集一次的 A 相电压、B 相电压、C 相电压等数据。

在该数据集上,IoTDB-ML 的模型推理功能可以通过以往 A 相电压,B 相电压和 C 相电压的数值和对应时间戳,预测未来一段时间内的 C 相电压,赋能变电站的监视管理。

步骤一:数据导入

用户可以使用 tools 文件夹中的 import-csv.sh 导入数据集:

bash ./import-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -f ../../data.csv

步骤二:模型导入

我们可以在 iotdb-cli 中输入以下 SQL 从 huggingface 上拉取一个已经训练好的模型进行注册,用于后续的推理。

create model patchtst using uri 'https://huggingface.co/hvlgo/patchtst/resolve/main'

我们采用深度模型 PatchTST 进行预测,PatchTST 是一种基于 transformer 的时序预测模型,在长时间序列预测任务中有出色的表现。

步骤三:模型推理
IoTDB> select * from root.eg.voltage limit 96
+-----------------------------+------------------+------------------+------------------+
|                         Time|root.eg.voltage.s0|root.eg.voltage.s1|root.eg.voltage.s2|
+-----------------------------+------------------+------------------+------------------+
|2023-02-14T20:38:32.000+08:00|            2038.0|            2028.0|            2041.0|
|2023-02-14T20:38:38.000+08:00|            2014.0|            2005.0|            2018.0|
|2023-02-14T20:38:44.000+08:00|            2014.0|            2005.0|            2018.0|
......
|2023-02-14T20:47:52.000+08:00|            2024.0|            2016.0|            2027.0|
|2023-02-14T20:47:57.000+08:00|            2024.0|            2016.0|            2027.0|
|2023-02-14T20:48:03.000+08:00|            2024.0|            2016.0|            2027.0|
+-----------------------------+------------------+------------------+------------------+
Total line number = 96


IoTDB> call inference(patchtst, "select s0,s1,s2 from root.eg.voltage", window=head(96))
+---------+---------+---------+
|  output0|  output1|  output2|
+---------+---------+---------+
|2013.4113|2011.2539|2010.2732|
|2013.2792| 2007.902|2035.7709|
|2019.9114|2011.0453|2016.5848|
......
|2018.7078|2009.7993|2017.3502|
|2033.9062|2010.2087|2018.1757|
|2022.2194| 2011.923|2020.5442|
|2022.1393|2023.4688|2020.9344|
+---------+---------+---------+
Total line number = 48

我们将对 C 相电压的预测的结果和真实结果进行对比,可以得到以下的图像。

图中 01/25 14:33 之前的数据为输入模型的过去数据,01/25 14:33 后的黄色线条为模型给出的 C 相电压预测结果,而蓝色为数据集中实际的 A 相电压数据(用于进行对比)。

024796ea27fdf05d4f3721b7a6c5d52a.png

可以看到,我们使用了过去 8 分钟的电压的数据,基于之前学习到的序列间相互关系对未来 4 分钟的 A 相电压这一数据的可能变化进行了建模,可以看到可视化后预测曲线与实际结果在趋势上保持了较高程度的同步性。

(3)交通运输异常预测

在民航交通运输业,存在着对乘机旅客数量进行异常检测的需求。异常检测的结果可用于指导调整航班的调度,以使得企业获得更大效益。

Airline Passengers 是一个时间序列数据集,该数据集记录了 1949 年至 1960 年期间国际航空乘客数量,间隔一个月进行一次采样。该数据集共含一条时间序列。

在该数据集上,IoTDB-ML 的模型推理功能可以通过捕捉序列的变化规律以对序列时间点进行异常检测,赋能交通运输业。

步骤一:数据导入

用户可以使用 tools 文件夹中的 import-csv.sh 导入数据集:

bash ./import-csv.sh -h 127.0.0.1 -p 6667 -u root -pw root -f ../../data.csv

步骤二:模型推理

IoTDB 内置有部分可以直接使用的机器学习算法,使用其中的异常检测算法进行预测的样例如下:

IoTDB> select * from root.eg.airline
+-----------------------------+------------------+
|                         Time|root.eg.airline.s0|
+-----------------------------+------------------+
|1949-01-31T00:00:00.000+08:00|             224.0|
|1949-02-28T00:00:00.000+08:00|             118.0|
|1949-03-31T00:00:00.000+08:00|             132.0|
|1949-04-30T00:00:00.000+08:00|             129.0|
......
|1960-09-30T00:00:00.000+08:00|             508.0|
|1960-10-31T00:00:00.000+08:00|             461.0|
|1960-11-30T00:00:00.000+08:00|             390.0|
|1960-12-31T00:00:00.000+08:00|             432.0|
+-----------------------------+------------------+
Total line number = 144


IoTDB> call inference(_Stray, "select s0 from root.eg.airline", k=2)
+-------+
|output0|
+-------+
|      0|
|      0|
|      0|
|      0|
......
|      1|
|      1|
|      0|
|      0|
|      0|
|      0|
+-------+
Total line number = 144

我们将检测为异常的结果进行绘制,可以得到以下图像。其中蓝色曲线为原时间序列,用红色点特殊标注的时间点为算法检测为异常的时间点。

48ed5393fbef20abaa36b1d00274d941.png

可以看到,Stray 模型对输入序列变化进行了建模,成功检测出出现异常的时间点。

02 使用指导

通过上述案例,我们可以看到,AINode 能够有效支持工业场景所需的数据预测、异常检测等场景,并具备出色的性能表现。

接下来我们将详细指导如何使用 AINode。AINode 对时序数据相关的深度学习模型提供了模型创建及删除的流程,内置模型无需创建及删除,可直接使用,并且在完成推理后创建的内置模型实例将自动销毁。

(1)注册模型

通过指定模型输入输出的向量维度,可以注册训练好的深度学习模型,从而用于模型推理。下方为模型注册的 SQL 语法定义。

create model <model_name> using uri <uri>

SQL 中参数的具体含义如下:

  • model_name:模型的全局唯一标识,不可重复。模型名称具备以下约束:

    • 允许出现标识符 [ 0-9 a-z A-Z _ ](字母,数字,下划线)

    • 长度限制为 2-64 字符

    • 大小写敏感

  • uri:模型注册文件的资源路径,路径下应包含模型权重 model.pt 文件和模型的元数据描述文件 config.yaml

    • 模型权重文件:深度学习模型训练完成后得到的权重文件,目前支持 pytorch 训练得到的 .pt 文件

    • yaml 元数据描述文件:模型注册时需要提供的与模型结构有关的参数,其中必须包含模型的输入输出维度用于模型推理:

51f209181d7c98b48abf6cd4da88faa6.png

  • 除了模型推理外,还可以指定模型输入输出的数据类型:

a81411d042ae24bd6fc95815da44c1e8.png

  • 除此之外,可以额外指定备注信息用于在模型管理时进行展示:

55d1dfcb1197194fb27829c76d55d7ef.png

除了本地模型文件的注册,还可以通过 URI 来指定远程资源路径来进行注册,使用开源的模型仓库(例如 HuggingFace)。

示例

在当前的 example 文件夹下,包含 model.pt 和 config.yaml 文件,model.pt 为训练得到,config.yaml 的内容如下:

configs:
    # 必选项
    input_shape: [96, 2]      # 表示模型接收的数据为96行x2列
    output_shape: [48, 2]     # 表示模型输出的数据为48行x2列


    # 可选项 默认为全部float32,列数为shape对应的列数
    input_type: ["int64","int64"] #输入对应的数据类型,需要与输入列数匹配
    output_type: ["text","int64"] #输出对应的数据类型,需要与输出列数匹配
    
attributes:           # 可选项 为用户自定义的备注信息
   'model_type': 'dlinear'
   'kernel_size': '25'

指定该文件夹作为加载路径就可以注册该模型:

IoTDB> create model dlinear_example using uri "file://./example"

也可以从 huggingFace 上下载对应的模型文件进行注册:

create model dlinear_example using uri "https://huggingface.com/IoTDBML/dlinear/"

SQL 执行后会异步进行注册的流程,可以通过模型展示查看模型的注册状态(见模型展示章节),注册成功的耗时主要受到模型文件大小的影响。

模型注册完成后,就可以通过使用正常查询的方式调用具体函数,进行模型推理。

(2)查看模型

注册成功的模型可以通过 show models 指令查询模型的具体信息。其 SQL 定义如下:

show models
show models <model_name>

除了直接展示所有模型的信息外,可以指定 model id 来查看某一具体模型的信息。模型展示的结果中包含如下信息:

7964d21b86322c75f94a0990ac5a0f5c.png

其中,State 用于展示当前模型注册的状态,包含以下四个阶段:

  • LOADING:已经在 configNode 中添加对应的模型元信息,正将模型文件传输到 AINode 节点上

  • ACTIVE模型已经设置完成,模型处于可用状态

  • DROPPING:模型删除中,正在从 configNode 以及 AINode 处删除模型相关信息

  • UNAVAILABLE: 模型创建失败,可以通过 drop model 删除创建失败的 model_name。

示例
IoTDB> show models
+---------------------+--------------------------+-----------+----------------------------+-----------------------+
|              ModelId|                 ModelType|      State|                     Configs|                  Notes|
+---------------------+--------------------------+-----------+----------------------------+-----------------------+
|      dlinear_example|              USER_DEFINED|     ACTIVE|           inputShape:[96,2]|                       |
|                     |                          |           |          outputShape:[48,2]|                       |
|                     |                          |           | inputDataType:[float,float]|                       |
|                     |                          |           |outputDataType:[float,float]|                       | 
|       _STLForecaster|         BUILT_IN_FORECAST|     ACTIVE|                            |Built-in model in IoTDB|
|     _NaiveForecaster|         BUILT_IN_FORECAST|     ACTIVE|                            |Built-in model in IoTDB|
|               _ARIMA|         BUILT_IN_FORECAST|     ACTIVE|                            |Built-in model in IoTDB|
|_ExponentialSmoothing|         BUILT_IN_FORECAST|     ACTIVE|                            |Built-in model in IoTDB|
|         _GaussianHMM|BUILT_IN_ANOMALY_DETECTION|     ACTIVE|                            |Built-in model in IoTDB|
|              _GMMHMM|BUILT_IN_ANOMALY_DETECTION|     ACTIVE|                            |Built-in model in IoTDB|
|               _Stray|BUILT_IN_ANOMALY_DETECTION|     ACTIVE|                            |Built-in model in IoTDB|
+---------------------+--------------------------+-----------+----------------------------+-----------------------+

我们前面已经注册了对应的模型,可以通过对应的指定查看模型状态,active 表明模型注册成功,可用于推理。

(3)删除模型

对于注册成功的模型,用户可以通过 SQL 进行删除。该操作除了删除 configNode 上的元信息外,还会删除所有 AINode 下的相关模型文件。其 SQL 如下:

drop model <model_name>

需要指定已经成功注册的模型 model_name 来删除对应的模型。由于模型删除涉及多个节点上的数据删除,操作不会立即完成,此时模型的状态为 DROPPING,该状态的模型不能用于模型推理。

(4)使用内置模型推理

SQL 语法如下:

call inference(<built_in_model_name>,sql[,<parameterName>=<parameterValue>])

内置模型推理无需注册流程,通过 call 关键字,调用 inference 函数就可以使用模型的推理功能,其对应的参数介绍如下:

  • built_in_model_name内置模型名称

  • parameterName:参数名

  • parameterValue:参数值

内置模型及参数说明

目前已内置如下机器学习模型:

ed1f325225f23e139b471d871020751f.png

示例

下面是使用内置模型推理的一个操作示例,使用内置的 Stray 模型进行异常检测算法,输入为 [144,1],输出为 [144,1],我们通过 SQL 使用其进行推理。

IoTDB> select * from root.eg.airline
+-----------------------------+------------------+
|                         Time|root.eg.airline.s0|
+-----------------------------+------------------+
|1949-01-31T00:00:00.000+08:00|             224.0|
|1949-02-28T00:00:00.000+08:00|             118.0|
|1949-03-31T00:00:00.000+08:00|             132.0|
|1949-04-30T00:00:00.000+08:00|             129.0|
......
|1960-09-30T00:00:00.000+08:00|             508.0|
|1960-10-31T00:00:00.000+08:00|             461.0|
|1960-11-30T00:00:00.000+08:00|             390.0|
|1960-12-31T00:00:00.000+08:00|             432.0|
+-----------------------------+------------------+
Total line number = 144


IoTDB> call inference(_Stray, "select s0 from root.eg.airline", k=2)
+-------+
|output0|
+-------+
|      0|
|      0|
|      0|
|      0|
......
|      1|
|      1|
|      0|
|      0|
|      0|
|      0|
+-------+
Total line number = 144

(5)使用深度学习模型推理

SQL 语法如下:

call inference(<model_name>,sql[,window=<window_function>])


window_function:
    head(window_size)
    tail(window_size)
    count(window_size,sliding_step)

在完成模型的注册后,通过 call 关键字,调用 inference 函数就可以使用模型的推理功能,其对应的参数介绍如下:

  • model_name对应一个已经注册的模型

  • sql:sql 查询语句,查询的结果作为模型的输入进行模型推理。查询的结果中行列的维度需要与具体模型 config 中指定的大小相匹配。(这里的 sql 不建议使用 SELECT * 子句,因为在 IoTDB 中,* 并不会对列进行排序,因此列的顺序是未定义的,可以使用 SELECT s0,s1 的方式确保列的顺序符合模型输入的预期)

  • window_function推理过程中可以使用的窗口函数,目前提供三种类型的窗口函数用于辅助模型推理:

    • head(window_size)获取数据中最前的 window_size 个点用于模型推理,该窗口可用于数据裁剪

da3854d3250aa5fcf3b7367b6838d9d5.png

    • tail(window_size):获取数据中最后的 window_size 个点用于模型推,该窗口可用于数据裁剪

ee2f50a9aa9f6e5c3a91ca347674b0e9.png

    • count(window_size, sliding_step):基于点数的滑动窗口,每个窗口的数据会分别通过模型进行推理,如下图示例所示,window_size 为 2 的窗口函数将输入数据集分为三个窗口,每个窗口分别进行推理运算生成结果。该窗口可用于连续推理

c2ef41c78b064e7dabdca3e9433ab47b.png

说明 1: window 可以用来解决 sql 查询结果和模型的输入行数要求不一致时的问题,对行进行裁剪。需要注意的是,当列数不匹配或是行数直接少于模型需求时,推理无法进行,会返回错误信息。

说明 2: 在深度学习应用中,经常将时间戳衍生特征(数据中的时间列)作为生成式任务的协变量,一同输入到模型中以提升模型的效果,但是在模型的输出结果中一般不包含时间列。为了保证实现的通用性,模型推理结果只对应模型的真实输出,如果模型不输出时间列,则结果中不会包含。

示例

下面是使用深度学习模型推理的一个操作示例,针对上面提到的输入为 [96,2],输出为 [48,2] 的 dlinear 预测模型,我们通过 SQL 使用其进行推理。

IoTDB> select s1,s2 from root.**
+-----------------------------+-------------------+-------------------+
|                         Time|    root.eg.etth.s0|    root.eg.etth.s1|
+-----------------------------+-------------------+-------------------+
|1990-01-01T00:00:00.000+08:00|             0.7855|              1.611|
|1990-01-02T00:00:00.000+08:00|             0.7818|               1.61|
|1990-01-03T00:00:00.000+08:00|             0.7867|             1.6293|
|1990-01-04T00:00:00.000+08:00|              0.786|              1.637|
|1990-01-05T00:00:00.000+08:00|             0.7849|              1.653|
|1990-01-06T00:00:00.000+08:00|             0.7866|             1.6537|
|1990-01-07T00:00:00.000+08:00|             0.7886|              1.662|
......
|1990-03-31T00:00:00.000+08:00|             0.7585|              1.678|
|1990-04-01T00:00:00.000+08:00|             0.7587|             1.6763|
|1990-04-02T00:00:00.000+08:00|               0.76|             1.6813|
|1990-04-03T00:00:00.000+08:00|             0.7669|              1.684|
|1990-04-04T00:00:00.000+08:00|             0.7645|              1.677|
|1990-04-05T00:00:00.000+08:00|             0.7625|               1.68|
|1990-04-06T00:00:00.000+08:00|             0.7617|             1.6917|
+-----------------------------+-------------------+-------------------+
Total line number = 96


IoTDB> call inference(dlinear_example,"select s0,s1 from root.**")
+--------------------------------------------+-----------------------------+
|                                   _result_0|                    _result_1|
+--------------------------------------------+-----------------------------+
|                           0.726302981376648|           1.6549958229064941|
|                          0.7354921698570251|           1.6482787370681763|
|                          0.7238251566886902|           1.6278168201446533|
......
|                          0.7692174911499023|            1.654654049873352|
|                          0.7685555815696716|           1.6625318765640259|
|                          0.7856493592262268|           1.6508299350738525|
+--------------------------------------------+-----------------------------+
Total line number = 48

使用 tail/head 窗口函数的示例

当数据量不定且想要取 96 行最新数据用于推理时,可以使用对应的窗口函数 tail。head 函数的用法与其类似,不同点在于其取的是最早的 96 个点。

IoTDB> select s1,s2 from root.**
+-----------------------------+-------------------+-------------------+
|                         Time|    root.eg.etth.s0|    root.eg.etth.s1|
+-----------------------------+-------------------+-------------------+
|1988-01-01T00:00:00.000+08:00|             0.7355|              1.211|
......
|1990-01-01T00:00:00.000+08:00|             0.7855|              1.611|
|1990-01-02T00:00:00.000+08:00|             0.7818|               1.61|
|1990-01-03T00:00:00.000+08:00|             0.7867|             1.6293|
|1990-01-04T00:00:00.000+08:00|              0.786|              1.637|
|1990-01-05T00:00:00.000+08:00|             0.7849|              1.653|
|1990-01-06T00:00:00.000+08:00|             0.7866|             1.6537|
|1990-01-07T00:00:00.000+08:00|             0.7886|              1.662|
......
|1990-03-31T00:00:00.000+08:00|             0.7585|              1.678|
|1990-04-01T00:00:00.000+08:00|             0.7587|             1.6763|
|1990-04-02T00:00:00.000+08:00|               0.76|             1.6813|
|1990-04-03T00:00:00.000+08:00|             0.7669|              1.684|
|1990-04-04T00:00:00.000+08:00|             0.7645|              1.677|
|1990-04-05T00:00:00.000+08:00|             0.7625|               1.68|
|1990-04-06T00:00:00.000+08:00|             0.7617|             1.6917|
+-----------------------------+-------------------+-------------------+
Total line number = 996


IoTDB> call inference(dlinear_example,"select s0,s1 from root.**",window=tail(96))
+--------------------------------------------+-----------------------------+
|                                   _result_0|                    _result_1|
+--------------------------------------------+-----------------------------+
|                           0.726302981376648|           1.6549958229064941|
|                          0.7354921698570251|           1.6482787370681763|
|                          0.7238251566886902|           1.6278168201446533|
......
|                          0.7692174911499023|            1.654654049873352|
|                          0.7685555815696716|           1.6625318765640259|
|                          0.7856493592262268|           1.6508299350738525|
+--------------------------------------------+-----------------------------+
Total line number = 48

使用 count 窗口函数的示例

该窗口主要用于计算式任务,当任务对应的模型一次只能处理固定行数据而最终想要的确实多组预测结果时,使用该窗口函数可以使用点数滑动窗口进行连续推理。假设我们现在有一个异常检测模型 anomaly_example(input: [24,2], output[1,1]),对每行数据会生成一个 0/1 的标签,其使用示例如下:

IoTDB> select s1,s2 from root.**
+-----------------------------+-------------------+-------------------+
|                         Time|    root.eg.etth.s0|    root.eg.etth.s1|
+-----------------------------+-------------------+-------------------+
|1990-01-01T00:00:00.000+08:00|             0.7855|              1.611|
|1990-01-02T00:00:00.000+08:00|             0.7818|               1.61|
|1990-01-03T00:00:00.000+08:00|             0.7867|             1.6293|
|1990-01-04T00:00:00.000+08:00|              0.786|              1.637|
|1990-01-05T00:00:00.000+08:00|             0.7849|              1.653|
|1990-01-06T00:00:00.000+08:00|             0.7866|             1.6537|
|1990-01-07T00:00:00.000+08:00|             0.7886|              1.662|
......
|1990-03-31T00:00:00.000+08:00|             0.7585|              1.678|
|1990-04-01T00:00:00.000+08:00|             0.7587|             1.6763|
|1990-04-02T00:00:00.000+08:00|               0.76|             1.6813|
|1990-04-03T00:00:00.000+08:00|             0.7669|              1.684|
|1990-04-04T00:00:00.000+08:00|             0.7645|              1.677|
|1990-04-05T00:00:00.000+08:00|             0.7625|               1.68|
|1990-04-06T00:00:00.000+08:00|             0.7617|             1.6917|
+-----------------------------+-------------------+-------------------+
Total line number = 96


IoTDB> call inference(anomaly_example,"select s0,s1 from root.**",window=count(24,24))
+-------------------------+
|                _result_0|
+-------------------------+
|                        0|
|                        1|
|                        1|
|                        0|
+-------------------------+
Total line number = 4

其中结果集中的每行的标签对应 16 行输入对应的模型输出。

03 总结

本文梳理了 IoTDB 中 AINode 的基本概念,应用场景示例及使用教程,对于希望实现故障/异常预测业务场景智能化分析的工业用户,AINode 支持让时序数据与机器学习、模型分析领域的技术成果更好地结合,为用户提供更深入、多样的数据分析方法

更多 AINode 相关功能信息,可点击用户手册:内生机器学习框架(AINode)_天谋IoTDB 进一步了解,欢迎联系我们获取更多信息!

规上企业应用实例

能源电力:中核武汉|国网信通产业集团|华润电力|大唐先一|上海电气国轩|清安储能|太极股份|绍兴安瑞思

航天航空:中航机载共性|北邮一号卫星

钢铁冶炼:宝武钢铁|中冶赛迪

交通运输:中车四方|长安汽车|城建智控|德国铁路

智慧工厂与物联:PCB 龙头企业|博世力士乐|德国宝马|京东|昆仑数据|怡养科技

d33d85be9311d649c46c85eb383ae3e4.gif

568ea69412c66bedc41ae76d586bd984.jpeg

f377f5703110dc7d48f1c78c44e5f173.jpeg

5d2fb3e46f0be90f108e3ee3688918e2.jpeg

69aa79ce844e99a1e4b1834da2710012.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1990387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

240806-在Linux/RHEL开机中自动启动bash脚本

A. 常规方法 要在Red Hat Enterprise Linux (RHEL) 中设置开机启动的bash脚本&#xff0c;可以使用以下方法之一&#xff1a; 方法1&#xff1a;使用/etc/rc.d/rc.local 打开/etc/rc.d/rc.local文件&#xff1a; sudo vi /etc/rc.d/rc.local在文件末尾添加你想要执行的bash脚…

Plus机型成为历史?iPhone 17系列带来全新阵容

苹果公司一直以来都是科技创新的领航者&#xff0c;每一次新品发布都会引发全球消费者的热烈关注。据最新消息&#xff0c;苹果计划于2024年秋季推出全新的iPhone 17系列&#xff0c;这一代iPhone将以其独特的设计、卓越的性能和创新的功能再次刷新人们对智能手机的认知。 一、…

【算法设计题】基于front、rear和count的循环队列初始化、入队和出队操作,第6题(C/C++)

目录 第3题 基于front、rear和count的循环队列初始化、入队和出队操作 得分点&#xff08;必背&#xff09; 题解&#xff1a;基于front、rear和count的循环队列初始化、入队和出队操作 数据结构定义 代码解答 详细解释 1. 循环队列初始化 2. 循环队列入队 3. 循环队列…

分库分表的使用场景和中间件

文章目录 一、为什么要分库分表&#xff1f;分库分表的使用场景&#xff1f;二、分库分表常用中间件1、Cobar2、TDDL3、Atlas4、Sharding-jdbc5、Mycat6、总结 一、为什么要分库分表&#xff1f;分库分表的使用场景&#xff1f; 场景1&#xff1a;注册用户就 20 万&#xff0c…

1.4 C 程序的编译过程与 CLion 调试技巧

目录 1 程序的编译过程 1.1 编写源代码 1.2 预处理&#xff08;Preprocessing&#xff09; 1.3 编译&#xff08;Compilation&#xff09; 1.4 汇编&#xff08;Assembly&#xff09; 1.5 链接&#xff08;Linking&#xff09; 1.6 执行 2 编译过程的输入输出文件概览 …

7-1 深度学习硬件:CPU和GPU

L 3 L3 L3、 L 2 L2 L2、 L 1 L1 L1为cache&#xff0c;数据只有进入寄存器的时候&#xff0c;才能开始运算。 &#xff08;此图错误&#xff0c;一个矩阵应该是按行存储的&#xff01;&#xff09; GPU的核要远远多于CPU&#xff0c;从而TFLOPS&#xff0c;GPU每秒能做的…

Vue3.0与Echarts5

1.课程介绍与目标 有句话说的好“一图胜千言”&#xff0c;在我们开发的领域就是说&#xff0c;在对于复杂难懂且体量庞大的数据展示上面而言&#xff0c;图表的信息量要大得多&#xff0c;这也是我们为什么要谈数据可视化。https://notes.xiyankt.com/#/echarts/echarts​ stu…

深入理解 Apollo Client 的缓存策略

前言 上一篇文章&#xff1a;Nextjs 使用 graphql&#xff0c;并且接入多个节点 介绍了如何接入 graphql&#xff0c;并且使用 Apollo client 来请求和操作数据。后面深入了解了一下其缓存策略&#xff0c;想着有必要整理出来&#xff0c;作为后续学习。有任何问题还请批评指正…

八股之Java基础

注&#xff1a;本文部分内容源自Java 面试指南 | JavaGuide 一、基础概念与常识 1.JVM、JDK、JRE JVM&#xff1a;Java Virtual Machine&#xff0c;虚拟机&#xff0c;运行Java字节码&#xff0c;实现Java的平台无关性 JDK&#xff1a;Java Development Kit&#xff0c;Ja…

PwnLab: init-文件包含、shell反弹、提权--靶机渗透思路讲解

Vulnhub靶机链接回【PwnLab】 首页有一个登录框 image-20240807124822770 他没有验证码&#xff0c;我们试试暴力破解 image-20240807122743025 开始爆破了&#xff0c;全部失败&#xff0c;哈哈哈 image-20240807122851001 nmap全端口扫描试试 image-20240807131408315 有…

无法访问jakarta.servlet.http.HttpServletRequest

1、问题 无法访问jakarta.servlet.http.HttpServletRequest2、原因 JDK1.8升级到高版本后&#xff0c;需要手动引入jakarta.servlet-api 3、解决 增加依赖 <dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</ar…

6.2.面向对象技术-UML图

UML UML事物关系依赖关联聚合组合 泛化实现 类图对象图用例图序列图通信图状态图活动图构件图部署图练习题 UML 上午选择题3-4分&#xff0c;下午案例分析必考 UML是统一建模语言&#xff0c;和程序设计语言并无关系。 UML三个要素&#xff1a;UML的基本构造块、支配这些构造…

代码随想录算法训练营第二十一天 | 77. 组合, 216.组合总和III , 17.电话号码的字母组合

目录 77. 组合 思路 回溯法三部曲 方法一&#xff1a; 回溯未剪枝 方法二&#xff1a;回溯剪枝 心得收获 216.组合总和III 思路 方法一&#xff1a;回溯-没有使用sum来统计path里元素的总和 方法二&#xff1a;回溯&#xff0c;使用sum来保存当前路径上的总和 心得…

如何应用OceanBase 的实时SQL诊断,解决AP场景下的痛点

随着数据量的快速增长与用户需求的变化&#xff0c;数据库的管理与优化工作日益凸显其重要性。作为DBA及开发者&#xff0c;您是否曾面临以下挑战&#xff1a; ○ 分析场景下&#xff0c;在处理大规模数据的且耗时较长的查询是&#xff0c;常涉及海量数据的处理及复杂的计算&…

Python 设计模式之工厂函数模式

文章目录 案例基本案例逐渐复杂的案例 问题回顾什么是工厂模式&#xff1f;为什么会用到工厂函数模式&#xff1f;工厂函数模式和抽象工厂模式有什么关系&#xff1f; 工厂函数模式是一种创建型设计模式&#xff0c;抛出问题&#xff1a; 什么是工厂函数模式&#xff1f;为什么…

Vue3学习笔记第一天

MVVM Vue是一种用于构建用户界面的JavaScript框架。MVVM 是Vue采用的一种软件架构模式&#xff0c;用于构建交互式的用户界面。它的全称是 Model-View-ViewModel&#xff0c;这三个部分分别代表了应用程序的不同层次和角色&#xff1a; Model&#xff08;模型&#xff09;&…

【ARM】v8架构programmer guide(3)_ARMv8的寄存器

目录 4.ARMv8 registers 4.1 AArch64 特殊寄存器 4.1.1 Zero register 4.1.2 Stack pointer &#xff08;SP) 4.1.3 Program Counter &#xff08;PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register &#xff08;SPSR&#xff09; 4.2 Proc…

性能测试基础概念

前言&#x1f440;~ 上一章我们介绍了单元测试Junit的使用&#xff0c;今天我们来讲解一下性能测试的一些基础概念为后面我们进行性能测试做铺垫 什么是性能测试&#xff1f; 性能测试和功能测试有什么区别&#xff1f; 影响一个软件性能因素有哪些&#xff1f; 为什么要进…

循环神经网络和自然语言处理一

目录 一.分词 1.分词工具 2.分词的方法 3.N-gram表示方法 二.向量化 1.one-hot编码 2.word embedding 3.word embedding API 4.数据形状改变 既然是自然语言&#xff0c;那么就有字&#xff0c;词&#xff0c;句了 一.分词 1.分词工具 tokenization&#xff0c;jie…

Outlook Pst文件大小最大多大?如何分开缩减?

簡介 預設情況下&#xff0c;personal Folders (.pst) 和離線 Outlook Data File (.ost) 檔案在 Microsoft Outlook 2010 和 Outlook 2013 中為 Unicode 格式。 .pst 和 .ost 檔案的整體大小有 50 GB 的預先設定限制。 此限制大於 2007 和 Outlook 2003 Outlook Unicode .pst …