2

電力消費量の予報器を開発しようとしています。そこで、1 年間の毎日のデータを使用して回帰を実行したいと考えています。私のデータセットにはいくつかの機能があります。グーグルで調べてみると、私の問題は重回帰の問題であることがわかりました (間違っている場合は訂正してください)。

私がやりたいことはsvm、いくつかの独立変数と 1 つの従属変数を使用して回帰を訓練し、n 日の遅れをとることです。これが私の独立変数のサンプルです。実際には約 10PCA個あります。

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の場合、3 つの独立変数すべての最初の 2 つの時系列でトレーニングすることを期待します。

Indep1   Indep2    Indep3
1.53     2.33      3.81
1.71     2.36      3.76

従属変数の出力値は "1.83" (時間 3 の Indep 変数 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 を 2 次元配列にしてみましたが、それを数日間組み合わせると 3 次元配列になり、libsvmできないと言われます。

おそらくlibsvm、別のツールに変更する必要があるか、それともトレーニングが間違っているだけなのかもしれません。

助けてくれてありがとう、アルド。

4

1 に答える 1

1

python / numpy 表記で答えさせてください。

列 (Indep1、Indep2、Indep3、...) を持つ元の時系列データ マトリックスが shape の numpy 配列dataであると仮定します(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)

これで、 libsvm またはscikit-learn にフィードできる 2D 入力配列 + 1D ターゲットができました。

編集:移動平均、移動最小、移動最大、移動差(信号の時間ベースの導関数)、またはSTFTなどのより時系列指向の機能を抽出すると、SVMモードがより良い予測を行うのに役立つ場合があります。

于 2012-08-31T08:42:37.057 に答える