使用 libsvm 具有滞后时间序列的多元回归

Posted

技术标签:

【中文标题】使用 libsvm 具有滞后时间序列的多元回归【英文标题】:Multiple regression with lagged time series using libsvm 【发布时间】:2012-08-25 18:56:05 【问题描述】:

我正在尝试开发一种电力消耗预测器。所以我想使用一整年的每日数据进行回归。我的数据集有几个特征。谷歌搜索我发现我的问题是Multiple regression 问题(如果我弄错了,请纠正我)。

我想要做的是训练一个svm 用于回归,其中包含多个自变量和一个具有 n 滞后天数的因变量。这是我的自变量的一个样本,我实际上有大约 10 个。(我们使用PCA 来确定哪些变量与我们的问题有一定的相关性)

Day     Indep1    Indep2    Indep3
1       1.53      2.33      3.81
2       1.71      2.36      3.76
3       1.83      2.81      3.64
...     ...       ...       ...
363     1.5       2.65      3.25
364     1.46      2.46      3.27
365     1.61      2.72      3.13

而自变量1实际上是我未来的因变量。因此,例如,对于 p=2(滞后天数),我希望我的 svm 使用所有三个独立变量的前 2 个时间序列进行训练。

Indep1   Indep2    Indep3
1.53     2.33      3.81
1.71     2.36      3.76

因变量的输出值为“1.83”(时间 3 上的独立变量 1)。

我的主要问题是我不知道如何正确训练。我所做的只是将所有 features-p 放入我的“x”变量和“y”变量的数组中,我只是将我的自变量放在 p+1 上,以防我想预测第二天的功耗。

培训示例。

x with p = 2 and 3 independent variables            y for next day
[1.53, 2.33, 3.81, 1.71, 2.36, 3.76]                [1.83]

我尝试将 x 作为一个二维数组,但是当你将它组合几天后它变成了一个 3d 数组,libsvm 说它不可能。

也许我应该从libsvm 更改为另一个工具,或者只是我训练不正确。

感谢您的帮助, 阿尔多。

【问题讨论】:

【参考方案1】:

让我用 python / numpy 表示法回答。

假设具有列 (Indep1, Indep2, Indep3, ...) 的原始时间序列数据矩阵是一个形状为 (n_samples, n_variables) 的 numpy 数组 data。让我们为这个例子随机生成它:

>>> import numpy as np
>>> n_samples = 100, n_variables = 5
>>> data = np.random.randn(n_samples, n_variables)
>>> data.shape
(100, 5)

如果您想使用 2 个时间步长的窗口大小,则可以按如下方式构建训练集:

>>> targets = data[2:, 0]  # shape is (n_samples - 2,)
>>> targets.shape
(98,)
>>> features = np.hstack([data[0:-2, :], data[1:-1, :]])  # shape is (n_samples - 2, n_variables * 2)
>>> features.shape
(98, 10)

现在您有了 2D 输入数组 + 1D 目标,您可以将它们提供给 libsvm 或 scikit-learn。

编辑:很可能会提取更多面向时间序列的特征,例如移动平均值、移动最小值、移动最大值、移动差异(信号的基于时间的导数)或 @ 987654322@ 可能会帮助您的 SVM 模式做出更好的预测。

【讨论】:

您是说训练将在时间 +2 时与目标一起发生?如何使用滞后天数? (使用 p days * n_features 计算某一天的训练/预测)。 没关系,我完成了对您的建议的理解/测试。我的数据非常相似,但训练中发生了一些奇怪的事情。在进行验证时,它总是给我相同的输出,我正在改变我的目标。 您需要对参数的最佳值进行网格搜索(例如,具有高斯核的 SVR 模型的 C 和 gamma)。请参阅 libsvm 或 scikit-learn 的文档了解更多详细信息。

以上是关于使用 libsvm 具有滞后时间序列的多元回归的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 的 libsvm 支持具有高维输出的向量回归

使用 sklearn - python 具有分类特征的多元线性回归

LIBSVM 是不是会处理训练中的缺失值?

时间序列

如何在 Python Pandas 回归模型中使用滞后时间序列变量?

Python使用matplotlib可视化时间序列自回归ACF图和偏自回归PACF图ACF图显示了时间序列与其自身滞后的相关性PACF显示了任何给定的滞后(时间序列)与当前序列的自相关性