机器学习周报第五十七周 GATRes

news2024/11/16 10:52:09

文章目录

  • week56 HA-GNN
  • 摘要
  • Abstract
  • 一、大数据相关
    • 1. 单机zookeeper
    • 2. 与hbase对接的技术
      • 2.1 使用hive操作hbase——直接与hbase对接(非接口技术)
          • 使用 `pyhive` 操作 Hive
      • 2.2 mysql操作hbase(非接口技术)
          • 导出 HBase 数据到 MySQL
          • 导入 MySQL 数据到 HBase
      • 2.3 使用phoenix JDBC驱动
          • 安装 Phoenix JDBC 驱动
          • 创建 Phoenix 表映射到 HBase
          • 使用 JDBC 连接到 Phoenix
      • 2.4 使用 Python 操作 Phoenix
  • 二、文献阅读
    • 1. 题目
    • 2. Abstract
    • 3. 文献解读
      • 3.1 Introduce
      • 3.2 创新点
    • 4. 网络框架
      • 4.1 部分观测数据和真实模型评估
      • 4.2 将水网转换为图
        • 4.4 GATRes 框架
      • 4.5 GATRes
    • 5. 实验过程
    • 6.结论

week56 HA-GNN

摘要

本周阅读了题为Graph Neural Networks for Pressure Estimation in Water Distribution Systems的论文。这项研究融合了基于物理的建模与图神经网络(GNN)这一数据驱动的技术,旨在解决压力估计的问题。该工作的两大核心贡献如下:首先,通过采用一种针对随机传感器位置的训练方法,使GNN模型在面对传感器故障或位置变动时具备更强的适应能力。其次,提出了一种贴近实际应用的评估框架,该框架不仅纳入了真实的时间序列特征,还引入了噪声模拟,以此来反映现实环境中的不确定性因素。基于此,我们开发了一个先进的模型——带有残差连接的GAT,用于进行压力估计。实验结果显示,该模型在多个水分配网络(WDN)基准测试中超越了先前的研究成果,平均绝对误差降低了大约40%。

Abstract

This week’s weekly newspaper decodes the paper entitled Graph Neural Networks for Pressure Estimation in Water Distribution Systems. This work combines physics-based modeling with graph neural networks (GNN), a data-driven approach, to tackle the pressure estimation problem. It makes two primary contributions. First, training with a strategy that uses random sensor locations makes the GNN-based estimation model robust against changes in faulty sensor positions. Second, it introduces a realistic evaluation scheme that considers true temporal patterns and injects noise to simulate the inherent uncertainties of real-world scenarios. As a result, an advanced model, GAT with residual connections, is used for pressure estimation. The model outperforms previous research on several WDN benchmarks, reducing the average absolute error by about 40%.

一、大数据相关

1. 单机zookeeper

  1. 下载zookeeper基于清华镜像

  2. 上传至虚拟机并解压

    • tar -zxvf zookeeper -C $路径
  3. 转至解压目录下cd $路径

  4. 重命名mv -i zookeeper zookeeper

  5. 转至zk目录下cd zookeeper

  6. 转至配置目录下cd conf

  7. 复制样本配置文件cp zoo_sample.cfg zoo.cfg,复制后的才能作为运行时调用配置文件

    • 注:最后为服务器列表,server后的数字需要与hosts的最后一位相同

    • # The number of milliseconds of each tick
      tickTime=2000
      # The number of ticks that the initial 
      # synchronization phase can take
      initLimit=10
      # The number of ticks that can pass between 
      # sending a request and getting an acknowledgement
      syncLimit=5
      # the directory where the snapshot is stored.
      # do not use /tmp for storage, /tmp here is just 
      # example sakes.
      dataDir=/usr/local/soft/apache-zookeeper-3.9.2-bin/data
      dataLogDir=/usr/local/soft/apache-zookeeper-3.9.2-bin/log
      # the port at which the clients will connect
      clientPort=2181
      # the maximum number of client connections.
      # increase this if you need to handle more clients
      #maxClientCnxns=60
      #
      # Be sure to read the maintenance section of the 
      # administrator guide before turning on autopurge.
      # 授权监听所有ip
      quorumListenOnAllIPs=true
      # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
      #
      # The number of snapshots to retain in dataDir
      #autopurge.snapRetainCount=3
      # Purge task interval in hours
      # Set to "0" to disable auto purge feature
      #autopurge.purgeInterval=1
      server.1=node11:2888:3888
      server.2=node12:2888:3888
      server.3=node13:2888:3888
      
  8. 修改数据存储地址dataDir=/opt/module/zookeeper/zkData,任意路径均可

  9. 在文件home路径下创建日志文件夹mkdir logs

  10. /zookeeper/bin目录下执行./zkServer.sh start

    • 若出现授权相关问题,则分别为上述两个文件夹授权,同时为zkData下.pid文件授权
  11. 配置环境变量sudo vim ~/.bashrc

    • export ZK_HOME=/usr/local/zookeeper
    • export PATH=${ZK_HOME}/bin:$PATH
  12. 更新配置文件source ~/.bashrc

  13. 最后再运行./zkServer.sh start

2. 与hbase对接的技术

2.1 使用hive操作hbase——直接与hbase对接(非接口技术)

Hive 和 HBase 是两种不同的数据存储系统,它们各有侧重,但也可以通过一定的机制相互配合使用。Hive 主要用于批处理和数据仓库场景,而 HBase 则用于实时读写和存储大规模稀疏数据集。虽然它们各自有不同的用途,但在某些情况下,你可能需要在 Hive 和 HBase 之间进行数据交换。

Hive 与 HBase 的互操作性

  1. Hive on HBase

Hive 支持直接操作 HBase 表的方式,即所谓的“Hive on HBase”。这种方式下,Hive 表可以直接映射到 HBase 表,使得 Hive 能够像操作普通的 Hive 表一样操作 HBase 表。

  1. 创建 Hive 表映射到 HBase

要在 Hive 中创建一个映射到 HBase 表的 Hive 表,你需要使用特殊的存储处理程序(Storage Handler)以及指定 HBase 表的相关参数。

假设你有一个 HBase 表 example_table,它有一个列族 cf,你可以这样创建一个映射到这个 HBase 表的 Hive 表:

CREATE TABLE hive_hbase_table (
  row_key STRING,
  col1 STRING,
  col2 INT
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
  "hbase.columns.mapping" = ":key,cf:col1,cf:col2"
)
TBLPROPERTIES (
  "hbase.table.name" = "example_table"
);

这里的 hbase.columns.mapping 参数指定了 HBase 表中的列族和列如何映射到 Hive 表中的字段,hbase.table.name 指定了 HBase 表的名字。

使用 pyhive 操作 Hive
from pyhive import hive

# 连接到 Hive
conn = hive.Connection(host='localhost', port=10000, username='your_username')

# 创建游标
cursor = conn.cursor()

# 执行查询
cursor.execute("""
CREATE TABLE hive_hbase_table (
  row_key STRING,
  col1 STRING,
  col2 INT
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
  "hbase.columns.mapping" = ":key,cf:col1,cf:col2"
)
TBLPROPERTIES (
  "hbase.table.name" = "example_table"
);
""")

# 查询数据
cursor.execute("SELECT * FROM hive_hbase_table WHERE row_key = 'row1'")
results = cursor.fetchall()
for row in results:
    print(row)

# 关闭连接
conn.close()

通过上述方法,你可以在 Hive 中创建映射到 HBase 表的表,并通过 Python 脚本进行操作。这种方式可以实现 HBase 和 Hive 之间的数据共享和操作。如果需要进一步的帮助或遇到具体问题,请提供详细的错误信息或日志文件。

限制和注意事项

  1. 性能考量:虽然 Hive on HBase 可以实现数据的互操作,但由于 Hive 是一个批处理系统,而 HBase 是一个实时存储系统,因此在执行实时查询时可能会遇到性能瓶颈。
  2. 数据一致性:由于 Hive 和 HBase 有不同的事务模型,直接通过 Hive 操作 HBase 表可能会影响到数据的一致性和完整性。
  3. 兼容性:Hive on HBase 的支持在不同的 Hive 和 HBase 版本中可能存在差异,因此需要确保你的版本兼容。
  4. 可以使用hive的基于sql的接口技术操作hbase

2.2 mysql操作hbase(非接口技术)

MySQL 和 HBase 是两种不同的数据库系统,它们分别针对不同的应用场景设计。MySQL 是一个关系型数据库管理系统(RDBMS),主要用于结构化数据的存储和管理;而 HBase 是一个分布式的、面向列的 NoSQL 数据库,主要用于存储大规模稀疏数据集,并提供实时读写能力。

MySQL 与 HBase 的互操作性

尽管 MySQL 和 HBase 是两个独立的系统,但在某些情况下,你可能需要在这两个系统之间进行数据交换或实现某种程度的互操作。以下是一些常见的方法和技术来实现这一点:

  1. 使用 ETL 工具

ETL(Extract, Transform, Load)工具可以帮助你在不同的数据存储系统之间进行数据迁移。常用的 ETL 工具包括 Apache Nifi、Apache Sqoop、Apache Beam 等。

Apache Sqoop 是一个用于在 Hadoop 和传统的关系型数据库之间传输数据的工具。你可以使用 Sqoop 将 HBase 中的数据导入到 MySQL 中,反之亦然。

导出 HBase 数据到 MySQL
sqoop export \
--connect jdbc:mysql://localhost:3306/yourdb \
--username your_username \
--password your_password \
--table your_mysql_table \
--hbase-table your_hbase_table \
--fields-terminated-by '\001' \
--columns "row_key,cf:col1,cf:col2" \
--hbase-create-table
导入 MySQL 数据到 HBase
sqoop import \
--connect jdbc:mysql://localhost:3306/yourdb \
--username your_username \
--password your_password \
--table your_mysql_table \
--hbase-table your_hbase_table \
--fields-terminated-by '\001' \
--hbase-row-key row_key \
--hbase-create-table

总结

相较于hive,mysql具有更加成熟的接口技术,但两个是独立的系统,可能需要通过导入导出间接实现两者数据的沟通

2.3 使用phoenix JDBC驱动

一些桥接技术可以让你通过 SQL 接口访问 HBase,例如 Apache Phoenix。

Apache Phoenix 是一个 SQL 的接口层,它允许你使用标准的 JDBC 接口访问 HBase。这意味着你可以使用 SQL 语句来操作 HBase 表,就像操作关系型数据库一样。

安装 Phoenix JDBC 驱动
wget http://apache.claz.org/phoenix/phoenix-5.0.0-HBase-2.0/phoenix-5.0.0-HBase-2.0-client.jar
创建 Phoenix 表映射到 HBase
CREATE TABLE phoenix_table (
  row_key VARCHAR PRIMARY KEY,
  col1 VARCHAR,
  col2 INTEGER
) SALT_BUCKETS = 4;
使用 JDBC 连接到 Phoenix
import java.sql.*;

public class PhoenixExample {
    public static void main(String[] args) {
        try (Connection conn = DriverManager.getConnection("jdbc:phoenix:hadoop01,hadoop02,hadoop03:2181;/hbase;securityEnabled=false;ssl=false;auth=SIMPLE;principal=");
             Statement stmt = conn.createStatement()) {

            // 插入数据
            stmt.executeUpdate("UPSERT INTO phoenix_table (row_key, col1, col2) VALUES ('row1', 'value1', 1)");

            // 查询数据
            ResultSet rs = stmt.executeQuery("SELECT * FROM phoenix_table WHERE row_key = 'row1'");
            while (rs.next()) {
                System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getInt(3));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

虽然 MySQL 和 HBase 是不同的数据库系统,但你可以通过 ETL 工具(如 Apache Sqoop)或桥接技术(如 Apache Phoenix)实现它们之间的数据交换和一定程度的互操作。Apache Phoenix 特别适合那些希望使用 SQL 语句操作 HBase 数据的用户。

如果你需要在 Python 中操作 HBase 和 MySQL,可以使用相应的 Python 库,如 happybasepymysql。通过上述方法,你可以在不同数据库系统之间进行数据迁移和操作。如果需要进一步的帮助或遇到具体问题,请提供详细的错误信息或日志文件。

2.4 使用 Python 操作 Phoenix

如果你需要在 Python 中操作 Phoenix 表,可以使用 pymysql 或者 sqlalchemy 库来连接 Phoenix 并执行 SQL 语句。

import pymysql

# 连接到 Phoenix
conn = pymysql.connect(
    host='hadoop01',
    port=2181,
    database='/hbase',
    user='',
    password='',
    connect_timeout=5,
    ssl={'enabled': False},
    auth_plugin='PLAIN'
)

二、文献阅读

1. 题目

标题:Graph Neural Networks for Pressure Estimation in Water Distribution Systems

作者:Huy Truong, Andrés Tello, Alexander Lazovik, and Victoria Degeler

发布:Water Resources Research

链接:doi:10.1029/2023WR036741

2. Abstract

这项工作结合了基于物理的建模和图神经网络(GNN),一种数据驱动的方法,来解决压力估计问题。工作有两个主要贡献。首先,基于随机传感器位置的训练策略使得基于GNN的估计模型对故障传感器位置变化具有鲁棒性。其次,一个现实的评估方案,考虑真实的时间模式和噪声注入,以模拟真实世界场景固有的不确定性。因此,一种新的状态-最先进的模型,GAT与残差连接,压力估计是可用的。模型在几个wdn基准上的表现超过了以前的研究,平均减少了约40%的绝对误差。

3. 文献解读

3.1 Introduce

在这项工作中,通过利用基于物理的仿真模型和基于GNN的数据驱动方法来关注压力估计。依靠利用EPANET仿真工具的数据生成方法来克服模型训练所需数据的缺乏。然而,在方法中,包括了所有在以前的工作中没有考虑到的动态参数(例如,水库总水头、储罐液位、粗糙度系数)。这有助于数据的多样性,并避免了由于模型简化误差而导致的不确定性传播(Du et al., 2018)。

GATRes能够重建Oosterbeek(荷兰的一个大尺度WDN)的结压力,平均绝对误差为1.94 m,与其他模型相比提高了8.57%。同样,模型在其他wdn基准数据集上优于以前的方法。C‐Town WDN的改进幅度最大(Ostfeld等人,2012年),绝对误差降低了52.36%,Richmond (Van Zyl, 2001年)的误差降低了5.31%,L‐Town的误差降低了40.35% (Vrachimis等人,2022年)。此外,对模型泛化的第一次尝试表明,多图预训练和微调有助于提高模型的性能。采用泛化策略后,Oosterbeek网络的绝对误差降低了约2%。

3.2 创新点

主要贡献如下

  • 由于所提出的训练策略依赖于随机传感器位置,基于GNN的估计模型对意外传感器位置变化具有鲁棒性。
  • 评估方案考虑了实时依赖模式,并额外注入了真实世界场景固有的不确定性。结果是一个新的基于GNN的最先进的模型,带有剩余连接的GAT (GATRes),用于wdn中的压力估计。

4. 网络框架

液压专家使用流量、需求和压力等基本测量来管理wdn。这些测量提供了WDN的全面视角,为预测、泄漏检测和操作控制等各种监督任务奠定了基础。出于这个原因,本研究的重点是解决水网络中所有节点位置的近似测量的基本挑战。在本研究中,最初假设先验知识(即历史数据)不可用,并且在典型条件下离散地记录网络状态,忽略泄漏、地震或火灾等不可预见的事件。此外,假设网络中两个邻域之间的测量状态表现出一定程度的相似性。这些假设对于采用从有效案例中训练出来的数据驱动的机器学习模型至关重要,同时避免了供水网络复杂性过高。

现实生活中的WDN由不同的组件组成,如水箱,阀门,泵,水库和数千个客户连接点,其测量状态对管理至关重要。在本研究中,缩小了范围,并倾向于将压力作为主要测量,因为与流量相比,压力易于安装,价格更实惠。然而,由于基础设施的限制和隐私问题,这些压力传感器在实践中受到限制。因此,收集到的数据,即结节点的压力状态,是稀缺的。这些状态在训练数据驱动的方法中扮演着至关重要的角色,这些方法与机器学习模型相一致,通常需要大量的数据。作为先决条件,压力状态应该是完全可观察的,以最小化整个供水网络中所有客户位置的训练模型的估计损失。这种矛盾给应用机器学习方法解决压力估计任务带来了挑战。

4.1 部分观测数据和真实模型评估

由液压仿真工具EPANET生成的来自不同wdn的训练集和测试集的压力密度分布如图1所示。在这种情况下,模拟的动态参数,例如油藏总扬程、连接处需求、泵速,在每次运行时随机调整。如前所述,只考虑正常条件下的WDN状态。因此,所有静态参数,如节点标高、管道长度、管径等都是固定的。在给定输入参数值的特定组合的情况下,每次模拟运行都会产生网络的任意状态(快照)。该算法一直运行到50000个稳定的网络状态。然后,将数据按60:20:20的比例随机划分为训练集、验证集和测试集。这些图是从训练集和测试集中随机抽取2000个快照生成的,其中每个快照代表所有连接点的压力。尽管如此,从图中可以明显看出,水力模拟生成的训练集和测试集的分布在所有示例中都是相同的。在这种情况下,评估由同一算法生成的数据上的重建模型只是评估模型重建训练过程中已经看到的信号的能力。

在工作中,提出了一个现实的测试集生成过程,它依赖于基于时间的需求模式。此外,在模拟之前注入高斯噪声以模拟现实世界场景固有的不确定性。结合基于时间的需求模式和噪声注入,可以创建真实的场景来评估模型推广到OOD数据的能力,训练集和测试集之间的密度分布存在明显差异。

4.2 将水网转换为图

在数学上,快照被表示为一个有限的、齐次的、无向的图G = (X, E, a),它有N个节点和M条边。边代表管道、阀门和泵,而节点可以是连接点、水库和储罐。节点特征存储在矩阵 X ∈ R N × d n o d e \mathbf X∈\mathbb R^{N×d_{node}} XRN×dnode中,其中 d n o d e d^{node} dnode为节点特征维数。在这项工作中,压力是唯一的节点特征,因为它被认为是监测WDN中最重要的稳定因素,并与先前的研究。因此,将X称为压力垫

E ∈ R M × d e d g e \mathbf E∈\mathbb R^{M×d_{edge}} ERM×dedge为边缘特征矩阵,其中 d e d g e d_{edge} dedge为边缘维数。根据特定的模型,如果没有使用这些边缘属性,将 h e d g e h_{edge} hedge设置为0,或者设置为2,这表示支持管道长度和直径。节点的连接用邻接矩阵 A ∈ R N × N \mathbf A∈\mathbb R^{N×N} ARN×N表示,其中 a i j a_{ij} aij = 1表示节点i和节点j通过链路连接, a i j a_{ij} aij​ = 0表示不通过链路连接。

由于部分可观测性,观测整个水网的精确压力X具有挑战性。因此,依靠基于物理的仿真模型来构建合成压力作为模型的训练样本。具体地说,仿真包括各种参数,包括静态和动态。静态参数(如节点高度和管径)保持不变,而动态参数(如连接处需求和储罐设置)则随时间而波动。然后,通过求解水力方程来估计WDN中未知节点的压力和流量。

尽管传统模拟的可用性,但它们需要手动校准过程以保持与实际物理水网的同步。鉴于这些限制,采取了另一种战略选择。特别是,仅仅利用模拟模型来生成合成样本来训练无校准模型。训练后的模型可以推断部署中任何水网的压力。

4.4 GATRes 框架

该模型有望从现有的已知信号中学习图形表示来估计未知的压力。此外,为了准确地估计距离传感器较远位置的压力,有一种方法将(推断的)测量数据从计量节点和中间节点有效地收集到距离较远的邻居是至关重要的。首先概述消息传递神经网络(MPNN) (Gilmer等人,2017),这是空间gnn的通用框架。然后,讨论图注意力网络(GAT) (veli<e:1> kovic等人,2018)作为基本组成部分之一。鉴于此,建议将GATRes作为主要模块,并设计如图3所示的整体架构。

考虑到GNN是一系列堆叠的层,MPNN描述了一个特定的层,通过消息传播将先前的表示转换为连续的表示。为了简单起见,省略了层索引,并将目标节点i的表示形式表示为xi。值得注意的是,第一个表示是被称为压力值的输入特征。然后,连续层的输出表示计算如下:
z i = U P D A T E ( x i , ⊕ j ∈ N ( i ) M A S G ( x j ) ) (1) z_i=UPDATE(x_i, \oplus_{j\in \mathcal N(i)}MASG(x_j))\tag{1} zi=UPDATE(xi,jN(i)MASG(xj))(1)
根据特定任务的目的,存在许多定义消息聚合器的方法。理想情况下,⊕被设计成以稀疏的方式从周围节点传播消息,这只对非零值有影响。因此,该方案在处理庞大的图形时可以有效地扩展,并且经济地节省了内存分配预算。(使用简单的聚合操作向邻接节点传递信息)

接下来,从目标节点i的角度来解释GAT。具体地说,GAT关注的是目标节点i和它的一个1跳邻居j之间的中间表示关系。如果一个节点与自己成对,它就形成了一个自注意关系。因此,策略性地在每个节点中建立一个虚拟的自环路链路,将自身表示与邻居的聚合表示进行权重比较。数学上,根据式1将GAT公式改写为:
z i = ∥ h H ∑ j ∈ N ( i ) ∪ { i } α i j h Θ x j = G A T ( x i ) z_i=\Vert_h^H\sum_{j\in\mathcal N(i)\cup\{i\}}\alpha^h_{ij}\Theta x_j=GAT(x_i) zi=hHjN(i){i}αijhΘxj=GAT(xi)
其中H为注意头数, ∥ \Vert 为连接算子, Θ ∈ R d i n × d o u t \Theta∈\mathbb R^{d_{in}×d_{out}} ΘRdin×dout为层权矩阵, d i n d_{in} din d o u t d_{out} dout分别为输入和输出表示维度。具体来说,选择一个求和作为UPDATE函数来聚合节点消息。对于每个节点,其MSG函数用α乘以可学习权值 Θ \Theta Θ和节点输入 x j x_j xj的线性组合来表示。其中, α \alpha α为注意系数,计算公式为:
a i j = s o f t m a x ( σ ( α T [ Θ x i ∣ ∣ Θ x j ] ) ) a_{ij}=softmax(\sigma(\alpha^T[\Theta x_i||\Theta x_j])) aij=softmax(σ(αT[Θxi∣∣Θxj]))

s o f t m a x ( x ) = e x i ∑ j ∈ N ( i ) ∪ { i } e x j softmax(x)=\frac{e^{x_i}}{\sum_{j\in\mathcal N(i)\cup \{i\}}e^{x_j}} softmax(x)=jN(i){i}exjexi

4.5 GATRes

根据经验建议使用额外的GAT层来评估从前一层生成的头部视图。将这种方法命名为GATRes。数学上,定义GATRes如下:
z i = x i + 1 ∣ N ( i ) + 1 ∣ ∑ j ∈ N ( i ) ∪ { i } G A T ( G A T ( x j : α , Θ ) ; β , Ψ ) z_i=x_i+\frac 1{|\mathcal N(i)+1|}\sum_{j\in\mathcal N(i)\cup\{i\}}GAT(GAT(x_j:\alpha,\Theta);\beta,\Psi) zi=xi+N(i)+1∣1jN(i){i}GAT(GAT(xj:α,Θ);β,Ψ)
与图3中的中间图像一样,将中间输入xi依次提供给两个GAT layer。对于目标节点i,内部 G A T : R N × d m → R N × H d o u t GAT:\mathbb R^{N\times d_m}\rightarrow \mathbb R^{N\times Hd_{out}} GAT:RN×dmRN×Hdout设计了多个头部视图,并在其1跳邻居中对它们进行加权。换句话说,它利用来自周围节点的消息聚合,进一步丰富了多头视图的多样性。

考虑了邻域中压力值的分布,因此根据经验地对当前表示应用均值聚合器。之后,使用中间输入xi的非参数残差连接,允许深度扩展并减少过拟合问题(。

如图3所示,整个结构是由许多GATRes块组成的堆栈。由于每个块考虑1跳邻居,堆叠多个块允许消息传播到图中的远邻居。在消息传播层之前,采用共享权重线性变换将被屏蔽的输入节点特征投影到高维空间。将第一个线性层称为steaming layer,这在计算机视觉任务中是众所周知的。在消息传播后,最后的线性层充当解码器,将高维表示投影回原始维度(即dnode = 1)。端到端模型随后将输出一个即时快照,其中任何节点的所有压力值都被恢复。

5. 实验过程

数据集

本研究的主要用例是使用荷兰Oosterbeek地区的私有大型WDN进行的。该网络包括5,855个结点和6,188个管道。图5a显示了Oosterbeek WDN随机快照的拓扑结构和节点压力。

还使用了四个公开可用的wdn基准,即Anytown (Walski等人,1987年)、C‐Town (Ostfeld等人,2012年)、L‐Town (Vrachimis等人,2022年)和Richmond (Van Zyl, 2001年),为评估和再现工作提供了基线。最后,在与模型泛化相关的实验中,使用了两个额外的公共数据集Ky13 (Hernadez等人,2016)和一个名为“Large”的匿名WDN (Sitzenfrei等人,2023)。本研究中使用的wdn在大小和结构上各不相同,从小型和中型到大型网络(如“large”和Oosterbeek),如图5所示。表2显示了每种网络的主要特征。

数据描述

对于节点分类任务,使用了几个开放的网络数据集,包括引文网络数据集(Cora[45]、CiteSeer[32]和PubMed[46])和合著者网络数据集(CS和Physics[47])。在引文网络数据集中,每个节点代表一篇论文,每个边代表一个引文关系。每篇论文都有一个称为节点标签的标签和一个称为节点特征的词袋表示。在合著者网络数据集中,节点代表作者,如果他们合著了一篇论文,则边缘将它们连接起来。每个节点的特征是每个作者论文的索引项,标签是作者工作的区域。

基线

一般来说,两个目标决定了基线的选择。第3节提到了第一个目标:在节点级回归问题上尝试流行的GNN架构。其目的是在对来自未知“自然”分布的数据点进行测试时实现可接受的误差。第二个目标是探索现有框架,从综合数据查询和模型训练到评估阶段。目标是为与wdn相关的压力估计任务或问题建立一个可靠的基准框架。换句话说,在测试中表现更好的模型应该在实际应用中更有用。

为此,将GATRes架构与流行的gnn进行了比较,包括GCNii和GAT。除此之外,GraphConWat (GCW)和mGCN也是使用稀疏信息的GNN解决压力估计的主要方法,在比较中也被考虑在内。表3总结了模型设置。

带超参数的GATRes‐small是优化过程后的最优版本。为了研究模型大小的影响,还引入了在参数数量方面接近mGCN的GATRes - large尺度。

评估标准

用于评估回归模型性能的最常用评估指标是RMSE(Root Mean Square Error)、MAE和平均绝对百分比误差(MAPE)。应该使用相对和绝对误差度量来评估模型。因此,模型使用MAE和MAPE进行评估。此外,纳入了Nash和Sutcliffe效率系数(NSE),该系数被广泛用于评估水文模型的性能。最后,使用了一个精度度量,定义为正预测与预测值总数的比率。正预测是那些至多偏离某个阈值的预测。

实验结果

为了评估,在24小时的Oosterbeek上测试了基线模型,重复了100次。结果的均值和标准差见表4。除非另有说明,否则在实验中默认为干净测试。表5给出了噪声测试的结果。

6.结论

在这项工作中,提出了一种基于物理和数据驱动的混合方法来解决wdn中的状态估计问题。利用数学模拟工具和gnn来重建网络中95%的连接处的缺失压力,而在训练期间只看到了5%的连接。还在更极端的传感器稀疏情况下测试了方法,达到99%的掩蔽率。工作成果是wdn压力估计的新技术,主要有两个贡献。首先,基于随机传感器位置的训练策略使基于GNN的估计模型对意外传感器位置变化具有鲁棒性。其次,一个现实的评估方案,考虑真实的时间模式和噪声注入,以模拟真实世界场景固有的不确定性。

The data set generation tool and GATRes model are publicly available on https://github.com/DiTEC‐project/gnn‐pressure‐estimation (Truong et al., 2023).

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

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

相关文章

【技术调研】三维(7)-Unity基础笔记

安装 ​ 最好使用长期维护版本。 创建项目 ​ 略 窗口布局 Hierarchy:层级面板,展示当前打开的场景里面有哪些物体。 Scene:场景面板,显示当前场景的样子 Game:游戏面板,场景运行的时候的样子 Inspector:检视面板(或属性面板),查看一个游戏物体由哪些组件组成。 …

有关shell指令练习2

写一个shell脚本&#xff0c;将以下内容放到脚本中 在家目录下创建目录文件&#xff0c;dir dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c; 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz移动到dir1中 …

Golang | Leetcode Golang题解之第423题从英文中重建数字

题目&#xff1a; 题解&#xff1a; func originalDigits(s string) string {c : map[rune]int{}for _, ch : range s {c[ch]}cnt : [10]int{}cnt[0] c[z]cnt[2] c[w]cnt[4] c[u]cnt[6] c[x]cnt[8] c[g]cnt[3] c[h] - cnt[8]cnt[5] c[f] - cnt[4]cnt[7] c[s] - cnt[6]…

uni-app页面调用接口和路由(四)

文章目录 一、路由二、页面调用接口二、路由跳转1.uni.navigateTo(OBJECT)2.uni.redirectTo(OBJECT)3.uni.reLaunch(OBJECT)4.uni.switchTab(OBJECT)5.uni.navigateBack(OBJECT) 总结 一、路由 路由配置 uni-app页面路由为框架统一管理&#xff0c;开发者需要在pages.json里配…

VBA技术资料MF199:屏蔽单元格右键菜单复制剪切按钮

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 &#xff08;1&#xff09;在Solver选项卡中可以设置仿真的起始时间和结束时间&#xff0c;一般起始时间设为0&#xff0c;而结束时间按需设置。 &#xff08;2&#xff09;如果希望仿真不会自动暂停&#xff08;也就…

通过springcloud gateway优雅的进行springcloud oauth2认证和权限控制

代码地址 如果对你有帮助请给个start&#xff0c;本项目会持续更新&#xff0c;目标是做一个可用的快速微服务开发平台&#xff0c;成为接私活&#xff0c;毕设的开发神器&#xff0c; 欢迎大神们多提意见和建议 使用的都是spring官方最新的版本&#xff0c;版本如下&#xff1…

通过UV快速计算品牌独立站网络流量

背景&#xff1a; 品牌独立站项目交付过程中&#xff0c;我们需要为客户提供“云资源” 成本报价&#xff0c;其中“计算资源” 及CPU、内存、存储 参数相对固定&#xff0c;而互联网网络成本需要进行评估报价&#xff0c;以海外TOP云平台 AWS、AZURE、GCP 为例都是以“不限带…

专业的屏幕录像和视频编辑的软件Camtasia 2024安装激活图文教程

‌Camtasia 2024是一款专业的屏幕录像和视频编辑的软件套装。它由TechSmith公司开发‌&#xff0c;提供了强大的屏幕录像、视频剪辑和编辑、视频菜单制作、视频剧场、视频播放等功能。 Camtasia Studio 2024是该软件套装的核心部分&#xff0c;支持在PC和Mac平台上运行&#xf…

SpringBoot3核心特性-核心原理

目录 传送门前言一、事件和监听器1、生命周期监听2、事件触发时机 二、自动配置原理1、入门理解1.1、自动配置流程1.2、SPI机制1.3、功能开关 2、进阶理解2.1、 SpringBootApplication2.2、 完整启动加载流程 三、自定义starter1、业务代码2、基本抽取3、使用EnableXxx机制4、完…

针对 Linux SSH 服务器的新攻击:Supershell 恶意软件危害易受攻击的系统

ASEC 研究人员发现了针对保护不善的 Linux SSH 服务器的新攻击。 在其中&#xff0c;黑客使用了用Go编写的 Supershell恶意软件。 该后门使攻击者能够远程控制受感染的系统。 初次感染后&#xff0c;黑客启动扫描仪来寻找其他易受攻击的目标。 据信这些攻击是使用从已受感…

构建高可用和高防御力的云服务架构:从DDoS高防到PolarDB

引言 随着互联网技术的飞速发展&#xff0c;网络环境已经成为我们日常生活和商业活动中不可或缺的一部分。然而&#xff0c;这种依赖也带来了新的挑战&#xff0c;尤其是在网络安全领域。其中&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击因其破坏性强、难以防…

OpenStack Yoga版安装笔记(十三)neutron安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

VS2022中的调试

目录 前言&#xff1a; 使用&#xff1a; 调试&#xff1a; 前言&#xff1a; 在日益繁忙的工作环境中&#xff0c;选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度&#xff0c;甚至让团队协作更加顺畅。…

【Linux学习】基本指令其一

命令行界面 命令行终端是一个用户界面&#xff0c;允许用户通过输入文本命令与计算机系统进行交互。 比如Windows下&#xff0c; 键入winR&#xff0c;然后输入cmd&#xff0c;就可以输入文本指令与操作系统交互了。 Windows有另一个命令行界面Powershell,它的功能比cmd更强大…

关于有源蜂鸣器及无源蜂鸣器的区别及驱动各类单片机案例

关于有源蜂鸣器及无源蜂鸣器的区别及驱动各类单片机案例 有源蜂鸣器与无源蜂鸣器区别有源蜂鸣器无源蜂鸣器模块化有源蜂鸣器及无源蜂鸣器驱动方式的说明 有源、无源蜂鸣器代码驱动总结 有源蜂鸣器与无源蜂鸣器区别 有源蜂鸣器与无源蜂鸣器区别在于是否有振荡源。 有源蜂鸣器即…

Redis——redispluspls库通用命令以及String类型相关接口使用

文章目录 通用命令get&#xff0c;setkeys插入迭代器 expire和ttltype string 类型接口set和getset NX和XXmset 和 mgetgetrange 和 setrangeincr 和 decr 通用命令 get&#xff0c;set void get_set_test(sw::redis::Redis& redis){//bool set(const sw::redis::StringV…

Hadoop的安装

文章目录 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。二. 环境变量三. 配置 一. 到Hadoop官网下载安装文件hadoop-3.4.0.tar.gz。 随后点击下载即可 由于Hadoop不直接支持Windows系统&#xff0c;因此&#xff0c;需要修改一些配置才能运行 二. 环境变量 三. 配置 进…

《飞机大战游戏》实训项目(Java GUI实现)(设计模式)(简易)

目录 一、最终实现后&#xff0c;效果如下。 &#xff08;1&#xff09;简单介绍本游戏项目&#xff08;待完善&#xff09; &#xff08;2&#xff09;运行效果图&#xff08;具体大家自己可以试&#xff09; 初始运行情况。 手动更换背景图。 通过子弹攻击敌机&#xff0c;累…

如何在Mac上查看剪贴板历史记录

重点摘要 macOS 内建的剪贴簿查看器可以透过 Finder 存取,但只能显示最近一次复制的内容,而且重新开机后就会清除。若要更进阶的剪贴簿管理,第三方 app 像是 CleanClip 提供了强大的功能和更好的组织方式。CleanClip 提供了全方位的剪贴簿历史管理解决方案,支援各种内容类型和…