第10章 机器学习点预测方法
第9.1节中介绍的传统统计和基准方法通常假设因变量与自变量之间存在某种相对简单的关系,可能是线性趋势、特定季节性或自回归行为。这些方法在负荷预测中表现得相当成功,即使在数据量较少的情况下也能做到相当准确,并且易于从业者解读。然而,第9.1节中描述的方法可能不太适用于建模更复杂和高度非线性的关系。随着监测的增加,数据变得更加普遍,机器学习方法变得越来越常见,因为它们能够发现数据中复杂微妙的模式。
回顾式5.27和式5.28,它们定义了1步和m步前向预测问题的函数形式。它描述了从时间步n的预测原点出发,m步前的负荷$L_{n+m}$与自回归特征$L_{1},\ldots,L_{n}$、解释特征$Z_{1},\ldots,Z_{k}$以及函数$f.$之间的关系。如第4.2节所述,这个函数f可以从训练数据中学习,即负荷预测任务可以建模为监督学习任务,其中机器学习模型被训练来学习负荷与某些特征之间可能的复杂关系。由于负荷预测任务通常表示为数值,因此在大多数情况下它是一个回归问题。
以下各节介绍几种可用于时间序列预测的流行机器学习方法。第10.1节介绍k近邻回归(k-NN),这是一个相对简单的模型,与多元线性回归一起,可以作为非太大数据集上的良好基准模型。支持向量回归(第10.2节)在21世纪初曾是一种流行的模型,因为它能够以非线性关系提供准确的预测,但仅适用于相对较小的数据集。基于树的集成模型,如随机森林回归和梯度提升回归树(第10.3节),是强大而鲁棒的模型,通常在结构化数据上表现非常好,因此对于许多实际时间序列问题(即使自变量与许多变量存在复杂关系)也是强有力的竞争者。它们还能很好地扩展到大量观测数据。
然而,与许多其他领域一样,人工神经网络在时间序列任务中,特别是负荷预测中,变得越来越流行。虽然常规的前馈神经网络相对有能力,但循环神经网络及其更复杂的深度变体,如长短期记忆(LSTM)和门控循环单元(GRU),也因能够建模自回归关系(第10.5节)而在时间序列任务中取得了成功。最近,卷积神经网络(CNN)也提供了最先进的结果,并因其训练效率更高而被用于代替循环架构。这创造了有趣的架构,特别是在使用智能电表数据对大量用户和配电网进行训练的大规模时间序列数据集上。
本书仅简要概述最近的发展,如Transformer网络和专门设计的、已显示出有前途结果的神经网络架构。然而,由于这些在研究中最为相关,我们省略细节,并建议感兴趣的读者参阅一些核心文献。
我们注意到,上述机器学习模型可用于回归和分类任务。然而,通常负荷预测是一个回归任务,因此其功能在回归上下文中解释,这可能与其他解释不同。例如,在k近邻或随机森林中,对于回归情况,它们的预测被平均化,但对于分类情况,它们可能使用多数投票。在人工神经网络中,区别在于使用不同的损失函数(即回归中的均方误差与分类中的交叉熵损失)以及最终层的激活函数(即回归中的线性激活与分类中的softmax函数作为激活)。
10.1 k近邻回归
k近邻回归(k-NN)和多元线性回归(见第9.3节)通常被认为是两种最简单的监督学习方法。线性回归可被视为高偏差模型,因为它对变量之间的线性关系和残差分布施加了强假设。相比之下,k-NN不做出参数假设,因此被认为是低偏差模型。然而,值得指出的是,偏差的水平取决于数据、参数(和超参数)的选择以及模型捕捉底层关系的好坏程度。
基本算法通过查找训练数据集中与要进行预测的实例最相似的k个实例来进行预测。因此,考虑训练数据集$\mathcal{X}=\left\{(\mathbf{x}_{1},\mathbf{y}_{1}),(\mathbf{x}_{2},\mathbf{y}_{2}),\ldots,(\mathbf{x}_{j},\mathbf{y}_{j}),(\mathbf{x}_{N},\mathbf{y}_{N})\right\}$和一个需要预测的新实例$\mathbf{x}^{\prime}$。然后k-NN寻找k个实例$(\mathbf{x}_{1}^{\prime\prime},\mathbf{y}_{1}^{\prime\prime}),(\mathbf{x}_{2}^{\prime\prime},\mathbf{y}_{2}^{\prime\prime}),(\mathbf{x}_{i}^{\prime\prime},\mathbf{y}_{i}^{\prime\prime}),\ldots,(\mathbf{x}_{k}^{\prime\prime},\mathbf{y}_{k}^{\prime\prime})\in\mathcal{X}$,其中$\mathbf{X}_{i}^{\prime\prime}$根据某种距离度量与$\mathbf{x}^{\prime}$最相似。在回归问题中,预测$\hat{\mathbf{x}}$是$\mathbf{y}_{1}^{\prime\prime},\mathbf{y}_{2}^{\prime\prime},\mathbf{y}_{i}^{\prime\prime},\ldots,\mathbf{y}_{k}^{\prime\prime})$的平均值,而在分类中则是多数投票。距离度量和聚合函数的选择可以根据情况和应用非常灵活地选择,这一事实使k-NN成为一种极其通用的方法。

在朴素实现中,通过计算测试数据与所有训练点之间的距离来进行预测。然后根据相似性度量,选择与测试数据距离最近的k个训练点。然而,在实践中,高效的数据结构如球树使得无需将测试数据与所有训练数据进行比较。注意,其中一些技术需要距离度量具有某些性质,如某些度量性质(见下面的讨论)。图10.1展示了一个针对能量曲线的k-NN简单示例。相似性由一天内点之间的接近程度决定,用于估计一个周期(黑色十字)的k个点被限定在垂直蓝色线之间。
参数 k 是最重要的超参数,用于调节模型的欠拟合和过拟合。选择过小的 k 可能导致过拟合,因为预测仅基于少数数据点。k 过大时,估计基于太多观测值,因此可能欠拟合。超参数的影响如图10.2所示,展示了不同 k 值的效果。k 越大,拟合越平滑,但偏差也越大,同时注意峰值近似程度变差。
由于算法依赖于距离度量,因此对数据进行归一化很重要,否则结果可能取决于特征的比例(例如,如果温度以 $^\circ\mathrm{C}$ 或 ºF 表示,负荷以 W 或 kW 表示,会导致不同的预测)。因此,归一化过程的选择,尤其是对于 k-NN,是一个重要的设计选择。关于归一化技术的讨论,请参见第6.1.3节。

如上所述,k-近邻回归有两个主要步骤:确定最相似的实例并组合相应的目标值。这两个步骤都可以视为算法的设计决策,并可根据具体应用进行变化。对于第一步,探索不同距离度量的使用通常很有用。默认情况下,k-NN 使用欧几里得距离,并通过算术平均组合所选目标值。欧几里得距离定义为元素差的平方和,即第7.1节中介绍的 2-范数。算术平均是欧几里得距离的自然选择,因为对于有限样本,它最小化平方距离之和(第8.2.1节)。然而,在某些应用中,选择 medoid(样本中与所有其他点平方距离之和最小的代表点)可能是合理的选择。
欧几里得距离是一种锁步或“点对点”距离度量,因为它先测量输入序列各元素之间的距离,再聚合。在时间序列中,这意味着通过匹配相同时间步的值进行评估。相比之下,所谓的弹性距离度量组则先对时间序列进行时间域上的最优对齐,使得这种对齐的代价函数总体代价最小。在使用低压电网中具有高波动性的负荷曲线时,这一特性可避免双重惩罚效应(参见第13.3节关于特殊弹性距离度量的内容)。
k-NN 允许使用任意距离度量来寻找最相似的邻居。然而,如果距离不是度量,这种搜索可能需要采用暴力方法,因此可能无法很好地扩展到大数据集。距离度量要成为度量空间,必须具备以下性质:
• 非负性:$\mathbf{D}(\mathbf{X},\mathbf{Y})\geq 0$
• 不可区分者的同一性:$\mathrm{D}(\mathbf{X},\mathbf{X})=0$
• 对称性:$\mathrm{D}(\mathbf{X},\mathbf{Y})=\mathrm{D}(\mathbf{Y},\mathbf{X})$
• 三角不等式:$\mathrm{D}(\mathbf{X},\mathbf{Y})\leq\mathrm{D}(\mathbf{X},\mathbf{Z})+\mathrm{D}(\mathbf{Z},\mathbf{Y})$
回顾第7.1节中的 p-范数都是度量。
许多加速相似性搜索的算法改进依赖于度量特性,最重要的是三角不等式。对于任意度量计算样本均值通常是棘手的。因此,方法会采用近似解或使用 medoid 代替样本均值。对于大数据集,可以使用训练集的子集以降低计算成本。
最流行的弹性距离度量是动态时间规整(DTW)。它最初被引入用于语音识别应用,并且已被证明在许多数据集上表现良好。[1] 它被认为是一种弹性度量,因为它通过拉伸或“扭曲”两个时间序列来找到它们之间的最优对齐,最小化对齐点之间的欧几里得范数。图10.4展示了两个时间序列X和Y的这样一个最优对齐。它将顶部曲线的第一个峰值映射到底部曲线中相同高度的峰值。然后,第二个较小的峰值与稍后出现的相同高度的峰值对齐。相比之下,图10.3展示了“逐点”欧几里得距离。
DTW可以递归定义为:
$$\begin{aligned} \text {DTW}(X_{:i}, X_{:j}) = \text {D}(X_i, Y_j) + \min \left\{ \begin{array}{l} \text {DTW}\left( X_{:i-1}, Y_{:j-1}\right) , \\ \text {DTW}\left( X_{:i}, Y_{:j-1}\right) , \\ \text {DTW}\left( X_{:i-1}, Y_{:j}\right) \end{array} \right\} \end{aligned}\tag{10.1}$$
那么时间序列X和Y之间的DTW距离为
$$\begin{aligned} \text {DTW}(\textbf{X}, \textbf{Y})=\text {DTW}(X_{:T}, Y_{:T}). \end{aligned}\tag{10.2}$$
如上所述,D可以是任意距离函数,但通常是欧几里得距离。朴素的递归实现会导致指数级运行时间。最流行的确定性方法是基于动态规划的算法,该算法导致二次运行时间,即与输入长度的平方成比例缩放。DTW算法的最优解可以用规整路径(warping path)表示,该路径是沿着代价矩阵的路径,包含每个对齐点$X_{i}$和$Y_{j}$的代价(即矩阵的第$i^{th}$行和第$j^{th}$列是元素$X_{i}$和$Y_{j:})$之间的距离)。图10.6(左)展示了图10.3、10.4和10.5中所示向量X和Y的每个元素对齐的代价矩阵。黑线表示规整路径。




由于DTW很流行,已经提出了许多调整。最常见的改编是引入一个约束,将代价矩阵中的值限制在某个半径r内,这通常被称为Sakoe-Chiba带。这个版本被称为约束DTW,或cDTW。图10.6(右)展示了带有$r=3$的约束代价矩阵及由此产生的规整路径。图10.5展示了约束DTW的相关最优约束DTW对齐。在这种情况下,较早的峰值被对齐,而不是较小的峰值与后来相同高度的峰值对齐。这导致距离略大(在给出的示例中cDTW(X, Y) = 3.32对比$\mathrm{DTW}(\mathbf{X},\mathbf{Y})=3.0.)$)。由于其流行和一致的有效性,DTW通常是许多问题的默认基准选择。特别是,DTW可能是家庭层面预测的一个选择,这将在第13.3节中更详细地说明。
10.2 支持向量回归
支持向量回归(SVR)是一种用于时间序列预测的流行机器学习方法。首先,考虑一个时间序列$L_{1},L_{2},...$,以及在每个时间步t的n个解释性时间序列变量$X_{1,t},X_{2,t},\ldots,X_{n,t}$t,它们与负荷$L_{t}$通过一个简单的多元线性模型相关联,如第9.3节所述,描述为:
$$\begin{aligned} \hat{L}_{N+1} = \sum _{k=1}^{n} \beta _k X_{k,N+1}+b, \end{aligned}\tag{10.3}$$
对于某个常数b。为简化符号,将其写成矩阵-向量形式:
$$\begin{aligned} \hat{L}_{N+1} = \boldsymbol{\beta }^T \textbf{X}_{N+1} + b, \end{aligned}\tag{10.4}$$
其中 $\mathbf{X}_{t}=(X_{1,t},X_{2,t},...,X_{n,t})^{T}$ 和 $\beta=(\beta_{1},\ldots,\beta_{n})^{T}$ 分别为解释变量向量和回归参数向量。
寻找相关参数 $\beta,$ 的标准方法是最小化模型与观测值之间的最小二乘差,即
$$\begin{aligned} \hat{\boldsymbol{\beta }} = {\arg \min }_{\boldsymbol{\beta }\in \mathcal {B}} \sum _{t=1}^N (L_{t} - \boldsymbol{\beta }^T \textbf{X}_{t}-b)^2. \end{aligned}\tag{10.5}$$
这可以扩展为正则化形式,如 LASSO 或岭回归,如第8.2.4节所示,其中添加了附加项 $||\beta||_{p}$ 以最小化系数的整体大小。
相比之下,支持向量回归(SVR)拟合所有误差在特定阈值 $\epsilon\geq 0$ 内的观测值的线性模型。这可以表示为
$$\begin{aligned} -\epsilon \le L_{t} - \sum _{k=1}^{n} \beta _k X_{k, t} -b \le \epsilon . \end{aligned}\tag{10.6}$$
SVR 的目标是最小化参数大小
$$\begin{aligned} \frac{1}{2}||\boldsymbol{\beta }||^2_2, \end{aligned}\tag{10.7}$$

受约束条件 (10.6) 的限制。因此在 SVR 中,只要误差在特定阈值内,其大小并不重要。方程 (10.7) 中的优化最大化模型的“平坦度”或复杂度,与线性最小二乘模型的岭正则化方法(见第8.2.4节)类似。
为说明支持向量回归,考虑一个简单的1维示例,其中具有特定的精度值,如图10.7所示。在某些情况下,可能没有能够以该精度近似的点,或者可能允许更大的误差,此时可以添加松弛变量 $\xi$ 以使问题可行并接受更大的误差。在这种更新形式中,目标是最小化代价函数:
$$\begin{aligned} \frac{1}{2}||\boldsymbol{\beta }||^2_2 + C \sum _{t=1}^N(\xi _t + \xi _{t}^*), \end{aligned}\tag{10.8}$$
关于 $\beta,$
$$\begin{aligned} \text {Subject to} {\left\{ \begin{array}{ll} L_{t} - \sum _{k=1}^{n} \beta _k X_{k,t} - b \le \epsilon + \xi _t, &{} \\ \sum _{k=1}^{n} \beta _k X_{k,t}+b - L_{t} \le \epsilon + + \xi ^*_t &{} \\ \xi _t, \xi _t^* \ge 0. \end{array}\right. } \end{aligned}\tag{10.9}$$
常数 $C>0$ 是最大化平坦度与最小化超出允许偏差之间的权衡。为了对线性模型实现 SVR,必须找到 C 和 ε。可以通过在验证集上测试多种值(第8.1.3节)进行交叉验证来找到最优参数。
通常,线性 SVR 问题在其对偶形式中更容易求解,在这种情况下,预测模型可以表示为
$$\begin{aligned} \hat{L}_{N+1}=f(\textbf{X}) = \sum _{t=1}^N \alpha _t <\textbf{X}_{t}, \textbf{X}> + b, \end{aligned}\tag{10.10}$$
其中 $<,>$ 表示内积函数(例如点积),而 $\alpha_{t}$ α 是由优化的拉格朗日乘子导出的系数(详见参考文献 [1])。
SVR的一个优势是它也可以扩展到非线性回归。这是通过使用变换函数 - 将输入特征映射到更高维空间来实现的。在非线性情况下,考虑以下变换后的多元线性方程
$$\begin{aligned} \hat{L}_{N+1} = \boldsymbol{\beta }^T \Phi (\textbf{X}_{N+1}) + b. \end{aligned}\tag{10.11}$$
在实践中解决这个问题只需要知道核函数 $K(\mathbf{X}_{i},\mathbf{X}_{j})=<\Phi(\mathbf{X}_{i})$ ,-(X j ) > ,其中 $<,>$ 表示之前的内积(更多细节见附录D的参考文献)。与线性形式一样,最终的预测模型可以用对偶形式写成
$$\begin{aligned} \hat{L}_{N+1}=f(\textbf{X}) = \sum _{t=1}^N \alpha _t K(\textbf{X}_{t}, \textbf{X}) + b. \end{aligned}\tag{10.12}$$
有几种核函数可以选择。最流行的一些是高斯径向基函数(RBF),由下式给出
$$\begin{aligned} K(\textbf{X}_i, \textbf{X}_j) = \exp \left( -\gamma ||\textbf{X}_i -\textbf{X}_j||^2 \right) , \end{aligned}\tag{10.13}$$
以及多项式核,由下式给出
$$\begin{aligned} K(\textbf{X}_i, \textbf{X}_j) = (1+<\textbf{X}_i, \textbf{X}_j>)^p, \end{aligned}\tag{10.14}$$
其中 $p$ 是多项式的阶数。阶数越大,回归拟合的灵活性越大。通常,选择最佳模型和参数是通过在验证集上进行比较来实现的。核方法的强大之处在于,通过简单地变换原始变量,非线性问题实质上已转化为线性问题。
10.3 基于树的回归方法
10.3.1 决策树回归
单独使用时,决策树并不是特别准确,对预测的用途有限。然而,当多个决策树组合在一起时,它们会产生一些最强大、最准确的机器学习模型。这包括随机森林(见10.3.2节)、装袋方法和梯度提升决策树(见10.3.3节)。回归树可用于分类离散/类别数据,或对连续数据进行回归。后者对负荷预测最感兴趣,将在本节及接下来的几节中讨论。
与10.4节一样,目标是基于时间t的M个输入 $(X_{1,t},X_{2,t},\ldots,X_{M,t})^{T}\in\mathbf{X}$ 学习一个函数 $f:\mathbf{X}\longrightarrow\mathbb{R}$ ,用于预测时间 $t=$ $N+1$ 的负荷 $L_{N+1}$ ,
$$\begin{aligned} \hat{L}_{N+1\,N} = f(\{X_{1, t}, \ldots , X_{M, t}\}, \boldsymbol{\beta }), \end{aligned}\tag{10.15}$$
其中 $\beta$ 是定义决策树所需的参数。与前面几节一样,输入 $X_{1,t},X_{2,t},\ldots,X_{M,t}$ t 非常通用,可以包括例如历史负荷 $L_{t}$ for $t\leq N$ ,或其他解释变量,如温度预报。
决策树通过将域X中的训练观测值分割成不重叠的不相交子集来定义一个函数。该函数就是每个不相交子集中因变量(此处为负荷 $L_{t})$ )历史观测值的平均值。图10.8展示了二维变量空间被分割成四个不相交集合的示例,该图显示了决策树可以产生的分割类型。算法从完整域开始,在本例中为方形区域 $[-1,1]\times[0,2]$ ,图中以黑色边界显示。对其中一个变量进行分割,该分割根据某些准则优化了域的划分(这将在后面详细研究,但例如对于回归,可以是使观测值与模型之间的均方误差(RMSE)(见第7章)最大程度减少的分割)。在这个说明性示例中,最佳分割是在 $x=0$ 处进行切割(以红线表示)。在下一次迭代中,重复该过程,并尝试在上一次迭代刚刚产生的两个部分上找到下一个最佳分割。结果发现是黄色线表示的水平线 $y=0.5$ 。在下一次迭代中,最终选择在 $x=0.6$ 处进行切割,由紫色线给出。分割可以写成树的形式,树的每个分割代表域中的另一个划分。图10.9给出了对应于图10.8中域划分的决策树。标记为 $C1,\ldots,C4$ 的最终节点是末端或叶节点,代表域的最终划分。
现在考虑一系列成对的 $(L_{t+1},\mathbf{X}_{t})\left(t=1,\ldots,N\right)$ ,即因变量和自变量,其中 $\mathbf{X}_{t}=(X_{1,t},X_{2,t},...,X_{M,t})$ 是时间t的M个属性的集合, $L_{t+1}$ 是下一个时间步 $t+1$ 的观测值。注意,这里假设观测值是连续的实值变量(离散/类别因变量通常不在负荷预测应用中使用,但也可以包含,例如参见6.2.6节的虚拟变量)。给定X的域划分为 $P$ 个不相交的集合,记为 $C_{1},C_{2},\ldots,C_{P}$ ,每个集合分别包含 $N_{1},N_{2},\ldots,N_{P}$ 个点,定义分段函数 $f_{P}()$ (其中P表示对划分P的依赖),该函数在每个不相交集合上是常数,可以写为


$$\begin{aligned} f_P(\textbf{X})=\sum _{p=1}^P \alpha _p \chi _p(\textbf{X}), \end{aligned}\tag{10.16}$$
其中$\chi_{p}(\u)$是由下式定义的特征(或指示)函数
$$\chi_{p}(\mathbf{X})=\left\{\begin{array}{ll}1,&\text{if}\mathbf{X}\text{is in set}C_{p}\\0,&\text{otherwise}\end{array}\right..$$
和
$$\begin{aligned} \alpha _p = \frac{1}{N_p}\sum _{t=1}^{N} L_t \chi _p(\textbf{X}_t), \end{aligned}\tag{10.17}$$
是因变量在被分区集$C_{p}$内的自变量对应的平均值。因此,对于决策树定义的每个分区,可以定义相应的分段函数。这被称为决策树回归。用于定义决策树回归中分裂点的代价函数通常是估计值(由式(10.16)定义)与观测值之间的均方误差,表达式为:
$$\begin{aligned} MSE = \frac{1}{N} \sum _{t=1}^N (L_t-f_P(\textbf{X}_t))^2. \end{aligned}\tag{10.18}$$
当然,决策树可以继续分割成更小的分区,直到每个集合只包含单个观测值,从而降低MSE。然而,这很可能导致回归树的过拟合(第8.1.2节),从而产生较差的预测估计。相反,可以通过校准决策树的一些参数或定义停止准则来控制拟合。有多种不同的参数或参数组合可供选择,以优化回归树的泛化能力,其中最常见的是
· 在每个叶节点中固定最小观测数 min $\l_{p\in 1,\ldots,P}N_{p}$。
• 固定分支节点的最大数量(即分区P的最大值)。
• 树的最大深度(即最大分裂次数)。
这些参数的值通常通过交叉验证(见第8.1.3节)来选择,其中在训练集上使用不同参数训练多种模型,并根据它们在验证集上的表现选择最佳模型。
这些参数的值通常通过交叉验证(参见第8.1.3节)来选择,即在训练集上使用不同参数训练多种不同的模型,并根据它们在验证集上的表现来挑选最佳模型。
为了说明生成回归树的过程,考虑一个简单的一维情况,如图10.10所示。通过从曲线中采样40个点并添加少量噪声来生成观测值。使用每个叶节点中观测值的最小数量的不同选择,即mi $1_{p\in 1,\ldots,P}N_{p}$,生成了两个不同的回归树,本例中分别为10和2。将这些树训练到带噪声的观测值上,得到由方程(10.16)给出的两个函数。这两个回归树的最终函数图如图10.11所示,同时显示了原始曲线。


注意,当观测值更密集时,回归树具有更高的分辨率,回归拟合得更好。特别需要指出的是,函数的两端(x < 2 和 x > 8)并未准确估计。与许多机器学习技术一样,这些估计可能无法准确外推到观测值域外的点。这使得此类方法在预测应用中难以估计训练数据之外的情况。
10.3.2 随机森林回归
如第10.3.1节所述,决策树通常不适用于时间序列预测模型,且通常会生成高方差的模型(参见第8.1.2节)。然而,它们的力量来自于作为其他更强大方法的构建块。这类方法中最常见的一种是本节所述的随机森林回归(RFR)。
RFR的基本前提是生成许多回归树,但仅应用于观测值的随机样本(通常是有放回抽样)。此外,与普通回归树不同,每棵树仅在变量/特征的一个子集上进行分裂。最终的RFR是所有生成的回归函数的平均值。通过在每次分裂中仅使用特征的一个子集,该算法防止回归在强预测上过拟合并导致树之间相关。因此,每个回归树(也称为弱学习器)关注不同的输入特征。随机森林是一种集成技术,因为它考虑了一个弱学习器的“集成”来产生一个强学习器。
现在考虑第10.3.1节的例子,其中用于训练回归树的观测值如图10.10所示。使用100个回归树对该数据进行的随机森林回归如图10.12所示。注意,与图10.11所示的单个回归树相比,RFR拟合比回归树准确得多,且连续性强得多。这是因为通过随机抽样训练数据以及每次分裂中使用的变量,RFR在泛化函数和避免过拟合之间找到了平衡,换句话说,回归树通常产生具有良好偏差-方差权衡的模型(参见第8.1.2节)。如果使用更多的树和更多的数据,该拟合将更加平滑。
随机森林中有许多不同的参数可以通过交叉验证(参见第8.1.3节)进行优化,其中一些最重要的参数包括:
- 树的数量。树越多,模型越准确。然而,这会影响生成估计所需的时间。
- 每个节点分裂时选择多少个变量/特征。对于回归,一种常见的方法是在每个节点分裂时选择三分之一的属性。最好不使用太多变量以避免过拟合。
- 终端/叶节点中的最小观测数。

交叉验证的思想是尝试大量具有上述参数不同选择的回归树,并选择在验证集上产生最小MSE(10.18)的参数组合。
随机森林的一个有用特性是特征重要性工具,它可以检查所有树以评估每个特征的重要性。这之所以能够实现,是因为并非所有树都使用所有变量。因此,可以进行比较,比较特征包含在模型中与不使用时所产生改进的差异。对于回归,需要衡量特征降低方差的程度。这些值在树上的平均得到每个特征的最终重要性,也有助于解释准确预测输出的最强驱动因素。
随机森林之所以受欢迎,是因为它易于实现,同时保持良好的偏差-方差权衡。它们还具有许多其他优点。它们可以处理数千个输入变量而不会过拟合,并且可以结合特征重要性进行特征选择。然而,它们用于时间序列预测的主要缺点是对于样本外数据的预测效果不佳。举例说明,考虑图10.12中的示例。在观测域[1, 10]之外的任何估计都具有相同的固定常数值,并且不太可能准确。
10.3.3 梯度提升回归树
上一节介绍了随机森林回归,这是一种强大的预测模型,使用简单决策树模型的集成来产生准确的预测。
梯度提升回归树(GBRT)也是一种集成技术,使用类似的基本思想,组合弱学习器以创建准确的强学习器。
有几种相关模型,但大多数都是文献[2]中引入的梯度提升机(GBM)的变体,也称为多重加法回归树(MART)和广义提升模型。在随机森林中,简单的决策树回归模型并行训练,它们的预测通过例如平均的方式组合。相比之下,在GBRT中,基学习器按顺序训练,每个学习器都旨在减少先前迭代残差序列中的剩余误差。换句话说,梯度提升模型的主要思想是通过训练新学习器来迭代改进模型,这些新学习器根据某些损失函数明确改进当前预测。优化过程由损失函数的梯度引导。在回归问题中,如负荷预测,损失通常定义为均方误差(第10.3.1节中的式(10.18)),而在分类任务中,则是交叉熵。然而,梯度提升足够通用,可以最小化任意可微损失函数。这使得它也适用于更复杂的任务,例如通过最小化分位数损失来预测分位数(参见第7.2节)。
更准确地说,梯度提升的主要目标是通过弱预测模型的加权和来找到预测,该加权和可以表示为
$$f(\mathbf{X})=\sum_{i=1}^{M}\gamma_{i}h_{i}(\mathbf{X}).$$
找到最优权重$\gamma_{i}$和弱学习器函数$h_{i}$通常是一个计算上不可行的优化问题。因此,梯度提升通过迭代方式找到解决方案,旨在改进M个阶段的模型。在阶段$1,2,\ldots,i,\ldots,M$中的每个阶段i之后,目标是找到一个模型$f_{i}$,该模型通过添加新的估计器$h_{i}$产生比前一次迭代的模型$f_{i-1}$有所改进,即
$$f_{i}(\mathbf{X})=f_{i-1}(\mathbf{X})+\alpha\gamma_{i}h_{i}(\mathbf{X}).$$
这里,α是一个恒定的步长或学习率(第4.3节)。梯度提升过程由损失函数的最陡下降方向引导(也是第4.3节)。因此,考虑一个例子,目标是最小化地面真值与上一次迭代预测$f_{i-1}$之间的均方误差,
$$L_{MSE} = \frac{1}{2} \left( \textbf{L} - f_{i-1}(\textbf{X}) \right) ^2$$
注意,常数因子$\frac{1}{2}$是为了方便(且不失一般性)而引入的,以将损失函数的导数表示为:
$$\frac{\partial L_{MSE}}{\partial f_{i-1}(\textbf{X})} = \textbf{L} - f_{i-1}(\textbf{X})$$
将$h_i(\textbf{X})$定义为损失函数的这个导数:
$$h_{i}(\mathbf{X})=\mathbf{L}-f_{i-1}(X)$$
在GBRT的情况下,回归树用于建模函数 $h_i$。注意,在均方损失的情况下,这意味着回归树 $h_i$ 被拟合到上一轮迭代预测的残差上。权重 $\gamma _i$ 通过求解将上一轮迭代预测 $f_{i-1}$ 和当前轮次基于残差拟合的模型 $h_{i}$ 代入均方误差损失函数的γ优化问题来确定:
$$\underset{\gamma}{\arg\min}=\frac{1}{2}\left(\mathbf{L}-(f_{i-1}(\mathbf{X})+\gamma h_{i}(\mathbf{X}))\right)^{2}$$
求解该优化问题的细节不在本书范围内,但附录D中提供了额外的参考资料。通常,梯度提升中实现的优化与梯度下降相关(回顾第4.3节)。对于除均方误差之外的损失函数,也可以类似地推导该过程,但本书不对此进行讨论。
GBRT及其变体通常有两类超参数:一类与上述迭代梯度提升优化过程相关,另一类与回归树相关。最重要的超参数之一是回归树的数量。与随机森林类似,每棵树的深度(有时通过强制叶节点样本数量下限的参数间接控制)也很重要。在梯度提升优化过程中,最重要的超参数是学习率,在梯度提升中也称为收缩率。它决定了每棵新树对模型的贡献程度。较小的值使模型对特定单棵树的影响更具鲁棒性,即让模型泛化得更好,避免过拟合。但较小的学习率需要更多的树才能收敛到最优值,因此计算成本更高。
如第8.2.5节所述,评估这些超参数的一个重要诊断工具是所谓的偏差图,它展示了训练误差和测试误差随树数量变化的曲线。图10.13展示了这样一个图。训练集上的误差迅速下降,然后逐渐减慢,但随着更多树的加入继续下降。相比之下,测试集上的误差也下降,但在减慢并达到最小值后,损失开始再次增加。训练误差和测试误差之间不断增大的差距表明模型过拟合,而理想点由学习率和树的数量决定。将此图与第8.2节中介绍的更通用版本的图8.5进行比较。

梯度提升具有很高的模型容量,因此容易过拟合。因此,可能需要通过交叉验证来调整其他正则化参数。与随机森林类似,可以通过仅对特征和实例的子集拟合模型(即通过子采样)来隐式引入回归正则化。这可以通过限制特征数量和实例比例的参数来控制。不同的梯度提升实现可能提供额外的显式机制来防止过拟合,这些机制通常会引入更多的超参数。常见的选择例如对权重的L1和L2正则化(见第8.2.4节关于正则化的内容)以及早停法,即如果在若干次迭代后损失没有高于某个阈值改善,则停止训练(第8.2.5节)。
注意,梯度提升是一种通用方法,也可以与其他基学习器一起使用。然而,决策树和回归树是最受欢迎的,因为它们相对简单且训练高效,因此作为基学习器不容易过拟合,但仍然能够建模特征间相互作用的非线性关系。由于该方法在表格数据上的良好性能,已引入了许多不同版本和实现的通用GBM算法 [2]。附录D提供了额外的阅读资料和最流行的梯度提升框架实现。尽管由于超参数众多,使用梯度提升方法可能令人望而却步,但它们是表格数据精确预测中最强大的方法之一,因此在负荷预测中也是如此。不幸的是,预测的准确性是以模型透明性有限为代价的。正如将在第10.6节中讨论的那样,基于树的方法(如随机森林和梯度提升)提供了评估特征重要性的分数。然而,这应仅被视为一个指标,与线性回归等方法相比(参见第9.3节),这些方法并不能提供对特定变量实际效应大小或其显著性的任何理解。
10.4 人工神经网络
本节介绍人工神经网络(ANN),这是一种机器学习技术,松散地受生物神经网络(动物和人类大脑的构建模块)启发。ANN由一组相互连接的人工神经元组成,就像大脑中的突触一样,每个人工神经元可以通过树突向相邻的连接神经元发送信号。如同生物神经网络一样,“学习”通过调整神经元之间的连接来实现。然而,详细的机制(例如学习机制本身(即反向传播)或表示为实数)与生物学模型(尚未完全理解)有很大不同。尽管如此,ANN是一种强大的机器学习方法,被广泛应用于从预测到图像识别的众多应用,并且许多进展正在迅速发展。本节介绍标准形式——前馈网络,以及一种专门处理序列数据的变体——循环神经网络。
10.4.1 前馈神经网络
ANN最简单的构建模块是人工神经元。它通常被称为ANN的节点、单元或细胞。具有一个人工神经元且无隐藏层的神经网络称为感知机。感知机可用作监督学习算法,能够学习非线性决策边界(分类)或函数(回归)。图10.14展示了感知机(一个人工神经元)如何基于n个输入变量预测时刻t的负荷 $L_{t}$。

$X_{1,t},\ldots,X_{n,t}$ 也对应于同一时刻 t。所有 n 个输入可表示为向量 $\mathbf{X_{t}}$。
人工神经元必须训练函数 $h(\mathbf{X_{t}})$,以便当它对输入 $\mathbf{X_{t}}.$ 进行操作时,能够准确估计最终输出。人工神经元的输出称为激活值。为了计算激活值,将输入线性组合后传递给激活函数 $g$,以产生输出信号(激活值):
$$\begin{aligned} \hat{L}_{N+1} = h(\textbf{X}) = g\left( \sum _{k=1}^{n} \beta _k X_{k,N+1}\right) = g\left( \boldsymbol{\beta }^T \textbf{X}_{N+1}\right) \end{aligned}\tag{10.19}$$
注意,技术上还会添加一个常数偏置项,但此处省略以提高可读性。这可以通过将变量 $X_{0,t}=1$ 连接到输入向量 $\mathbf {X_t}$ 来实现。
在感知机中,如果忽略激活函数 $^{g,}$,这只是一个多元线性回归(比较式(10.19)与式(9.4)和式(9.5))。然而,激活函数引入了非线性,相比简单线性回归增加了模型的灵活性。激活函数有多种选择。流行的选择包括 sigmoid 函数、双曲正切 (tanh) 以及最近的 ReLU 函数变体。图10.15展示了一些流行的激活函数及其对应的导数。
(a) Sigmoid
(b) 双曲正切
(c) 修正线性单元 (ReLU)
(d) 带泄漏的 ReLU (Leaky ReLU)

sigmoid 函数是一种非线性变换函数,将值映射到单位区间 [0, 1]。这使得它成为神经网络中的流行选择,因为它可以直接用于二分类器的输出层,其输出可解释为属于某一类别的概率(第3.1节)。sigmoid 函数定义为:
$$\begin{aligned} \sigma (z) = \frac{1}{1+ \textrm{e}^{-z}}, \end{aligned}\tag{10.20}$$
然而,它的计算成本相对较高,并且在神经网络模型中使用时可能导致训练稳定性问题。目前该函数通常仅用于二分类问题。sigmoid 的更一般形式——softmax 函数,用于多类分类。
双曲正切 (tanh) 是另一种流行的神经网络激活函数,定义为
$$\begin{aligned} \textrm{tanh}(z) = \frac{(\textrm{e}^z - \textrm{e}^{-z})}{(\textrm{e}^z + \textrm{e}^{-z})}. \end{aligned}\tag{10.21}$$
与sigmoid函数形状相似,但定义在-1到1之间,将负值映射为负输出,零输入映射为零。然而,其稳定性问题与sigmoid函数类似,因此在现代网络结构中很少使用。
修正线性单元(ReLU)计算效率非常高,不会导致sigmoid和tanh函数那样的稳定性问题,即梯度消失问题(见第10.4.2节)。这使得它成为许多深度神经网络中的默认激活函数。它将小于零的值映射为零,但当输入大于或等于零时等于输入本身,即线性激活,定义如下:
$$\begin{aligned} \textrm{ReLU}(z) = \textrm{max}(0, z). \end{aligned}\tag{10.22}$$
该函数及其导数都是单调的。
ReLU将小于零的值映射为零,且不将较大的激活值映射为较小的数,这导致了不同的稳定性问题,即死亡ReLU(许多激活值为零)或激活爆炸(重复激活导致数值越来越大)。改进版本泄漏ReLU试图解决死亡ReLU问题,当ReLU在模型训练中产生稳定性问题时,可作为替代方案。它引入一个正参数作为负值的乘数,定义如下:
$$\begin{aligned} \mathrm {Leaky~ReLU}_{\alpha }(z) = \textrm{max}(\alpha \cdot z, z). \end{aligned}\tag{10.23}$$
对于感知器,神经元的激活代表最终预测$\hat{L}_{t}$。然而,神经网络的真正力量来自堆叠多个神经元层,其中一层的激活可以传递到网络中的下一层,使后续层能够使用前一层预测作为特征。这就是神经网络如何从简单特征中学习越来越抽象表示的方式。

前馈网络是最简单的多层神经网络形式。在前馈神经网络中,每一层的每个节点都与前一层和后一层的所有节点相连(因此也称为全连接神经网络)。它们也被称为多层感知器或香草神经网络,就像“香草”是最朴素、最标准的冰淇淋口味。2
输入层每个特征有一个节点。输出层每个目标变量(多元回归)或类别(分类)有一个节点。中间的层称为隐藏层,有l个隐藏神经元。图10.16展示了带一个隐藏层的基本结构。
在负荷预测的背景下,人工神经网络用于预测未来负荷。在所示示例中,输出由m个值组成,在本书的应用中,这通常是对未来m步需求的估计,即负荷$L_{N+1}, \dots , L_{N+m}$。为了实现这一预测,它以多个特征作为输入。对于负荷预测,例如可以是时间序列本身的过去值,以及一些过去(和可能的预测)解释变量,例如室外温度。
为了理解人工神经网络的工作原理,考虑尝试使用n个输入$X_{1,N+1},X_{2,N+1},X_{k,N+1},...,X_{n,N+1}$精确预测时间$t=N+1$的负荷$L_{t}$,通过使用ANN框架训练模型f。
换句话说,目标是建模以下关系
$$\begin{aligned} \hat{L}_{N+1\,N} = f(\{X_{1, N+1}, \ldots , X_{n, N+1}\}, \boldsymbol{\beta }), \end{aligned}\tag{10.24}$$
其中$\beta$是人工神经网络的权重(将在下文描述)。与之前的情况一样,输入可以是历史负荷或其他解释变量。在时间序列预测的背景下,输入$X_{k,N+1}$通常包括目标$L_{{N}},L_{{N-1}},L_{{N-2}},\ldots ,L_{{N-W}}$的先前值,以模拟与时间序列过去值的自相关。在ANN的背景下,最多W个历史值的数量有时称为感知野,以模仿生物学类比。此外,特征通常还包括与时间步$t=N+1$相关的一些其他外部特征(参见第6.2节了解更多典型特征)。包含负荷L过去值以及外部值X的人工神经网络有时称为非线性自回归外生模型(NARX)。
为简化起见,以下讨论只考虑如图10.16所示的一个包含l个节点的隐藏层,该算法向更多层的推广是类似的。隐藏层的激活可以像单个感知机的激活那样计算(见式(10.19)),但扩展到该层的每个神经元i:
$$\begin{aligned} h_i(\textbf{X}) = g\left( \sum _{k=1}^{n} \beta ^{(1)}_{k,i} X_{k,N+1}\right) \end{aligned}\tag{10.25}$$
然后我们可以将整个神经网络的定义为:
$$\begin{aligned} \hat{L}_{N+j} = g_o\left( \sum _{i=1}^{l} \beta ^{(2)}_{i,j} h_i(\textbf{X}) \right) , \end{aligned}\tag{10.26}$$
其中 $g_{o}$ 是应用于隐藏层输出g的线性求和的激活函数。
具有大量单元的单隐藏层神经网络能够逼近非常复杂的函数。要使用神经网络进行预测,需要确定图中权重的最优值,这里连接输入到隐藏层的权重 $\beta_{k,i}^{(1)}$ 和从隐藏层到输出的权重 $\beta_{i,j}^{(2)}$ 是使损失函数(通常记为J)最小化的模型参数。在回归任务中,如负荷预测中所遇到的,最常用的是均方误差(MSE),如决策树的式10.18所定义。对于ANN,MSE损失函数可以写成关于神经网络当前权重 $\beta$ 的函数,利用式(10.15)和一些已知的真实值L:
$$\begin{aligned} J_{MSE}({\textbf {L}}, \boldsymbol{\beta }) = \frac{1}{N} \sum _{t=1}^N (L_t-f(\textbf{X}_t, \boldsymbol{\beta }))^2. \end{aligned}\tag{10.27}$$
在寻找最优权重的过程中,这个真实值就是训练数据。训练神经网络的过程最初是从随机值开始。然后将训练集的一批实例送入神经网络,计算所有层的激活值。接着计算损失函数及其梯度。权重沿梯度方向更新以最小化损失。由于更新是按层计算的,从输出层反向传播到输入层,这个过程有时被称为反向传播。
与线性回归中可以在整个数据集上以封闭形式或通过简单的最小二乘回归(8.2.1节)完成优化不同,在神经网络中寻找最优权重的任务更为复杂。回顾4.3节,损失函数通常是非凸的,即可能具有多个局部最优值和鞍点。因此使用4.3节中描述的优化器来调整权重。
从上述描述来看,在设计ANN时有若干不同的选择,即选择其超参数,包括
• 每个隐藏层的节点数,
• 隐藏层的层数,
激活函数的选择,
• 优化器的选择及其超参数。
增加层数和节点数会增加系统中的参数数量,并增加模型过训练的风险。可以通过与8.1.3节和8.2节中讨论的相同技术来避免这种情况。一种选择是通过交叉验证技术选择正确的参数和函数,如8.1.3节所述,其中使用不同数量的节点和层组合训练多个模型。然后可以根据它们在验证集上的表现相互比较训练好的模型。这个过程可能很昂贵,尤其是在训练大量模型时。另一种方法是使用正则化,如8.2.4节所示。这些方法涉及在代价函数中添加与权重大小成比例的惩罚项,从而鼓励参数保持较小(因此降低了ANN的复杂性)。另一种防止过训练的方法是使用早停法(8.2.5节),该方法提前停止算法,以防止ANN过于接近数据集中的噪声进行训练。停止的迭代次数也可以使用交叉验证来决定。
激活函数取决于应用场景。对于隐藏层,如之前所述,常用的函数是sigmoid或tanh函数。在深度神经网络中,整流线性单元(ReLU)是最流行的选择。对于输出层,选择取决于问题类型。在二分类中使用sigmoid函数,在多分类中使用softmax函数。损失函数则为交叉熵损失。在回归中,最后一层是线性的(即无激活函数),损失函数为均方误差。关于优化器及其超参数,流行的选择参见第4.3节。
10.4.2 循环神经网络
前几节的机器学习模型主要集中于固定长度的输入数据。当包含过去观测值以计算如式(10.15)的函数形式时,必须指定窗口长度W或感受野,以确定包含多少过去值。这是因为所有考虑的回归模型都是为处理表格数据(即固定大小输入向量的数据集)而设计的。此外,这些算法通常不对列之间的结构做任何假设,即在结构化数据集中,顺序不应重要³。给定固定长度,无法有效建模需要特定列顺序的依赖关系,而对于序列数据由于自相关,这通常是必须的。此外,如果选择较大的W,则需要大量数据才能建模存在于不同时间尺度上的依赖关系。
然而,在处理时间序列和其他序列数据(如DNA序列、视频分析、声音模式和语言)时,对输入值的长度限制较少可能是有意义的,以便建模长期和短期依赖关系。模型需要学习相关的长度,而不是指定应考虑的输入长度(即感受野)⁴。
回忆前馈神经网络的架构(见图10.16)。该网络由全连接层组成,每个节点与下一层的每个节点相连。网络的结构可以用有向无环图表示。回忆在NARX中,序列数据以负荷L的滞后值和一些外部特征X的形式添加。尽管输入可能是任意长度的序列,但输入$X_{1},\ldots,X_{N}$必须是固定维度n的序列。如前所述,这是因为全连接神经网络只能在这些固定长度的输入上计算函数$f(X_{1},X_{2},\ldots,X_{N})$。然而,对于变化的N值,如何计算更灵活的$f(X_{1},X_{2},\ldots,X_{N})$?
为此,可以通过顺序输入向量并每一步不仅传递当前值$X,X_{k}$,还传递前一步的激活值$Z_{t-1},\mathrm{i}.e.$来循环计算输入:
$$\begin{aligned} Z_{t} = h(Z_{t-1}, X_t)\text {, for } t=1,2,\ldots ,N \end{aligned}\tag{10.28}$$
最终预测值是最终计算的输出:
$$\begin{aligned} f(X_{1},X_{2},\ldots ,X_{N}) = Z_{N} \end{aligned}\tag{10.29}$$
这里,$X_{t}$可以是负荷L和n个特征(例如属于所考虑时间步t的天气或日历变量)的向量$\{L_{t},X_{1,t},\ldots,X_{n,t}\}$。


回忆,h是一个人工神经元,应用激活函数引入非线性。那么Z是激活,有时被称为中间隐藏状态。
包含这种循环连接的神经网络称为循环神经网络(RNN),它们设计用于比常规前馈神经网络更适当地捕捉序列的动态特性。图10.17显示了这种RNN的结构,循环连接显示为循环。
这种随时间推移的激活可以看作是同一网络的多个副本,每个副本都将激活传递给后继者。这使得RNN成为“深度”神经网络,即使技术上只建模了一层。5 RNN可以被视为前馈神经网络,其中每一层的参数(包括常规参数和循环参数)都在时间步上共享。前馈神经网络中的标准连接是同步应用的,用于在同一时间步将每一层的激活传播到后续层,而循环连接则将激活也传播到同一层中的节点,但跨越时间。如图10.18所示,通过提供随时间展开的激活视图可以可视化这一点。
为了理解RNN神经元(以下简称细胞)如何基于旧激活和新值计算新激活,见图10.19。该图通过显示输入$X_{t}$和上一时间步的激活$Z_{t-1}$被拼接,然后传递给激活函数$^{g,}$(在标准RNN中通常是tanh函数)来可视化细胞内的这种激活。因此激活可以写成:

$$\begin{aligned} \mathbf {Z_t} = g\left( \boldsymbol{\beta }^T [\textbf{X}_{t},\mathbf {Z_{t-1}}]\right) = tanh\left( \boldsymbol{\beta }^T [\textbf{X}_{t},\mathbf {Z_{t-1}}]\right) \end{aligned}\tag{10.30}$$
再次,$\beta$表示权重向量,$[\bullet]$表示激活函数,我们使用$\mathbf{X_{t}}$来表示向量$\mathbf{X_{t}}$ g(特征向量)和$\mathbf{Z_{t-1}}$(上一时间步t的激活)的拼接。
从公式(10.30)可以看出,激活函数的递归调用可能导致激活值及其梯度消失或爆炸,特别是在模型训练中计算损失函数及其梯度时(即寻找网络的最优权重)。例如,仅考虑前三步,会导致
$$\begin{aligned} \mathbf {Z_3} = g\left( \boldsymbol{\beta }^T \left[ \textbf{X}_{3},g\left( \boldsymbol{\beta }^T \left[ \textbf{X}_{2},g\left( \boldsymbol{\beta }^T \left[ \textbf{X}_{1},\mathbf {Z_{0}}\right] \right) \right] \right) \right] \right) \end{aligned}\tag{10.31}$$
这里,与权重的重复相乘可能导致非常小或非常大的值。虽然可以通过梯度裁剪等技巧缓解,但标准RNN在建模较长依赖时往往训练不稳定。RNN通常仅能成功建模短期依赖。因此,它们尚未被证明适用于负荷预测,因为负荷预测中常出现更长的依赖,如周甚至年季节性模式。因此,本节不再讨论标准RNN模型的超参数,RNN的介绍仅作为更现代变体(如LSTM和GRU)的背景,这些变体在序列建模中很流行,并已在负荷预测中取得成功。特别是,它们的训练比标准RNN更稳定。这些更现代的技术将在第10.5节中详细探讨。
10.5 深度学习
本章到目前为止的算法被认为是经典机器学习算法。本节介绍的神经网络架构被认为是深度神经网络或机器学习子领域深度学习的一部分。虽然“深度”神经网络的概念在RNN的上下文中已经涉及过,其中“深度”意味着时间上的深度,但发现标准形式的RNN无法建模时间上的长期依赖。因此,它们更像标准前馈神经网络。本章介绍针对RNN的改进,使其能够建模更长期的依赖,因此可以被视为具有许多层的神经网络,即深度。
应注意,目前尚无对人工神经网络何时被认为是“深度”的明确定义。回顾第10.16节中来自ANN的架构图。权重数量随着新层数的增加呈指数增长。区分标准前馈网络与深度神经网络的一种方法是,深度神经网络通常具有如此多的层,以至于全连接层不可行。
但为什么首先要添加很多层?这是因为区分经典机器学习与深度学习的第二种方式。在经典机器学习中,建模流程是首先手工设计特征,然后拟合一个从特征到目标的映射模型。如第4章所述,在经典统计建模中,目标是避免维数灾难,只包含有助于理解过程的变量。然而,在机器学习中,我们关心的是做出最好的预测,而在深度学习中,目标是自动找到合适的特征嵌入或表示,供预测模型使用。当堆叠多个层时,较低层学习更直接的表示,这些表示传递给后续层,后续层可以利用这些简单特征建模更抽象的特征,用于最终预测模型。这个过程通常也被称为表示学习。
虽然这种自动表示学习的新颖建模流程现在已成为计算机视觉和语言建模等领域的默认方式,其中手工特征工程已被主要取代,但对于时间序列和负荷预测,手工特征仍然是一种合适的方法,尤其是在数据量不足的情况下。
10.5.1 现代循环神经网络
从上一节回顾可知,由于数值不稳定性,RNN存在一些问题,导致它们只能建模短期依赖关系。本节介绍RNN的两种最流行的扩展,即门控循环单元(GRU)和长短期记忆网络(LSTM)。回顾第10.4.2节,与前馈网络中的层不同,循环神经网络中的一层接收输入层的输入$\mathbf{X}_{t}$,以及自身上一时间步的激活信号$\mathbf{Z}_{t-1}$,这被称为隐藏状态。
LSTM引入了第二个隐藏状态,即细胞状态。现在,一个细胞的当前状态取决于当前值$\mathbf{X}_{t}$、上一激活$\mathbf{Z}_{t-1}$和上一细胞状态$\mathbf{C}_{t-1}$。这个细胞状态作为细胞的记忆,训练决定了应如何记忆长期和短期值。为了控制遗忘多少输入,LSTM引入了遗忘门、输入门和输出门。图10.20给出了LSTM这些部分的概述。注意门基本上由ANN层(即权重和不同的激活函数)组成。
图10.21给出了每个门的概述。图10.21a显示了遗忘门,它控制从前一细胞状态保留多少以及从当前输入的上一激活添加多少。上一激活和输入被连接起来,并通过sigmoid函数将其映射到0和1之间。通过逐点乘法,这意味着值越接近0,细胞状态“遗忘”得越多;值越接近1,保留得越多。因此,其计算如下:

(a) 遗忘门
(b) 输入门
(c) 输出门

$$\begin{aligned} \mathbf {F_t} = \sigma \left( \boldsymbol{\beta }_F^T [\textbf{X}_{t},\mathbf {Z_{t-1}}]\right) \end{aligned}\tag{10.32}$$
注意,有一个特定于此门的权重向量$\beta_{F}$。
下一部分,如图10.21b所示,称为输入门。它从当前状态中增加或减少。它计算输入值$\mathbf{I}_{t}$和候选值$\tilde{\mathbf{C}}_{t}$如下:
$$\mathbf{I_{t}}=\sigma\left(\boldsymbol{\beta}_{I}^{T}[\mathbf{X}_{t},\mathbf{Z_{t-1}}]\right)$$
$$\tilde{\mathbf{C}}_{t}=\tanh\left(\boldsymbol{\beta}_{C}^{T}[\mathbf{X}_{t},\mathbf{Z}_{\mathbf{t-1}}]\right)$$
然后,更新后的细胞状态$\mathbf{C}_{t}$计算如下:
$$\begin{aligned} \textbf{C}_t = \mathbf {F_t} \textbf{C}_{t-1} + \mathbf {I_t} {\tilde{\textbf{C}}}_{\textbf{t}} \end{aligned}\tag{10.33}$$
再次注意,必须在训练过程中确定的权重向量$\beta_{I}$和$\beta_{C}$。注意,将激活与较早的值相加后再输入到tanh激活函数以计算下一个激活,这与第10.5.3节中描述的残差跳跃连接相关,因为网络可以学习是否应从当前输入添加有用的信息,或者是否应保持旧细胞状态。
最后一部分称为输出门,它学习从细胞状态以及前一个隐藏状态和当前输入中输出什么作为下一个隐藏状态:
$$\mathbf{O}_{\mathbf{t}}=\sigma\left(\boldsymbol{\beta}_{O}^{T}[\mathbf{X}_{t},\mathbf{Z}_{\mathbf{t-1}}]\right)$$
$$\mathbf{Z_{t}}=\mathbf{O_{t}}*tanh(\mathbf{C}_{t})$$
借助这些门,LSTM可以被训练得比标准RNN更稳定,并且在序列建模以及时间序列和负荷预测中广受欢迎。随着时间的推移,已经提出了几种变体,例如窥视孔连接,它使每个门能够访问当前的细胞状态,以及耦合的遗忘门和输入门,它们不再分别决定遗忘什么和保留什么,而是联合做出这些决定。对哪些部分是必要或最有效的全面讨论不属于本书的范围。更多信息参见文献[3, 第10章]。
最流行的相关架构是门控循环单元(GRU)细胞。其主要思想与LSTM类似,也引入了门来控制从以前状态中记住多少。然而,它稍微简单一些,参数也更少。它没有专门的细胞状态,而是引入了重置门和更新门。图10.22给出了GRU细胞的概览。由于它与LSTM类似,本书省略了详细的介绍。通常,它比LSTM更简单,因此训练更快且更不容易过拟合(例如,用于时间序列时)。GRU的描述参见文献[3, 第10章]。
到目前为止,只讨论了单个隐藏层。在实践中,可以将多个LSTM或GRU层堆叠在一起。然而,这会急剧增加参数数量,并可能导致过拟合。当有大量数据可用时,例如,当拟合一个在多个家庭、建筑物或其他计量实例的数据上训练的全局模型时,应该探索多个层。因此,在超参数方面,设计决策类似于前馈神经网络,即层数和每层的隐藏单元数。激活函数如前所述。此外,还需要选择优化器及其超参数。

虽然比RNN更稳定,但LSTM和GRU仍然难以训练,并且可能导致时间序列过拟合。对于更长的时间关系,例如追溯到数百步之前——例如,在周季节性中并不罕见——LSTM和GRU在实际应用中可能会变得非常深。回溯一百步可以解释为一个具有100层的标准前馈网络。通常,LSTM和GRU仍然训练缓慢,因为它们不容易并行化,因为状态必须顺序计算。
10.5.2 卷积神经网络
本节开头提出了堆叠许多层可以学习输入数据越来越复杂表示的想法。考虑对一个具有长感受野的高分辨率时间序列(例如1分钟负荷数据)进行建模。这导致需要包含大量滞后值到模型中,以捕捉短期局部模式和长期趋势。使用常规的全连接神经网络,这将需要将每个输入神经元与下一个隐藏层中的大量神经元连接。隐藏层中的每个节点又连接到下一个隐藏层中的每个神经元(依此类推)。特别是,当输入是多维的,例如在其他领域如图像甚至视频时,即使几个隐藏的全连接层也是不可行的,因为神经网络会有过多的参数。
最近机器学习兴起的主要推动力之一是卷积神经网络(CNN)的成功,它通过使用不同的架构来处理大量参数。例如,为了判断图像中是否包含兔子,CNN可以利用它不需要一次查看整个图像的事实,而是可以依次查看图像中越来越小的部分,因为兔子在图像中的位置并不重要。该架构利用了所谓的不变性,即局部性和平移不变性。标准CNN利用了卷积层和池化层的连续堆叠,下面将对此进行解释。
卷积可以识别数据点中相邻的模式。例如,在图像中,相邻像素是接近的,因为它们在图像所代表的物理世界中也是接近的。类似地,对于许多时间序列,相邻的数据点也是接近的,因为某些行为可能在时间上接近发生。这种局部性可以被卷积利用。卷积是一种数学运算,通过两个函数(连续情况)或矩阵和序列(离散情况)定义。由于本书分析的是负荷数据固有的离散时间步长,本节之后将只考虑离散情况。另外请注意,由于本书关注的是单变量时间序列数据,因此只考虑一维卷积。
考虑两个序列 $\mathbf{X}=(X_{0},X_{1},\ldots,X_{n-1})$ 和 $\mathbf{K}=(K_{-p},K_{-p+1},\ldots,$ $K_{0},\ldots,K_{p})$,长度分别为 n 和 $2p+1$。K 的索引从 $\mathbf{at}-p$ 开始的记法是因为这简化了后续的计算,如下所示。
卷积 $(\mathbf{X}*\mathbf{K})_{n}$ 通过反转其中一个向量(注意,由于上面使用的记法,用 K 这样做会更容易!)并与另一个序列 X 进行滑动点积来计算。换句话说,卷积创建了一个新的序列 $\mathbf{Z}=(Z_{0},Z_{1},\dotsc,Z_{n-1})$,定义为
$$\begin{aligned} Z_n = (\textbf{X}*\textbf{K})_n = \sum _{m=-p}^{p} X_{n-m} \cdot K_{m}. \end{aligned}\tag{10.34}$$
注意,在此求和中可能需要使用已定义序列索引之外的值。在这种情况下,这些值被简单地设为零(这称为零填充)。例如
$$\begin{aligned} Z_0 = X_0 K_{0} + X_1 K_{-1}+ \cdots + X_{p-1} K_{-p} \end{aligned}\tag{10.35}$$
虽然通常对两个序列的长度没有限制,即两者长度可以相同,但在神经网络的背景下,通常一个较长(此处为输入序列 X)而另一个较短(即所谓的滤波器或核,6 K)。图 10.23 示意性地展示了如何使用卷积函数计算目标序列 Z。总结来说,计算卷积的步骤如下:
- 反转核序列 K,然后
- 将核沿输入序列 X 每次移动一个点,并且
- 在每一步中,计算两个对齐序列的点积,即将对齐的值相乘并求和。
得到的序列 Z 是核与输入序列的卷积。在卷积神经网络的背景下,结果可称为特征图,或者更一般地说,它是表示学习背景下输入数据的一种表示。
注意,形式上卷积的定义涉及从负无穷到正无穷的索引。实践中,如方程 (10.35) 所示,在两侧添加零填充。然后可以选择仅保留卷积的非零部分,或者将结果限制在核与输入序列完全重叠的那些值上。

为了理解卷积操作对典型输入序列的影响,考虑图 10.24 中的示例。它展示了以家庭级别的负荷曲线作为输入 X 以及由此产生的特征图 Z。图 10.24a 考虑应用滤波器 $\mathbf{K}=[0.2,0.2,0.2,0.2,0.2,0.2]$ 的效果。由于权重之和为 1,并且根据定义 (10.34),很明显这只是当前值前后值的移动平均。它本质上是对负荷曲线进行平滑。图 10.24b 展示了一个相关的操作。核 $\mathbf{K}=[0.05,0.24,0.40,0.24,0.05]$ 表示高斯分布,即中心点的权重比边缘更大。这也导致了平均,但原始负荷曲线的形状得以更强烈地保留。在图像处理中,此操作常被称为高斯模糊,并被认为比简单地使用等权滤波器更自然的平均滤波器。最后,图 10.24c 显示了一个旨在突出相邻数据点之间变化的核的结果。在图像的背景下,这将检测边缘。在负荷曲线的背景下,它突出了负荷的突然增加和减少。
这些滤波器并不是在卷积神经网络中手动定义的。类似于前馈神经网络中的权重,滤波器的值由训练过程中的优化器确定。输出即特征图随后通过激活函数,因此可以将其视为与前馈神经网络中的激活类似。它可以被视为传递给后续层的学习表示。每一层之后都有与滤波器数量相同的特征图。滤波器可以被视为特征提取器,因为优化过程将强制滤波器专门寻找特定的重复特征,例如上述的平均负荷曲线或突出的边缘,这些特征对后续层有帮助。第一层中的滤波器可以学习基本形状,如边缘或角点,而较后的层可以检测更复杂的组合模式。
卷积神经网络中常用的第二个操作是池化。一维池化实际上是使用聚合函数对输入序列进行下采样。这个聚合函数可以是均值函数,或者更常见的是最大值函数。图 10.25 和图 10.26 示意性地展示了这一点。在图 10.25 中,池化因子或池化大小为 2,即对两个值求平均。因此,最终序列的长度是输入序列的一半。在图 10.26 中,池化因子为 3,但池化操作不是按池化大小移动,而是每次只移动一步,即所谓的步长。



与前述类似,考虑图10.27中的示例。它展示了与之前相同的负荷曲线作为输入X,以及应用池化操作(池化大小和步长均为4)的结果。左侧展示了平均池化。这种操作通常在对负荷曲线进行降采样时使用,此处从15分钟分辨率降至1小时。每个点是当前值与前3个值的平均值。对于用户级负荷曲线,这会使曲线变得平滑,并消除与短暂使用的大功率电器(如烧水壶或吹风机)相关的明显峰值。右侧图展示了最大池化操作。与平均池化相比,它更强地保留了每个被考虑区间的峰值。注意,每个序列的长度现在变为原始序列的四分之一。
卷积层包括将生成的特征图通过激活函数。这些基本构件——卷积层和最大池化层——是CNN的核心部分。图10.28展示了如何将它们堆叠起来处理序列输入,其方式与更常见的2D、3D和4D架构相同,例如在图像和物体识别中使用的架构。在堆叠多个卷积层和最大池化层之后,CNN通常将最后一层的激活输出展平并连接,然后输入到一个全连接神经网络中,该网络利用卷积层和池化层提取的特征表示进行最终预测,如第10.4.1节所述。
(a)平均池化操作。
(b)最大池化操作。

因此,CNN的可训练参数是卷积网络层的滤波器和全连接层的权重。注意,池化层没有可训练参数,它们只是对卷积层的输出进行降采样。由于卷积层本质上充当全连接网络的特征提取器,因此可以将在一个数据集上训练好的滤波器用于全新的数据集,而无需重新训练,只需训练全连接层。这被称为迁移学习或微调(另见第13.4节的讨论)。卷积层的展平输出还可以与额外的特征(记为X)连接起来,以便利用卷积操作不擅长的更多外部协变量来条件化预测。例如,[4]表明,对于住宅负荷预测,这种方式基于日历变量和天气预报进行条件化可以改进预测。
CNN有多个超参数和架构选择。首先,卷积层和池化层的数量。对于卷积层,滤波器的数量和滤波器大小(即核的长度)是重要的超参数。通常选择奇数滤波器大小,因为这使得实现更容易。通常3或5是合理的选择。ReLU是卷积层中最常用的激活函数。对于池化层,最大池化是最常见的选择。这里只需要选择池化大小。在2D情况下,池化大小为2会在两个维度上减小特征图,例如,减小到输入大小的四分之一,因此是合理的选择。同样,对于一维时间序列,大小为4也可以作为合适的初始选择。最后,全连接层的结构、每层节点数及其激活函数需要类似于全连接神经网络进行选择。然而,ReLU是一个合理的默认选择。同样,与其他神经网络模型一样,需要选择优化器及其超参数(见第4.3节的讨论),以及影响训练的其他参数,如批量大小和最大训练轮数。

总的来说,CNN相比循环神经网络有几个优势。它们比LSTM能更好地建模长期依赖关系,因为回溯100步不会使模型“更深”,从而避免了之前讨论的数值问题。此外,它们的训练速度更快,因为滤波器的计算可以轻松并行化,一个滤波器不依赖于其他滤波器。同样,如前所述,在CNN中,部分架构可以重新用于新的但类似的任务。这种迁移学习过程在LSTM和GRU中从未真正奏效过。然而,将预训练模型迁移到新任务已被证明在实践中是一种有效的策略,可以提高泛化能力并大幅减少新任务的训练时间,即有效节省能源,从而降低成本甚至减少$\mathrm{CO}_{2}$排放(参见关于可持续AI的讨论[5])。
然而,在这种标准形式下,CNN在时间序列领域存在几个问题。首先,如果使用大量滤波器和多个层级,模型可能仍然相当庞大且参数众多,容易在时间序列上过拟合,尤其是在感受野较大时。因此,一些使超大型CNN架构训练成为可能的更现代的基本构件也被引入到时间序列中,将在下一节讨论。时间序列的另一个问题是卷积操作本身。从定义和图10.23可以看出,卷积操作在计算滤波器的点积时包含了未来值。对于时间序列预测,这意味着未来值可能从测试期泄露到训练数据中,而这些数据在预测时本应是未知的,从而产生过度乐观的预测。因此,建议使用调整后的CNN版本进行负荷预测,这将在下一章介绍。
10.5.3 时序卷积网络
本节讨论已被证明对处理时间序列有效的卷积神经网络调整,即因果卷积、空洞卷积、残差跳跃连接和 1×1 卷积。虽然这些特性曾是 WaveNet 架构 [6] 的一部分(该架构作为处理原始音频数据的生成模型被提出),但基于这些特性的神经网络架构此后被统称为时序卷积网络(TCN)[7]。下面,我们描述最重要的构建块。
最重要的调整是避免未来数据泄露到训练数据的可能性(参见关于数据泄露的第 13.6.4 节)。虽然可以将零作为填充而非未来值,但有更好的解决方案:因果卷积。为此,卷积运算被简单移位,仅在使用翻转核计算滑动点积时考虑先前值(参见第 10.5.2 节)。图 10.29 示意性地展示了这一点(与图 10.23 中的常规卷积进行比较)。为了正式定义该运算,考虑输入序列 $\mathbf{X}=(X_{0},X_{1},\ldots,X_{n-1})$ 和核 $\mathbf{K}=(K_{0},K_{1},\ldots,K_{k-1})$,长度分别为 n 和 k。那么,我们可以将因果卷积定义为:

$$\begin{aligned} Z_n = (\textbf{X}*_c \textbf{K})_n = \sum _{m=0}^{k-1} X_{n-m} \cdot K_{m}. \end{aligned}\tag{10.36}$$
之前讨论的第二个问题是,较大的感受野(即模型中包含的过去值窗口较大)可能导致不必要的过多参数(因为需要太多滤波器),并且可能不必要地慢(因为需要计算许多卷积)。在传统建模中,通过手动决定仅输入相关过去值(例如仅最近一天、一周前的同一天、两周前的同一天等)来解决此问题。然而,在深度学习中,我们仍然希望输入大量过去值,并让模型自动学习相关特征(即内部表示)。为此,TCN 利用空洞卷积,通过引入膨胀因子 d 来解决此问题,该因子在卷积运算的计算之间添加步长。通过堆叠多层空洞因果卷积,仍然可以覆盖较大的感受野。图 10.30 比较了常规因果卷积和空洞卷积,突出显示了用完全因果卷积(左侧,滤波器大小 $k=4)$)和因果空洞卷积(右侧,滤波器大小 $k=2$ 和膨胀 $d=[1,2,4])$)覆盖相同感受野所需的运算。可以用更小的滤波器大小(即更少的参数)和更少的运算(即更快的训练)覆盖相同的感受野。然后,对于相同的输入序列 $\mathbf{X}=(X_{0},X_{1},\ldots,X_{n-1})$ 和核 $\mathbf{K}=(K_{0},K_{1},\ldots,K_{k-1})$,定义空洞因果卷积运算为:
$$\begin{aligned} Z_n = (\textbf{X}*_d \textbf{K})_n = \sum _{m=0}^{k-1} X_{n-d \cdot m} \cdot K_{m}. \end{aligned}\tag{10.37}$$
TCN 中常见的改进 CNN 的重要思想是残差跳跃连接,该思想因 ResNet [8] 而流行。在此之前,堆叠更多层存在局限,因为随着层数增加,训练变得不稳定,精度下降。然而理论上,增加层数不应降低性能,因为理想情况下,如果更多层导致性能更差,层应该简单地学习恒等映射,从而不改变性能。跳跃连接允许层通过将先前层的激活与后续层的激活相加,从而实际上被设置为恒等映射(即跳过)。对于密集层,这可以通过连接这些激活来实现。更常见的是通过加法实现。因此,跳跃连接本质上允许模型选择层是否对结果增加价值,从而改善大型神经网络架构的结果。回想一下,这类似于输入门与 LSTM 中先前时间步的细胞状态协同工作的方式(参见第 10.5.1 节)。

现代 TCN 中另一个常见的思想是 1×1 卷积,该思想因 Inception 模型 [9] 而流行。1×1 卷积有助于沿滤波器方向降低维度。当仅应用于一个特征图(或输入)时,它只是对每个像素乘以一个常数权重。这本身并无用处。然而,当应用于多个滤波器时,它本质上学习滤波器映射的线性投影,从而减少滤波器数量。这减少了参数数量,同时通过学习权重保留了一些与特征相关的信息。
TCN 通常具有与 CNN 类似的超参数(参见第 10.5.2 节)。然而,当使用空洞卷积时,可以使用两个可能的超参数来增加感受野:膨胀因子 d 和滤波器大小 s。最重要的决策是架构,即构建块如何连接。图 10.31 显示了文献 [7] 中引入的 TCN 架构。一个 TCN 残差块包含两个空洞因果卷积块,每个块后接权重归一化、ReLU 激活和 dropout 层(关于这些正则化技术参见第 8.2 节)。这两个块通过带有 $1\times 1$ 卷积的残差跳跃连接旁路。如果该块处于第一层,则接收输入序列,否则接收前一块的激活 $i-1,Z_{i-1}$,并将其激活 $Z_{i}$ 传递到下一块。注意,在文献和库中,所谓的 TCN 的具体实现细节可能有所不同。基于 WaveNet 的架构已用于住宅负荷预测 [10]。在文献 [11] 中,TCN 用于系统规模的负荷预测。[12] 仅使用因果空洞卷积作为 CNN 架构的一部分,用于拟合住宅负荷预测的不同概率模型的参数。注意,现代 TCN 不使用图像和物体识别中流行的池化层。相反,使用膨胀和 1×1 卷积来减少参数数量。

与 LSTM 和 GRU 相比,TCN 训练效率更高(参见上一节关于 CNN 的讨论)。与标准 CNN 相比,TCN 最重要的是解决了因果性问题。但膨胀、残差跳跃连接和 1×1 卷积等几个思想已被经验证明可以改善常规 CNN,因为它们使训练更稳定,实现更高效的训练,并需要更少的参数。这对于时间序列可能是有益的,因为深度机器学习模型在没有大量训练数据的情况下通常容易过拟合。
10.5.4 展望
如上一节所示,随着更现代化的深度架构的出现,在什么情况下什么方法有效变得越来越不明确。深度学习领域发展非常迅速,在图像和语言建模方面取得了成功,其中一些模型正被越来越多地用于时间序列领域,采用越来越特定的架构。此类模型的许多构建模块已在前面各节中介绍过。
一个例子是N-BEATS [13],它是一种基于全连接残差网络的模型,在M5时间序列预测竞赛中取得了成功,排名第二。它包含一个可解释版本,强制各个堆叠独立学习趋势和季节性。另一个流行的时间序列模型是DeepAR [14],它是一种RNN架构,专门用于概率性间歇需求预测。它跨不同产品拟合全局模型,并基于先前步长的值和一些协变量(例如天气)进行一步预测。它使用高斯或负二项似然函数,其参数由神经网络预测。
另一种完全不同的方法是不使用上述模块的Transformer模型[15]。它们在大多数文本处理任务中超越了所有其他方法,并在图像任务中取得了初步成功。它们也可能非常适合时间序列,因为与CNN相比,它们是真正顺序的,即无需确定感知野。这使得它们能够处理不同长度的输入,而这只有通过使用零填充的CNN和TCN才能实现。与RNN一样,Transformer被设计用于处理顺序输入数据。有些人认为它们是循环神经网络的一种变体,然而,与RNN不同,Transformer一次性处理整个输入数据。它们使用所谓的自注意力机制为输入序列中的任何位置提供上下文。由于不需要逐步处理,它们比RNN具有更好的并行化能力,从而大大减少了训练时间。然而,由于Transformer尚未进入负荷预测文献(尚未),本书将不涉及更多细节。
这就引出了一个更普遍的问题。鉴于深度模型的可能性众多,从何入手并不明确。长期以来,时间序列预测仅通过统计方法来处理,如第9章所述。直到最近,机器学习模型才在特定情况下显示出成功(参见M4和M5预测竞赛[16, 17])。正如第12章中更详细讨论的,首先从简单开始!与图像和文本相比,许多时间序列预测问题的数据可用性较低。因此,当仅对单个实例(例如一栋建筑、一个家庭或一个变电站)进行预测,且仅使用该实例的数据时(参见第13.4节关于局部和全局建模的讨论),统计和传统时间序列模型表现良好。当数据分辨率较低(例如日、周或年时间序列),并且像季节性和其他外部影响等协变量已被充分理解时,它们也表现良好。机器学习与深度学习模型在跨多个时间序列拟合模型时往往表现更好,例如针对多个建筑或家庭的单一模型或层次模型(参见第13.4节)。在概率预测中,当密度分布复杂(例如多模态)时,它们表现良好。此外,它们在对具有复杂非线性外部影响的过程进行模型拟合时可能有用。然而,M5竞赛的一个重要发现是,统计和机器学习模型的组合可以达到最先进的结果,同时保持至少部分可解释性,结合了两者的优势,因此对实际应用特别有用。
10.6 特征重要性与可解释机器学习
本章介绍了几种用于负荷预测的机器学习模型。如前所述,机器学习的目的是学习输入数据的表示以自动改进预测。然而,这以理解输入数据与预测之间关系为代价。由于可解释机器学习是一个有多种不同方法的研究领域,且目前尚无一种方法在负荷预测实践中占主导地位,本书将不深入讨论。
然而,本节将简要讨论以下方法:
• 基于树的方法的特征重要性(模型特定),
• 排列重要性(模型无关),
• SHAP值(模型无关)。
如第10.3节所述,基于树的预测模型内置了特征重要性方法。这些模型试图确定对数据内部表示(即拟合模型)最相关的特征。可以使用不同的衡量标准来评估特征重要性,最常见的是基尼重要性或平均不纯度的减少(MDI)。这些可以与模型一起输出,以提供特征重要性的指标并解释模型。但请注意,这些指标偏向于高基数特征。此外,它们是在模型拟合阶段根据训练集计算的,因此可能无法反映该特征对泛化到测试集和实际应用的预测有用性。因此,它们应仅被视为一个指标。它们之所以有效,是因为在基于树的模型中,每个树只使用变量样本(第10.3节)。这意味着有一部分树没有使用某个输入变量。这样,使用特定变量的性能可以与不使用该变量的性能进行比较。简而言之,可以评估该特征的重要性。
另一种流行的方法是排列重要性。它由Breiman在随机森林的背景下引入[18](关于随机森林的更多细节请参见第10.3.2节)。其思想是随机排列每个特征的值,以分析它如何影响最终的预测结果。这个想法简单且计算成本低。它可以应用于任何拟合模型,并且不限于基于树的方法。虽然由于上述原因而受欢迎,但当数据集包含高度相关的特征时,通常不建议使用,否则可能会偏向于相关特征。
排列重要性与特征重要性可以结合使用,帮助识别输入数据集中所有相关的变量。Boruta算法[19]为随机森林模型添加了一些输入变量的重复副本,但对其进行了排列。因此,这些排列后的变量应与因变量无关,其特征重要性可以与其余(未排列)变量进行比较,以识别哪些变量的重要性低于随机输入。那些重要性更高的变量可以被视为对监督学习模型性能更为相关。
最后,还有SHAP值(SHAP代表SHapley Additive exPlanation)。该理论基于合作博弈论。关于它们如何工作的详细讨论不在本书范围内,但可参阅[20]以了解关于SHAP值的更详细讨论。其输出也是一个特征重要性得分。它们对相关特征表现良好,因为变量之间的相互作用也被分析了。然而,它们计算成本很高,因为其中一步包括构建每个特征的组合。因此,对于大量输入是不可行的,所以通常只计算近似值。
10.7 习题
与上一章一样,对于需要使用真实需求数据的问题,尝试使用附录D.4中列出的一些数据。同样,理想情况下选择至少有一年小时级或半小时级数据的数据集,并按3:1:1的比例将其划分为训练集、验证集和测试集。
- 解释神经网络中激活函数和损失函数之间的区别。它们是如何关联的?解释在为特定任务建模前馈神经网络的过程中如何选择它们每一个。
- 指数线性单元(ELU)是另一种激活函数,是ReLU的有力替代。其定义为:
$$\operatorname{ELU}(z)=\left\{\begin{array}{ll}z,&\text{for}z<0\\\alpha(\mathrm{e}^{z}-1),&\text{for}z\leq 0\end{array}\right.$$
绘制该函数及其导数。讨论与本章讨论的其他激活函数相比可能的优缺点。
- 以一个日负荷曲线为例,该曲线一天内有一些变化,即一些明显的峰值。使用Python中的scipy或numpy等库的卷积实现来计算一些手动选择的核,如图10.24所示,并观察它们对特征图的影响。尝试一个核$\mathbf{K}=[-1.0,2.0,-1.0]$。在实现之前,尝试预测结果会是什么样子。
- 使用TensorFlow8或PyTorch9等神经网络库实现一个简单的NARX,即一个全连接神经网络,接受最近两周的半小时负荷曲线作为输入,并输出下一天的预测。输入层有多少个神经元?输出层有多少个?添加一个具有ReLU激活的全连接隐藏层。为输出层使用适当的激活函数。使用该库输出每个网络架构的权重(或可训练参数)数量,并将其可视化为层数的函数。参数数量如何随层数变化?用不同数量的隐藏层(例如一个和五个)训练你的网络,并可视化训练和验证误差随训练轮数的变化。观察所需的训练时间差异。与较浅的网络相比,你是否观察到较深网络的过拟合?在隐藏层中添加10%、20%和50%的dropout,并观察这是否改变了训练和验证损失的进展。尝试第8.2节讨论的其他正则化方法。
参考文献
- Spyros Makridakis, Evangelos Spiliotis, Vassilios Assimakopoulos,M4竞赛:结果、发现、结论和未来方向。Int. J. Forecast. 34, 802–808 (2018)
- S Makridakis, E Spiliotis, V Assimakopoulos,M5准确性竞赛:结果、发现和结论。Int. J. Forecast (2020)
- A.J. Smola, B. Schölkopf, A tutorial on support vector regression. Stat. Comput. 14, 199–222 (2004)
- Leo Breiman, 随机森林. Mach. Learn. 45(1), 5–32 (2001)
- J.H. Friedman, 贪婪函数近似:一种梯度提升机器. Ann. Stat. 1189–1232 (2001)
- M.B. Kursa, W.R. Rudnicki, 使用Boruta包进行特征选择 36, 1–13 (2010)
- I. Goodfellow, Y. Bengio, A. Courville, Deep Learning (MIT Press, 2016). http://www.deeplearningbook.org
- S.M. Lundberg, S.I. Lee, 一种统一的方法来解释模型预测. Adv. Neural Inf. Process. Syst. 30 (2017)
- A. Elvers, M. Voß, S. Albayrak, 使用卷积神经网络在低聚合水平进行短期概率负荷预测, 载于 2019 IEEE Milan Powertech (IEEE, 2019), 第1–6页
- L.H. Kaack, P.L. Donti, E. Strubell, G. Kamiya, F. Creutzig, D. Rolnick, 使人工智能与气候变化减缓保持一致. Nat. Clim. Chang. 1–10 (2022)
- A. van den Oord, S. Dieleman, H. Zen, K. Simonyan, O. Vinyals, A. Graves, N. Kalchbrenner, A. Senior, K. Kavukcuoglu, Wavenet: a generative model for raw audio (2016). arXiv:1609.03499
- S. Bai, J.Z. Kolter, V. Koltun, 通用卷积和循环网络用于序列建模的实证评估 (2018). arXiv:1803.01271
- K. He, X. Zhang, S. Ren, J. Sun, 深度残差学习用于图像识别, 载于 IEEE计算机视觉与模式识别会议论文集 (2016), 第770–778页
- C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, A. Rabinovich, 通过卷积更深入, 载于 IEEE计算机视觉与模式识别会议论文集 (2015), 第1–9页
- M. Voss, C. Bender-Saebelkampf, S. Albayrak,基于卷积神经网络的住宅短期负荷预测,载于《2018年IEEE智能电网通信、控制与计算技术国际会议(SmartGridComm)》(2018),第1–6页。
- P. Lara-Benítez, M. Carranza-García, J.M. Luna-Romera, J.C. Riquelme, Temporal convolutional networks applied to energy-related time series forecasting. Appl. Sci. 10(7), 2322 (2020)
- M. Arpogaus, M. Voss, B. Sick, M. Nigge-Uricher, O. Dürr, Short-term density forecasting of low-voltage load using Bernstein-polynomial normalizing flows. IEEE Trans. Smart Grid (2023). pp. 1–1. https://doi.org/10.1109/TSG.2023.3254890
- B.N. Oreshkin, D. Carpov, N. Chapados, Y. Bengio, N-beats: neural basis expansion analysis for interpretable time series forecasting (2019). arXiv:1905.10437
- David Salinas, Valentin Flunkert, Jan Gasthaus, Tim Januschowski, Deepar: probabilistic forecasting with autoregressive recurrent networks. Int. J. Forecast. 36(3), 1181–1191 (2020)
- A. Vaswani, N. Shazeer, N. Parmar, J. Uszkoreit, L. Jones, A.N. Gomez, Ł. Kaiser, I. Polosukhin, Attention is all you need. Adv. Neural Inf. Process. Syst. 30 (2017)
除非在材料的致谢行中另有说明,本章中的图像或其他第三方材料均包含在本章的知识共享许可中。如果材料未包含在本章的知识共享许可中,且您的预期使用不被法定法规允许或超出允许使用范围,您将需要直接获得版权持有人的许可。