我正在努力开发一个电力消费预报员。所以我想用一整天的日常数据进行回归。我的数据集有几个功能。谷歌搜索我发现我的问题是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
改为另一种工具,或者只是因为我训练不正确。
感谢您的帮助, 艾度。
答案 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模式做出更好的预测。