在之前的一篇博客中(工业大数据在铅粉机的应用),我提到的一个困扰我的问题:由于流程工业本身的特性,会产生时滞效应,比如:提高某工艺参数温度,这个效果是缓慢产生的,假设目标温度是300度,当前温度是40度,那么提高到指定温度需要一段时间;当提高到指定温度后,会产生复杂的化学、物理变化,也需要一段时间;因此某一参数的变化最终反映出来会滞后一段时间。所以在通过数据建模的时候,就必须考虑这个问题。解决这个问题的一般方法是定性分析,估计一个值,但是这个方法的缺点显而易见,它是工艺人员的经验得出的,并不精确。
最近看到一篇论文,介绍了一种定性的方法来计算时滞,个人认为是个值得借鉴的方法,论文请读者朋友自行阅读:《基于交叉相关性的流程工业时滞性研究 》--南京工业大学 电子与信息工程学院 陈炎,杨小健,李荣雨
一、 现在通过Python来复现论文:
import numpy as np
import math
import pandas as pd
def Rx1(x1):
v=0
for i in range(len(x1)):
v+=(x1[i]-np.mean(x1))**2
return v/len(x1)
def Rxi(xi,l):
v=0
for i in range(len(x1)):
v+=(xi[i+l]-np.mean(xi))**2
return v/len(xi)
def Rx1xi(x1,xi,l):
v=0
for i in range(len(x1)):
v+=(x1[i]-np.mean(x1))*(xi[i+l]-np.mean(xi))
return v/len(xi)
def Cx0xi(x1,xi,l):
r=Rx1xi(x1,xi,l)
rx0=Rx1(x1)
rx1=Rxi(xi,l)
return r/math.sqrt(rx0*rx1)
二、 现假设二组数据来验证算法的效果
设:y=3x+2
x=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
假设y滞后5个时间步
y=[0,0,0,0,0,2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77]
将这两组作为实验数据代入函数中计算
x=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
y=[0,0,0,0,0,2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77]
N=20
x1=x[0:N]
xi=y
l=8
Cx0xi(x1,xi,l)
def record(n,t):
x1=x[0:n]
xi=y
g=[]
for l in range(t):
c=Cx0xi(x1,xi,l)
g.append(c)
return g
record(20,10)
得到如下结果
[0.5427321585162229,
0.6044570372833218,
0.6642834383376137,
0.7189579018322991,
0.7640540917771934,
0.794100961108602,
0.8030347030428521,
0.7883900240881999,
0.753727697862942,
0.706251297690905]
从结果可以看出第7个元素最大,也就是说y数组滞后于x数组7个时间步。
三、用真实数据来验证算法有效性
数据源来自铅粉机-滚筒重量、进口风压。
滚筒重量的变化直接反应了铅粉产量,进口风压是影响铅粉产量重要的因素,实验目的是计算铅粉产量的变化滞后于进口风压多少时间步。
采样周期1分钟,取120条数据
部分数据如下所示:
数据带入函数中计算
dataset = pd.read_csv(r'C:\Users\Think\Desktop\machine learning\time lag.csv')
a=dataset['x']
b=dataset['y']
def record(n,t):
x1=a[0:n]
xi=b
g=[]
for l in range(t):
c=Cx0xi(x1,xi,l)
g.append(c)
return g
record(50,60)
得到如下数据:
[-0.14152334563378582,
-0.18140052510301158,
-0.1789710269476378,
-0.22116280134936822,
-0.162007009649457,
-0.10850959780155506,
-0.11746103913930642,
-0.08669961789248691,
-0.09183363725774629,
-0.03489733495782947,
0.11952998842018636,
0.05031684322091581,
0.03587211203514207,
-0.014958608986750442,
-0.05305119167410543,
-0.05480392347039527,
-0.1529359330898524,
-0.01396689767052879,
-0.08706631113413513,
0.01795856842965222,
-0.016236751829004654,
-0.10342248221575555,
-0.10468448510437346,
-0.03468452666362902,
0.1611429495934056,
0.10897861280174187,
0.07860389183948142,
0.1283788938020754,
0.2228990484878697,
0.17969047751260894,
0.26380248869546136,
0.147406543264036,
0.09798358996179352,
0.27002018296472763,
0.43751283295766985,
0.4843422558277366,
0.4491722415094058,
0.3489728251073251,
0.23443110323203561,
0.1778396983126151,
0.1076843094257852,
0.06484664688807737,
0.14871763598328522,
0.20404310190482033,
0.13542064514384541,
-0.04042733025757859,
-0.1202390235782849,
-0.1340211063258429,
-0.04362611474434002,
-0.05687054924662609,
-0.07082649164454642,
0.0010119935706163071,
-0.01589936316108075,
-0.017759157186828647,
-0.021198364595387188,
-0.03741566980050586,
-0.020140077208811967,
-0.034120408364014004,
0.021407711757412316,
-0.022531883719248202]
第36个元素最大,即铅粉产量滞后进口风压36分钟
这个结果与我之前测试的结果高度吻合(在铅粉机建立神经网络过程中,为了确定最优时滞,我从10分钟到120分钟都试了一遍,其中发现30分和40分时,网络模型精度最高)
总结:
从上述两个实验来看,这篇论文的方法确实是有效的,在流程工业的大数据挖掘方面,具有很高的实用性。