私は機械学習の問題を解決しようとしています。私は時系列の要素で特定のデータセットを持っています。この問題のために私はよく知られているPythonライブラリ - sklearn
を使用しています。このライブラリには多くのクロス検証イテレータがあります。また、相互検証を定義するためのイテレータがいくつかあります。問題は、時系列の単純な相互検証を定義する方法がわからないことです。ここで私が取得しようとしているものの良い例です。sklearn:時系列データのユーザー定義クロス検証
は、我々はいくつかの期間(年)を持って、我々は次のようにいくつかのチャンクに設定我々のデータを分割したいとします
data = [1, 2, 3, 4, 5, 6, 7]
train: [1] test: [2] (or test: [2, 3, 4, 5, 6, 7])
train: [1, 2] test: [3] (or test: [3, 4, 5, 6, 7])
train: [1, 2, 3] test: [4] (or test: [4, 5, 6, 7])
...
train: [1, 2, 3, 4, 5, 6] test: [7]
私ができます」 Sklearnツールを使ってこの種の相互検証を作成する方法を実際に理解しています。おそらく私はそのようなsklearn.cross_validation
からPredefinedSplit
を使用する必要があります。
train_fraction = 0.8
train_size = int(train_fraction * X_train.shape[0])
validation_size = X_train.shape[0] - train_size
cv_split = cross_validation.PredefinedSplit(test_fold=[-1] * train_size + [1] * validation_size)
結果:
train: [1, 2, 3, 4, 5] test: [6, 7]
しかし、まだそれがない以前のデータが
データセット内の変数は何ですか?分割するために時系列を使用することが重要なのはなぜですか。ランダムに分割するのはなぜですか。 – maxymoo
次のように、scikit-learnを使わなくても分割を生成することができます: 'cv_split = [(data [:i]、data [i:])for i in range(1、len(data))]'どう思いますか? –
@maxymoo、時系列データとランダムに分割されない理由は、時間が重要である(あなたが特定した他の機能だけでなく) "野生の中で"未来のデータに対してモデルを訓練することは決してないからです。したがって、モデルのテストでは、同様に動作し、テスト日以降のデータを訓練しないでください。 – dslack