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

时间:2012-08-30 23:48:48

标签: regression svm libsvm

我正在努力开发一个电力消费预报员。所以我想用一整天的日常数据进行回归。我的数据集有几个功能。谷歌搜索我发现我的问题是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上的Indep变量1)。

我的主要问题是我不知道如何正确训练。我正在做的只是将所有feature-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 个答案:

答案 0 :(得分:1)

让我用python / numpy符号回答。

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

>>> 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

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