怎么把自己的网站放到百度搜索上,团员个人信息查询系统,vs做的网站如何,wordpress 自媒体主题目录
摘要
Abstract
文献阅读#xff1a;基于集成深度神经网络的大规模水质预测
现有问题
提出方法
方法论
Savitsky-Golay过滤器
SE-LSTM#xff08;基于LSTM的编码器-解码器神经网络#xff09;
研究实验
数据集
实验设置
评估指标
基准模型
实验结果
发展…目录
摘要
Abstract
文献阅读基于集成深度神经网络的大规模水质预测
现有问题
提出方法
方法论
Savitsky-Golay过滤器
SE-LSTM基于LSTM的编码器-解码器神经网络
研究实验
数据集
实验设置
评估指标
基准模型
实验结果
发展趋势
SG滤波实现
总结 摘要
本周阅读的文献《Large-scale water quality prediction with integrated deep neural network》提出了一种基于长短期记忆的编码器-解码器神经网络和Savitzky-Golay滤波器的混合模型。其中Savitzky-Golay滤波可以消除水质时间序列中的潜在噪声并且在去噪过程中可以很好保留数据的有效信息特征。而长短期记忆可以研究复杂水环境中的非线性特征基于LSTM的编码器-解码器神经网络能够用于处理时间序列数据中的长序列因此可以更好地预测多步水质时间序列数据。
Abstract
The literature Large scale water quality prediction with integrated deep neural network read this week proposes a hybrid model based on long short-term memory encoder decoder neural network and Savitzky Golay filter. Savitzky Golay filtering can eliminate potential noise in water quality time series and effectively preserve the effective information (features) of the data during the denoising process. Long short-term memory can study nonlinear features in complex water environments, and encoder decoder neural networks based on LSTM can be used to process long sequences in time series data, thus better predicting multi-step water quality time series data.
文献阅读基于集成深度神经网络的大规模水质预测
Large-scale water quality prediction with integrated deep neural networkhttps://doi.org/10.1016/j.ins.2021.04.057
现有问题
传统的水质预测主要基于线性模型然而水环境条件复杂水质时间序列中存在大量噪声将严重影响水质预测的准确性。此外线性模型难以处理时间序列数据的非线性关系。传统的线性方法无法捕捉数据中的非线性特征因此在现有的研究中水质预测还采用了传统的支持向量机、人工神经网络、深度置信网络、堆叠自编码器等非线性方法。然而由于数据中的噪声这些预测模型经常遭受过拟合问题。采用基于小波去噪技术的预测模型有效提高了水质预测的精度。它们有效地降低了时间序列中噪声对预测精度的影响。然而这些模型不能有效地捕捉时间序列数据的长期特征
提出方法
提出了一种基于长短期记忆的编码器-解码器神经网络和Savitzky-Golay滤波器的混合模型。其中为了解决时间序列数据的降噪问题采用Savitzky-Golay滤波器对原始数据进行降噪消除水质时间序列中的潜在噪声并且SG滤波器在去噪的同时可以有效地保留时间序列的特征。而长短期记忆可以研究复杂水环境中的非线性特征。因此SE-LSTM模型可以更好地处理时间序列数据中的长序列。创新性地将Savitzky-Golay滤波器的降噪能力与LSTM的特征提取能力相结合和集成显著提高了多步预测精度。
方法论
Savitsky-Golay过滤器
Savitzky-Golay滤波器广泛地运用于数据流平滑除噪是一种在时域内基于局域多项式最小二乘法拟合的滤波方法也称为卷积平滑。这种滤波器最大的特点在于在滤除噪声的同时可以确保信号的形状、宽度不变。为了消除水质的频繁变化我们使用了SG的滤波器来减少噪声的干扰该滤波器在去噪过程中保留数据的有效信息。
SG平滑滤波的效果随着选取窗宽不同而不同可以满足不同场合的需求。SG卷积平滑算法是移动平滑算法的改进。关键在于矩阵算子的求解。 什么是多项式平滑 使用五点平滑算法来说明平滑过程把光谱一段区间的等波长间隔的5个点记为X集合多项式平滑就是利用在波长点为的数据的多项式拟合值来取代。然后依次移动直到把光谱遍历完。 SG卷积平滑算法用线性最小二乘法去拟合数据的每个子序列这种方法被称为卷积。 我们经常会用一组观测数据去估计模型的参数模型是我们根据先验知识定下的通过一些数据分析我们猜测y和x之间存在线性关系从而得到关于x和y的模型。很多时候没有确定解但是我们能求出近似解使得模型能在各个观测点上达到“最佳“拟合。最佳可以是所有观测点到直线的距离和最小也可以是所有观测点到直线的误差真实值-理论值绝对值和最小也可以是其它。 最小二乘法又称最小平方法它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法其实就是用来做函数拟合的一种思想所谓“二乘”就是平方的意思。 通过矩阵法进行推导理解最小二乘法的意义 通过几何法理解最小二乘法的几何意义 由最小二乘法可知Savitsky-Golay卷积平滑关键在于参数矩阵的求解 SE-LSTM基于LSTM的编码器-解码器神经网络
在降噪后本文采用LSTM模型对水质进行预测。LSTM可以从重要的经验中学习这些经验具有长期的依赖关系。LSTM的记忆细胞如图所示。 为了达到更好的预测精度这项工作提出了一种新的编码器-解码器神经网络由过滤器部分和预测部分组成如下图所示。采用SG滤波器降低的输入噪声图中的编码器是一个对输入进行顺序变换的LSTM然后得到从到的映射。解码器也是一个LSTM它通过给定隐藏状态获得来产生输出。LSTM能够提取时间序列的复杂特征在多步预测中编码器的输出 和从解码器得到最后一步隐藏状态 可以提高多步预测的性能。 模型步骤 研究实验
数据集
实验数据集采集自北京古北口该数据每4小时收集一次从2014年4月到2018年10月共收集了1万多条数据。然后将数据集分成两部分包括训练集和测试集比例为9:1。所有预测模型均采用溶解氧(DO)和化学需氧量(CODMn)作为实验数据。DO和CODMn的分布如图所示 实验设置
在数据预处理中本工作采用平滑操作来消除不稳定因素但同时也去除了原始时间序列中的一些有效信息。首先在对比实验中通过不同的窗口尺寸选择出最佳的过滤器在原始时间序列的移动中值(MM)、SG和MA滤波器中当窗口大小为5时三个过滤器获得最小的MSE值并且SG滤波器的MSE值最小。
在设置SG滤波器参数中我们给出了不同的参数设置当窗口大小为5即m¼5并且k度的多项式设置为3时获得的均方根误差(RMSE)较小。过大的窗口尺寸会去除时间特征而过小的窗口尺寸则不能用于降噪。同样k太大会导致最小二乘过拟合k太小会导致欠拟合。 评估指标
为了证明SE-LSTM的预测性能采用MAE、MAPE和RMSE三个指标来评价其预测精度。
基准模型
为了从不同方面比较所提出的方法我们选择了几个基准模型进行比较。
ARIMA。将过去值和随机噪声通过线性函数拟合到预测值中。ANN。人工神经网络能很好地处理非线性特征并具有良好的预测能力。极端梯度增强(XGBoost)。是一种通用的Tree Boosting算法它被广泛应用于机器学习领域。首先利用树集成技术构建回归树并将所有回归树的总得分作为最终预测值。SVR。SVR可以通过获得最小的结构风险来提高泛化能力在统计样本较少的情况下也能得到较好的统计规律。LSTM。LSTM是一种常用的序列预测模型特别是LSTM在产生时间序列的长期依赖关系方面表现优异。为了比较LSTM和SE-LSTM的性能实验中它们的超参数设置相同。
实验结果
将SE-LSTM与其典型的基准测试方法进行比较实验结果表明传统的非线性模型与线性模型相比并没有太大的优势。这是因为水质时间序列具有较强的线性特征线性模型具有一定的优势。此外深度学习的预测精度优于传统模型并且由于网络结构的变化SE-LSTM在多步预测精度上优于SG-LSTM。此外在加入SG滤波器后所有模型的预测精度都得到了显著提高验证了SG滤波器能更好地保留时间序列特征并有效去除噪声。虽然ARIMA模型在单步预测上略优于SE-LSTM模型但SE-LSTM在多步预测上优于ARIMA模型。观察到SE-LSTM在三个指标方面优于其同行。
DO数据集的比较结果 在CODMn数据集上的比较结果 发展趋势
进一步改进现有模型的网络结构使其不仅可以接收历史数据还可以捕获相关多特征数据的输入;将该模型应用到其他领域例如金融时间序列和交通流以验证其有效性和鲁棒性;将图神经网络与时间序列模型相结合提取水质时空特征从理论上研究和讨论滤波和预测模型的收敛性。
SG滤波实现
滤波函数定义即将原理通过代码实现
void SavitskyGolaySmoothing(float *arr,int window_size, int order, int rows, int cols){#order必须要比滑动窗口要小且滑动窗口不能为偶数if(window_size % 2 0){throw std::logic_error(only odd window size allowed);}if(order window_size){throw std::logic_error(Order must window_size);}cv::Mat A cv::Mat::zeros(window_size, order, CV_32FC1);cv::Mat A_T, A_INV, B;cv::Mat kernel;cv::Mat result cv::Mat::zeros(window_size, 1, CV_32FC1);#window_size2*step1#order相当于k即得到一个order元线性方程组int step int((window_size - 1)/2);for(int i 0; i window_size; i){for(int j 0 ; j order; j){#计算-step i的j次幂float x pow(-step i, j);A.atfloat(i,j) x;}}#使用了Opencv矩阵求矩阵转置和求逆A_T A.t(); #矩阵转置 A_INV (A_T * A).inv(); #矩阵求逆#求矩阵算子B A * A_INV * A_T;B.row(step).copyTo(kernel);float *wrap_data new float[step*2 cols];for(int row 0; row rows; row){#扩展起始数据大小为步长for(int n 0; n step; n){wrap_data[n] arr[row * cols];}#复制输入数据for(int col 0; col cols; col){wrap_data[col step] arr[row * cols col];}#扩展结束数据大小为步长for(int n 0; n step; n){wrap_data[cols step n] arr[row * cols cols -1];}for(int m step; m step cols; m){for(int n -step, j 0; n step; n, j){result.atfloat(0, j) wrap_data[m n];}arr[row * cols m - step] cv::Mat(kernel * result).atfloat(0 ,0);}}delete []wrap_data;}在python下基于scipy库实现SG滤波平滑
import matplotlib.pyplot as plt
import numpy as npdef SG01(data,window_size):# 前后各m个数据共2m1个数据作为滑动窗口内滤波的值m int((window_size - 1) / 2) # (59-1) /2 29# 计算 矩阵X 的值 就是将自变量x带进去的值算 0次方1次方2次方.....k-1次方,一共window_size行k列# 大小为2m1,kX_array []for i in range(window_size): #arr []for j in range(3):X0 np.power(-m i, j)arr.append(X0)X_array.append(arr)X_array np.mat(X_array)# B X*X.T*X^-1*X.TB X_array * (X_array.T * X_array).I * X_array.Tdata np.insert(data, 0, [data[0] for i in range(m)]) # 首位插入m-1个data[0]data np.append(data, [data[-1] for i in range(m)]) # 末尾插入m-1个data[-1]# 取B中的第m行 进行拟合 因为是对滑动窗口中的最中间那个值进行滤波所以只要获取那个值对应的参数就行 固定不变B_m B[m]# 存储滤波值y_array []# 对扩充的data 从第m个数据开始遍历一直到data.shape[0] - m 第m个数据就是原始data的第1个data.shape[0] - m为原始数据的最后一个for n in range(m, data.shape[0] - m):y_true data[n - m: n m 1] # 取出真实y值的前后各m个一共2m1个就是滑动窗口的大小y_filter np.dot(B_m, y_true) # 根据公式 y_filter B * X 算的 X就是y_truey_array.append(float(y_filter)) # float(y_filter) 从矩阵转为数值型return y_arrayif __name__ __main__:data [0.3962, 0.4097, 0.2956, 0.4191, 0.3456, 0.3056, 0.6346, 0.7025, 0.6568, 0.4719, 0.5645, 0.6514, 0.5717,0.6072, 0.7076, 0.7062, 0.7086, 0.677, 0.8141, 0.7985, 0.7037, 0.7961, 0.6805, 0.5463, 0.2766]smoothed_data SG01(data,5)smoothed_data [round(i, 4) for i in smoothed_data]smoothed_data2 SG01(data,11)smoothed_data2 [round(i, 4) for i in smoothed_data2]print(data, data)print(smoothed_data, smoothed_data)print(smoothed_data2, smoothed_data2)plt.plot(data, labeldata)plt.plot(smoothed_data, labelsmoothed_data)plt.plot(smoothed_data2, labelsmoothed_data2)plt.xlabel(Time)plt.ylabel(Value)plt.title(Line Plot)plt.legend()plt.show() 总结 Savitzky-Golay平滑滤波用于数据流的平滑除噪它的核心思想是对一定长度窗口内的数据点进行k阶多项式拟合在不改变原有信号的形状、宽度的前提下使得整体数据更加平滑。 运用于时间序列数据预测上的优点在于它在去除噪声的同时可以很好保留数据中包含的特征不被去除因此可以提高预测的精度。原始的编码器-解码器结构无法捕获长期依赖关系无法考虑过去输入的影响而基于LSTM的基础上可以通过记忆机制来捕捉长期依赖关系从而实现多步预测的提升。