第三十周学习周报:文献阅读+CNN

目录

摘要

Abstract

文献阅读:时间序列模型在水质预测中的应用

现有问题

解决方法

相关知识学习

时序序列模型

ARIMA(自回归差分移动平均模型)

研究实验

 CNN复习

通过Python实现ARIMA

总结


摘要

本周阅读的文献中提出了一种基于趋势分量和随机增量特征的ARIMA模型与聚类模型相结合的水质预测方法,将ARIMA模型与聚类模型相结合,可以弥补ARIMA模型的不足,提高对于具有随机特征的数据预测精度。对于文献相关知识,分析时序数据以及时序模型,了解机器学习在时序预测上的弊端,从AR模型和MA模型出发学习ARIMA模型。此外,通过CNN的正向传播的过程理解卷积池化原理和计算方式。

Abstract

The literature read this week proposes a water quality prediction method that combines ARIMA model and clustering model based on trend components and random increment features. Combining ARIMA model with clustering model can make up for the shortcomings of ARIMA model and improve the prediction accuracy for data with random features. For literature related knowledge, analyze temporal data and temporal models, understand the drawbacks of machine learning in temporal prediction, and learn ARIMA models from AR and MA models.In addition, understanding the principle and calculation method of convolution pooling through the forward propagation process of CNN.

文献阅读:时间序列模型在水质预测中的应用

title:Application of Time Serial Model in Water Quality Predicting

D O I:10.32604/cmc.2023.030703

现有问题

ARIMA模型是一种经典的时间序列预测方法,能较好地反映时间序列数据的线性特征。然而,单一的ARIMA模型难以全面有效地处理河流水质的非线性变化,对具有趋势特征的数据有较好的预测效果,但对具有随机特征的数据预测效果较差。需要与其他算法相结合。

解决方法

将ARIMA模型与聚类模型相结合,提出了一种基于趋势分量和随机增量特征的ARIMA模型与聚类模型相结合的水质预测方法。聚类是数据挖掘、模式识别等研究方向的重要研究内容之一,在识别数据内部结构方面起着极其重要的作用。聚类分析是数据挖掘最重要的功能之一,它将一组数据对象分成多个类或簇,同一簇中的对象相似性高,而不同簇中的对象差异大。K-means算法是聚类分析中一种基于分区的算法,它具有思路简单、实现容易、效果大的特点,被广泛应用于机器学习等领域。

相关知识学习

时序序列模型

1. 单变量VS多变量时间序列数据

时间序列是按时间顺序排列的数据集合。这些数据可以在任何时间间隔(例如,每秒、每分钟、每小时、每天、每月、每年等)观察和收集。举个例子,如果每天在同一时间测量体重并记录下来,那么你就有了一个关于体重的时间序列数据。时间序列数据的一个关键特性是其有序性,即数据点之间的顺序非常重要。

时间序列数据可以分为单变量数据和多变量数据,这取决于我们在每个时间点观察的变量的数量。时间序列预测的本质就是利用历史数据预测未来数据走向

单变量时间序列只涉及一个变量随时间的变化。这个变量在每个时间点都有一个观察值。单变量时序数据是指每个时间点对应一个标签值,时间是影响该标签唯一的自变量。在单变量时间序列预测中,我们只依赖一个变量的历史数据来预测该变量的未来值。

多变量时间序列涉及到两个或更多的变量随时间的变化。在每个时间点,这些变量都有观察值。在多变量时间序列中,时间是影响标签变化的因素之一,除了时间之外,往往还有别的决定性因素、或同样重要的因素和时间共同作用、影响着标签。在多变量时间序列预测中,我们不仅仅使用一个变量的历史数据,还会使用其他变量的历史数据来预测某个变量的未来值,并且这些变量之间的关系并不是一一对应的,因此,在处理多变量时间序列数据时,我们需要分析不同变量之间的相互影响,以及这些影响如何随时间变化
 

2. 时序模型vs机器模型

由于时间序列数据的特性,它们在数据依赖性、输入特征的定义和数据划分方式上存在显著的区别,传统时间序列数据在机器学习模型下的建模结果往往不尽如人意,存在问题有:

  1. 忽视时间依赖性:在时间序列数据中,当前的观察结果通常取决于之前的观察结果,传统的机器学习模型通常假设数据之间是独立的。
  2. 时间不是影响标签的关键因素:大部分时间序列预测中,时间并不是对因变量真正有关键影响的因子,比如真正影响“明天是否会下雨”的因子应当是空气的湿度、洋流的流动、雨云的移动、上旋气流的强度等等,下雨这个客观事实发生在“明天”,并不代表下雨这个客观事实因“明天”而发生。这一点对单变量和多变量时间序列都是如此,但在实际操作中单变量时间序列的预测难度更大,毕竟特征越少、预测的难度会越大。
  3. 缺乏趋势和季节性建模:时间序列数据通常包含趋势和季节性成分,历史事件的影响可以累积,从而对未来产生作用,这就是时间的“趋势性”特点。时间序列预测认为各个样本间存在着相关性,然而,传统的机器学习算法通常视各个样本为独立个体,其学习的角度和方法与时间序列模型有着显著的不同。
  4. 传统的机器学习模型在处理未见过的特征值时存在局限性。在时间序列预测中,我们总是要预测未来的日期,这是一种永远未曾在历史数据中出现过的特征。如果预测的样本特征从未在训练数据中出现过,那么机器学习模型将无法有效利用该特征进行预测。

在处理时间序列数据时,时序模型与机器学习的异同: 

项目时间序列模型传统机器学习模型
学习过程通过历史数据学习模式进行预测通过历史数据学习模式进行预测或分类
评估指标平均绝对误差(MAE)、均方根误差(RMSE)、精确度等平均绝对误差(MAE)、均方根误差(RMSE)、精确度等
训练/测试拆分将数据集拆分为训练集和测试集将数据集拆分为训练集和测试集
数据结构数据点之间存在时间依赖性数据点之间假设相互独立
特征工程提取趋势、季节性、周期性成分或使用滞后特征创建新特征、删除不相关特征或对特征进行转换
模型类型包括自回归模型(AR)、移动平均模型(MA)、ARMA、ARIMA、SARIMA等包括随机森林,支持向量机,神经网络等
训练/测试拆分方式按时间顺序拆分数据集随机拆分训练集和测试集

3. 时序预测模型建模

划分训练集、测试集原则:

1)时间顺序,我们需要确保训练集的所有数据在时间上都早于测试集的数据。

2)无重叠: 不会有时间既在训练集又在测试集中出现。这就意味着训练集和测试集应该是互斥的,即他们在时间上没有交集。

时序模型的训练方式:

1)单步预测:即训练集、验证集和测试集是完全分割的三段时间,在训练集上训练、在验证集上调参,在测试集上输出最终预测结果。这种方式被称为“单步预测”。使用历史数据来预测未来的一个时间步的值。这个“步”可以是任意时间单位。例如利用过去三天的数据预测未来一天(当“步”为天时)的数据。

2)多步预测指的是使用历史数据来预测未来多个时间步的值。与单步预测只预测未来一个时间步长的值不同,多步预测将预测范围扩展到了未来多个时间步长。

3)逐点预测是指在每一个特定的未来时间点,预测一个最可能的值。逐点预测是我们最常见的预测形式,例如在天气预测中,我们可能会预测明天的最高气温为27度,这就是一个逐点预测。

4)分布预测则是预测一个未来时间点的所有可能值的概率分布。相比于逐点预测,分布预测提供了更多的信息,包括预测值的不确定性和风险。例如,对于明天的天气,我们不仅预测最高温度可能为27度,还预测它可能在25-29度之间的概率为90%,可能在23-31度之间的概率为95%。

4. 时序算法总结

2b89d192788144189b2e47212c807286.png

ARIMA(自回归差分移动平均模型)

ARIMA模型,是一种将AR和MA模型结合起来的模型,用于处理更复杂的时间序列问题。

1. AR(自回归模型)

自回归模型AR,就是使用一个变量的过去值来预测其未来值的模型。自回归模型假设过去的值与未来的值之间存在线性关系。假设你能通过给过去的值加权求和来预测未来的值,这些权重就是模型的参数。

ad2f65869df4419bbc5181e5662e2f6f.jpeg

如果我们要预测时间t+1的值,我们可以使用到时间t为止的所有真实值;但是如果我们要预测时间t+2的值,我们就没有时间t+1的真实值,所以我们必须使用我们在时间t+1的预测值。这个过程将持续下去,因此,越往未来预测,我们依赖的预测值就越多。这也就是为什么时间序列预测中的误差会随着时间的推移而累积。

AR模型与多元线性回归模型在形式上非常相似,但应用的数据类型和各自对数据的假设有很大差别,AR模型自变量之间有严格的时间顺序,而多元线性回归模型则没有。

2. MA(移动平均模型)

它描述的是当前时间点的数据与过去噪声的关系。白噪声是一种特殊的时间序列模型,每个时间点的数据都是独立且服从相同分布的,且具有常数的均值和方差。

0d441d8bbc0b40b1b4a61be70f08c85a.jpeg

AR(自回归)模型和MA(移动平均)模型虽然在形式上看起来很相似,但是他们的关键区别在于他们对过去信息的处理方式。

对于AR模型来说,当前值是过去值的函数,是在使用过去的"实际"观察值来预测现在的值。对MA模型来说,当前值是过去噪声(或称之为误差或冲击)的函数。这里的“白噪声”实际上是模型无法解释的随机部分,是未能被模型捕获的信息。MA模型是在试图用过去的"错误"或"冲击"来预测现在的值。

AR模型是使用过去的实际值进行预测,而MA模型是使用过去的预测误差进行预测。举个例子:影响明日会不会下雨的真正因素并不是“今天”或“昨天”这些时间概念本身,而是风、云、日照等更加客观和科学的因素(这些其实就是MA模型认为的“偶然因素”)。

3. ARIMA模型

ARIMA模型的基本思想是利用数据本身的历史信息来预测未来。一个时间点上的标签值既受过去一段时间内的标签值影响,也受过去一段时间内的偶然事件的影响。这就是说,标签值是围绕着时间的大趋势而波动的,其中趋势是受历史标签影响构成的,波动是受一段时间内的偶然事件影响构成的,且大趋势本身不一定是稳定的。其中:

  • AR部分用于处理时间序列的自回归部分,它考虑了过去若干时期的观测值对当前值的影响。
  • I(差分)部分用于使非平稳时间序列达到平稳,消除了时间序列中的趋势和季节性因素。e34150dab0204e5783183cbe8aeaabb8.jpeg
  • MA部分用于处理时间序列的移动平均部分,它考虑了过去的预测误差对当前值的影响。

研究实验

1. 数据集

数据通过水质监测平台获取某流域2019年1月1日至2020年12月31日的水质数据。共有16876行数据,主要有水温、pH、溶解氧、电导率、浊度、高锰酸盐指数、氨氮、总氮、总氮9项指标。

其中,高锰酸盐指标、氨氮、总磷、总氮每4 h采集一次,其他5项指标每小时采集一次。我们选择TP指数作为研究对象

2. 评价指标

检验模型预测精度的常用指标有MAE、MSE和MAPE。其中MAE为绝对误差的平均值,能较好地反映预测误差值的实际情况。MSE即均方误差,是指参数预测值与实际值之差的平方的期望值。MSE评估数据的波动。MSE越小,模型的预测精度越高。MAPE是平均绝对百分比误差。MAPE值越小,模型的预测精度越高。

3.实验目的

对比ARIM单一模型与ARIMA结合聚类的预测精度,证实ARIMA结合聚类其预测精度高于单一ARIMA模型,说明ARIMA结合聚类可以更好预测具有随机特征的数据。

4. 实验设置

提出了一种结合自回归综合移动平均(ARIMA)和聚类模型的水质预测方法。以某流域水质监测数据为样本,选取水质总磷(TP)指数作为预测对象。首先对样本数据进行清洗、平稳性分析和白噪声分析。其次,根据贝叶斯信息准则(BIC)原理选择合适的参数,利用ARIMA方法获得趋势分量特征,进行水质预测;再次,采用k均值聚类方法分析监测水域降水与TP指数的关系,计算降水对水质变化的随机增量特征。最后,结合趋势分量特征和随机增量特征,计算水质预测结果。比较ARIMA模型与ARIMA结合聚类模型两种方法的预测结果。

5. 实验结果

756d43e5dfe846c7b7af6f3fa2d32f98.png

从评价指标也可以看出,利用ARIMA模型预测TP指数,其预测精度不高。这是因为ARIMA模型只提取了水质变化的趋势分量特征,而不能提取随机变化特征。与ARIMA水质预测方法相比,ARIMA结合聚类的方法具有更高的精度,其平均绝对误差(MAE)、均方误差(MSE)和平均绝对百分比误差(MAPE)分别降低了44.6%、56.8%和45.8%。

 CNN复习

CNN结构

529c564c7c654c53831ead69809bf8d9.png

1)Convolution(卷积):用来学习输入数据的特征表征。卷积层由很多的卷积核(convolutional kernel)组成,卷积核用来计算不同的feature map。无论图片大小,使用卷积操作,每个滑动窗口共享相同的权重矩阵,大大减少了参数的数量。
卷积层涉及到的参数:
①滑动窗口步长(stride):步长越小,提取到的特征越细致,也越多。步长一般设置为1。②卷积核尺寸:一般设置为 3*3。

③Pading:在矩阵外加0的圈数。可以通过在输入单元周围补零来改变输入单元整体大小,从而控制输出单元的空间大小。例如在做文本任务时,一句话为100词,另一句话为 120词,此时需要补20个0。即设置pading为20。
④激活函数:非线性激活函数,使用RELU函数小于0的部分设置为0,大于0的部分保持不变。

2)Pooling(池化):降低数据维度,但保留了重要的信息并减少训练参数,避免过拟合。常用的两种方法:最大池化max-pooling(选取最大的值)、平均池化average-pooling(选取矩阵的平均值)。
2目的

3)Fully Connected(全连接层):通过多次卷积-池化最后得到的特征图,也就是矩阵,按行展开连接成向量,传入全连接(Fully Connected)层,全连接层就是一个 BP 神经网络。图中的每个特征图都可以看成是排列成矩阵形式的神经元,与 BP神经网络中的神经元大同小异。

卷积网络的3种基本模块:卷积层、池化层和全连接层。输入一个矩阵,堆叠一个或多个卷积层对输入进行特征提取,然后接一个池化层进行空间尺寸缩小,之后重复此模式,直到空间尺寸足够小,最后接多个全连接层,卷积层和全连接层后面都需紧接ReLU激活层,但必须注意的是,最后一个全连接层后面不需接ReLU激活层,而是输出类别分值。

以单通道卷积层为例,通过一个2✖3的卷积核,将点积结果相加得到一个3✖1的矩阵,通过一个ReLU激活函数得到一个正数矩阵,再通过最大池化得到一个数值,将该值通过全连接层得到一个概率值。

通过Python实现ARIMA

读取数据

采用AirPassengers数据集,paese_dates指定日期在哪列;index_dates将年月日的哪个作为索引 ;date_parser将字符串转为日期

dateparse = lambda dates: pd.datetime.strptime(dates, '%Y-%m')
data = pd.read_csv('D:\\Competition\\AirPassengers.csv', parse_dates=['Month'], index_col='Month', date_parser=dateparse)

差分运算

ARIMA 模型对时间序列的要求是平稳型。因此,当你得到一个非平稳的时间序列时,首先要做的是进行d阶差分运算,化为平稳时间序列;对时间序列进行差分计算,差分d设置为1和2的效果变化不大且都已为平稳序列,因此将d设置为1进行差分运算。

ts_log_diff = ts_log.diff(1)
ts_log_diff.dropna(inplace=True)
test_stationarity(ts_log_diff)

分解数据

将原始的数据original分为趋势数据trend和季节性数据sensional以及剩余数据residual。

decomposition = seasonal_decompose(ts_log)
trend = decomposition.trend  # 趋势
seasonal = decomposition.seasonal  # 季节性
residual = decomposition.resid  # 剩余的

plt.subplot(411)
plt.plot(ts_log,label='Original')
plt.legend(loc='best')
plt.subplot(412)
plt.plot(trend,label='Trend')
plt.legend(loc='best')
plt.subplot(413)
plt.plot(seasonal,label='Seasonarity')
plt.legend(loc='best')
plt.subplot(414)
plt.plot(residual,label='Residual')
plt.legend(loc='best')
plt.tight_layout()
plt.show()

85fe92a196b942618a7456e9ec1d48ac.png

确定参数q和p

对平稳时间序列分别求得其自相关系数ACF 和偏自相关系数PACF ,通过对自相关图和偏自相关图的分析,得到最佳的自回归项数p 和移动平均项数 q。分别画出上置信区间和下置信区间,选取曲线图第一次穿过上置信区间的值,即p=1,q=2。

lag_acf = acf(ts_log_diff, nlags=20)
lag_pacf = pacf(ts_log_diff, nlags=20, method='ols')
# q的获取:ACF图中曲线第一次穿过上置信区间.这里q取2
plt.subplot(121)
plt.plot(lag_acf)
plt.axhline(y=0, linestyle='--', color='gray')
plt.axhline(y=-1.96 / np.sqrt(len(ts_log_diff)), linestyle='--', color='gray')  # lowwer置信区间
plt.axhline(y=1.96 / np.sqrt(len(ts_log_diff)), linestyle='--', color='gray')  # upper置信区间
plt.title('Autocorrelation Function')
# p的获取:PACF图中曲线第一次穿过上置信区间.这里p取2
plt.subplot(122)
plt.plot(lag_pacf)
plt.axhline(y=0, linestyle='--', color='gray')
plt.axhline(y=-1.96 / np.sqrt(len(ts_log_diff)), linestyle='--', color='gray')
plt.axhline(y=1.96 / np.sqrt(len(ts_log_diff)), linestyle='--', color='gray')
plt.title('Partial Autocorrelation Function')
plt.tight_layout()
plt.show()

b92cd4ed274341108668f98939b3cb82.png

AR model
model = ARIMA(ts_log, order=(2, 1, 0))
result_AR = model.fit(disp=-1)
plt.plot(ts_log_diff)
plt.plot(result_AR.fittedvalues, color='red')
plt.title('AR model RSS:%.4f' % sum(result_AR.fittedvalues - ts_log_diff) ** 2)
plt.show()

c18c7377abdd4b6284dc3cc784298a94.png

 MA model

# MA model
model = ARIMA(ts_log, order=(0, 1, 2))
result_MA = model.fit(disp=-1)
plt.plot(ts_log_diff)
plt.plot(result_MA.fittedvalues, color='red')
plt.title('MA model RSS:%.4f' % sum(result_MA.fittedvalues - ts_log_diff) ** 2)
plt.show()

111fc6a623534438bef4f6295c4b93e5.png

ARIMA model

# ARIMA 将AR和MA结合起来
model = ARIMA(ts_log, order=(2, 1, 2))
result_ARIMA = model.fit(disp=-1)
plt.plot(ts_log_diff)
plt.plot(result_ARIMA.fittedvalues, color='red')
plt.title('ARIMA RSS:%.4f' % sum(result_ARIMA.fittedvalues - ts_log_diff) ** 2)
plt.show()

f40aecd9f8c64781bfbf6ff6c645f7c4.png

从三个模型的结果来看,对于红色曲线与蓝色曲线拟合程度,ARIMA的效果更好。  

总结

因为时间序列数据的严格顺序性,以及数据之间的相关性,机器学习模型不能用来做时间序列数据的预测,因此需要用到时序模型。这周学习到时序预测模型的三种算法AR、MA、ARIMA,ARIMA是由AR、MA,以及差分组成,其既可以捕捉到数据的趋势变化,又可以处理那些有临时、突发的变化或者噪声较大的数据。所以,ARIMA模型在很多时间序列预测问题中都有很好的表现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值