《融合SCADA系统数据的天然气管道泄漏多源感知技术研究》误报数据识别模型开发

news2024/11/25 18:51:02

数据处理不作表述。因为我用的是处理后的数据,数据点这。

文章目录

  • 工作内容1
    • CC040
      • VFD电流
      • VFD转速
      • 压缩机转速反馈
      • 进出口差压
    • 紧急截断阀开到位
    • 进出电动阀开到位
    • 发球筒电筒阀开到位
    • 收球筒电动阀开到位
    • 电动阀2005开到位
    • 越站阀开到位
  • 工作内容2
  • 工作内容3

工作内容1

任务描述:简单观察时序数据

CC040

VFD电流

在这里插入图片描述

VFD转速

在这里插入图片描述
这两观察一个就好。

压缩机转速反馈

在这里插入图片描述

蚌埠住了。

进出口差压

在这里插入图片描述
似乎我看不出什么。
不用看了以上数据无法用作时序分析。我们之后特征工程看看它们是否有用。现在简单处理一下,小0.1换0大0.1换1。只需选择一段就好,这几段的本质一样。那就进出口差压了。同时只有两台能用。

紧急截断阀开到位

在这里插入图片描述
开了29560的单位时间。
在这里插入图片描述
开了29554的单位时间。
唐山这里前开后关。
在这里插入图片描述
在这里插入图片描述
宝坻全都没有开启。
这些数据十分显然只能用于特征工程无法用于时序分析。

进出电动阀开到位

在这里插入图片描述
进站:开了0的单位时间。
出站:开了12869的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。

发球筒电筒阀开到位

在这里插入图片描述
开了0的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。

收球筒电动阀开到位

在这里插入图片描述
开了12874的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。

电动阀2005开到位

在这里插入图片描述
开了2405的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。

越站阀开到位

在这里插入图片描述
唐山:开了30082的单位时间。
宝坻:开了42946的单位时间。
这些数据十分显然只能用于特征工程无法用于时序分析。

代码忽略

工作内容2

任务描述:判断数据之中是否有天然气大量泄漏。理论概述:基于上面工作内容,显而易见不能判断天然气体是否泄漏。为什么呢??同一时间,各种阀门开关状态组合过少。按理来说,应该有 2 3 + 4 + 2 + 1 + 1 + 1 + 2 = 2 14 2^{3+4+2+1+1+1+2}=2^{14} 23+4+2+1+1+1+2=214种的状态,但是实际不是这样。例如:有的阀门一直关闭,有的阀门一直开启,有的阀门开启之时另一阀门必然关闭,有的阀门关闭之时另一阀门必然开启。这个情况在这数据尤为严重,所以不能。个人观点:压力波形作为输入才是更加合理选择。 但是显然不是上述这些简单分类变量。我们可以使用模态分解技术,奇异谱分析等进行曲线分析。我们可以使用循环神经网络,多层感知机等进行模型建立。关键就是我们需要使用哪些波形曲线。 还有就是标签问题,工作内容1中表明,所有阀门关不代表气体泄漏。根据统计学习原理,如果数据之中没有泄漏数据,那么模型就不可能能学习到泄漏特征。 特征我们都知道是多段波形,但是具体应该是什么呢?一定不是上面那些。标签我们都知道是是否泄漏,但是数据之中没有。在没有的情况之下,更偏向非统计建模。
曲线分析框架

from PyEMD import CEEMDAN
from vmdpy import VMD
import pandas as pd
import numpy as np

class Decomposition:

    def EMD(data):
        ceemdan=CEEMDAN()
        ceemdan.ceemdan([i for i in data])
        IMFS,RES=ceemdan.get_imfs_and_residue()
        f=pd.ExcelWriter("data/EMD.xlsx")
        pd.DataFrame(IMFS.T).to_excel(f,sheet_name="IMFS",index=None,columns=None,header=None)
        pd.DataFrame(RES.T).to_excel(f,sheet_name="RES",index=None,columns=None,header=None)
        f.save()
        return IMFS.shape[0]+1

    def VMD(data,x):
        alpha,tau,K,DC,init,tol=5000,0,x,0,1,1e-6
        U,u_hat,omega=VMD(data,alpha,tau,K,DC,init,tol)
        f=pd.ExcelWriter("data/VMD.xlsx")
        pd.DataFrame(U.T).to_excel(f,index=None,columns=None,header=None)
        f.save()

    def SSA(data,x):
        windowlen=x;datalen=data.shape[0]
        K=datalen-windowlen+1;X=np.zeros((windowlen,K))
        for i in range(K):
            X[:,i]=data[i:i+windowlen]
        U,sigma,VT=np.linalg.svd(X,full_matrices=False)
        for i in range(VT.shape[0]):
            VT[i,:]*=sigma[i]
        A=VT
        REC=np.zeros((windowlen,datalen))
        for i in range(windowlen):
            for j in range(windowlen-1):
                for m in range(j+1):
                    REC[i,j]+=A[i,j-m]*U[m,i]
                REC[i,j]/=(j+1)
            for j in range(windowlen-1,datalen-windowlen+1):
                for m in range(windowlen):
                    REC[i,j]+=A[i,j-m]*U[m,i]
                REC[i,j]/=windowlen
            for j in range(datalen-windowlen+1,datalen):
                for m in range(j-datalen+windowlen,windowlen):
                    REC[i,j]+=A[i,j-m]*U[m,i]
                REC[i,j]/=(datalen-j)
        f=pd.ExcelWriter("data/SSA.xlsx")
        pd.DataFrame(REC.T).to_excel(f,index=None,columns=None,header=None)
        f.save()

神经网络框架(tensorflow版)

from sklearn.neural_network import MLPRegressor
import matplotlib.pyplot as plt
from Function import Function
import tensorflow as tf
import numpy as np

class Neural_network():
    
    def BPNN(X_train,Y_train,X_test,Y_test,scaled_tool,step_size,batch_size,epochs,Boolean1,Boolean2):
        inputs=tf.keras.Input(shape=(step_size,))
        x=tf.keras.layers.Dense(step_size//4*3,activation='relu',name='dense_1')(inputs)
        x=tf.keras.layers.Dense(step_size//4*2,activation='relu',name='dense_2')(x)
        x=tf.keras.layers.Dense(step_size//4*1,activation='relu',name='dense_3')(x)
        x=tf.keras.layers.Dense(1,activation='relu',name='dense_4')(x)
        model=tf.keras.Model(inputs=inputs,outputs=x)
        model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss='mean_squared_error')
        history=model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs)
        loss=history.history['loss']
        if Boolean1==True:
            plt.plot(loss,label='BPNN '+'Training Loss')
        return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean2)

    def RNN(X_train,Y_train,X_test,Y_test,scaled_tool,step_size,batch_size,epochs,Boolean1,Boolean2):
        X_train=np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))
        model=tf.keras.models.Sequential()
        model.add(tf.keras.layers.SimpleRNN(step_size,input_shape=(step_size,1)))
        model.add(tf.keras.layers.Dense(1))
        model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss='mean_squared_error')
        history=model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs)
        loss=history.history['loss']
        if Boolean1==True:
            plt.plot(loss,label="RNN "+'Training Loss')
        X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
        return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean2)

    def LSTM(X_train,Y_train,X_test,Y_test,scaled_tool,step_size,batch_size,epochs,Boolean1,Boolean2):
        X_train=np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))
        model=tf.keras.models.Sequential()
        model.add(tf.keras.layers.LSTM(step_size,input_shape=(step_size,1)))
        model.add(tf.keras.layers.Dense(1))
        model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss='mean_squared_error')
        history=model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs)
        loss=history.history['loss']
        if Boolean1==True:
            plt.plot(loss,label="LSTM "+'Training Loss')
        X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
        return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean2)

    def GRU(X_train,Y_train,X_test,Y_test,scaled_tool,step_size,batch_size,epochs,Boolean1,Boolean2):
        X_train=np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))
        model=tf.keras.models.Sequential()
        model.add(tf.keras.layers.GRU(step_size,input_shape=(step_size,1)))
        model.add(tf.keras.layers.Dense(1))
        model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss='mean_squared_error')
        history=model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs)
        loss=history.history['loss']
        if Boolean1==True:
            plt.plot(loss,label="GRU "+'Training Loss')
        X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
        return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean2)

    def MLP(X_train,Y_train,X_test,Y_test,scaled_tool,Boolean):
        model=MLPRegressor(max_iter=50,hidden_layer_sizes=(200),random_state=0)
        model.fit(X_train,Y_train)
        return Function.Function2(model,X_train,X_test,scaled_tool,Y_test,Boolean)

工作内容3

之前的word。据word中的那些工作,温度压强同阀门的开关有强作用。也许温度也在考虑范围。温度直接影响压强从而影响模型效果。

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

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

相关文章

【Python 训练营】N_12 打印菱形图案

题目 打印菱形图案 分析 先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 答案 # 方法一 for i in range(4):block **(2*i1)print({:^7}.format(block))…

web:NewsCenter

题目 打开页面显示如下 页面有个输入框,猜测是sql注入,即search为注入参数点,先尝试一下 返回空白显示错误 正常显示如下 是因为单引号与服务端代码中的’形成闭合,输入的字符串hello包裹,服务端代码后面多出来一个‘导…

MYSQL 8.X Linux-Generic 通用版本安装

下载对应版本MySQL :: Download MySQL Community Server (Archived Versions) 这里我选择的是Linux - Generic (glibc 2.12) (x86, 64-bit), TAR 解压到服务器 只需要里面的mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz 在目录下创建需要的文件夹 这里我改名为mysql-8.0.24…

分享一个适用于 Vue3 的好的组件库,PrimeVue组件。

一、PrimeVue介绍 PrimeVue 是一个基于 Vue.js 的 UI 组件库,专注于提供丰富、灵活、现代的 UI 组件,以帮助开发者构建功能强大的 Web 应用程序。PrimeVue 提供了一系列的组件,涵盖了从基本的表单元素到高级的数据表格和图表等各种组件。 二、…

RPC之grpc重试策略

1、grpc重试策略 RPC 调用失败可以分为三种情况: 1、RPC 请求还没有离开客户端; 2、RPC 请求到达服务器,但是服务器的应用逻辑还没有处理该请求; 3、服务器应用逻辑开始处理请求,并且处理失败; 最后一种…

函数声明与函数表达式

函数声明 一个标准的函数声明&#xff0c;由关键字function 、函数名、形参和代码块组成。 有名字的函数又叫具名函数。 举个例子&#xff1a; function quack(num) { for (var i 0; i < num; i) {console.log("Quack!")} } quack(3)函数表达式 函数没有名称…

4.7 构建onnx结构模型-Transpose

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以transpose 结点进行分析 方式 方…

音视频学习(十九)——rtsp收流(tcp方式)

前言 本文主要介绍以tcp方式实现rtsp拉流。 流程图 流程说明: 客户端发起tcp请求&#xff0c;如向真实相机设备请求&#xff0c;端口一般默认554&#xff1b;tcp连接成功&#xff0c;客户端与服务端开始rtsp信令交互&#xff1b;客户端收到play命令响应后&#xff0c;开启线…

UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown

一个奇怪的BUG 这个代码会报下面的错&#xff1a; 但是把模型导入部分注释掉之后就没有这个错误了&#xff08;第六行&#xff09; 解决办法&#xff1a;在模型加载后面加入一行代码 matplotlib.use( TkAgg’)&#xff0c;这个bug的问题就是模型加载改变了matplotlib使用的终端…

Leetcode算法之哈希表

目录 1.两数之和2.判定是否互为字符重排3.存在重复元素I4.存在重复元素II5.字母异位词分组 1.两数之和 两数之和 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int,int> hash;for(int i0;i<nums.si…

力扣141-环形链表

文章目录 力扣141-环形链表示例代码实现要点剖析 力扣141-环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测…

【C++】类型转换 ⑤ ( 常量和非常量之间的类型转换 - 常量类型转换 const_cast | const 左数右指原则 | 代码示例 )

文章目录 一、const 关键字简介1、const 修饰普通数据2、const 修饰指针 ( 左数右指原则 | 指针常量 | 常量指针 ) 二、常量和非常量 之间的类型转换 - 常量类型转换 const_cast1、常量类型转换 const_cast2、常量不能直接修改3、修改常量值的方法4、特别注意 - 确保指针指向的…

webpack具体实现--未完

1、前端模块打包工具webpack webpack 是 Webpack 的核心模块&#xff0c;webpack-cli 是 Webpack 的 CLI 程序&#xff0c;用来在命令行中调用 Webpack。webpack-cli 所提供的 CLI 程序就会出现在 node_modules/.bin 目录当中&#xff0c;我们可以通过 npx 快速找到 CLI 并运行…

视频字幕处理+AI绘画,Runway 全功能超详细使用教程(4)

runway的视频字幕处理、AI绘图功能介绍&#xff0c;感觉完全就是为了做电影而布局&#xff0c;一整套功能都上线了&#xff01;想系统学习的必收藏&#xff01; 在深度研究Runway各个功能后&#xff0c;无论是AI视频生成及后期处理技术&#xff0c;还是AI图像生成技术&#xff…

企业级开发链表思路

项目结构 头文件代码 头文件代码LinkList.h #ifndef LINKLIST_H #define LINKLIST_H #include <stdio.h> #include <stdlib.h> #include <iostream> // 链表小节点 typedef struct LINKBODE {struct LINKBODE* next;}LinkNode; // 遍历的函数指针 typedef …

纯cpp如何模拟qt的信号与槽

纯cpp如何模拟qt的信号与槽 我之前是如何使用bind的?一.demo示例二.简单来讲,c自带的bind与function函数,如何实现类似信号与槽的机制1. 简单语法2. function与bind联动尝试1尝试2真正实现流程图 自我反思 我之前是如何使用bind的? 一.demo示例 using MsgHander std::funct…

使用elasticsearch-head插件修改elasticsearch数据

1、先使用elasticsearch-head插件基本查询功能找到要修改的数据&#xff0c;看看是否存在 2、切换到elasticsearch-head复合查询界面&#xff0c;输入数据修改地址&#xff1a; http://es的ip地址:端口号/索引名称/文档类型&#xff08;没特殊设置过就是_doc&#xff09;/文档…

springboot 自定义starter逐级抽取

自定义starter 背景:各个组件需要引入starter 还有自己的配置风格 –基本配置原理 &#xff08;1&#xff09;自定义配置文件 导入配置可以在配置文件中自动识别&#xff0c;提示 导入依赖后可以发现提示 &#xff08;2&#xff09;配置文件实现 –让配置文件对其他模块生…

15.Docker-Compose的概念理解及安装

1.Docker-Compose是什么&#xff1f; Docker-Compose是实现对Docker容器集群的快速编排的工具软件。它是Docker官方开源的一个工具软件&#xff0c;可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml.写好多个容器间的调用关系&#x…

父进程隐藏——ConsoleApplication903项目

首先我发现用calc来做进程隐藏实验是失败的&#xff0c;父进程一直都是svhost.exe 那么我用我自己生成的cs木马beacon903.exe试试 试试explorer.exe 再试试cmd.exe 可以看到成功变成cmd.exe 可以看到我们可以通过这种方式虚假父进程 以上我们是直接获得的pid&#xff0c;那…