2

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

我想要做的是训练一个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其实就是我未来的因变量。因此,例如,对于 ap=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另一种工具,或者只是我训练不正确。

谢谢你的帮助,阿尔多。

4

1 回答 1

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

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

于 2012-08-31T08:42:37.057 回答