2017-10-11 3 views
0

グループ(grp列)に基づいて時系列クロスバリデーションを行いたい。以下のサンプルデータでは、温度が、私はこのコードを使用してGRPに基づいていくつかのラグの機能を追加するために滑走していますtimeseriesデータの階層化されたクロス検証

import numpy as np 
import pandas as pd 
timeS=pd.date_range(start='1980-01-01 00:00:00', end='1980-01-01 00:00:05', 
freq='S') 
df = pd.DataFrame(dict(time=timeS, grp=['A']*3 + ['B']*3, material=[1,2,3]*2, 
temperature=['2.4','5','9.9']*2)) 


    grp material temperature time 
0 A 1  2.4    1980-01-01 00:00:00 
1 A 2  5     1980-01-01 00:00:01 
2 A 3  9.9    1980-01-01 00:00:02 
3 B 1  2.4    1980-01-01 00:00:03 
4 B 2  5     1980-01-01 00:00:04 
5 B 3  9.9    1980-01-01 00:00:05 

変数の私の目標です。私はsklearn sklearn.model_selection.TimeSeriesSplitからこの機能を使用することができ、クロス検証を行う際に

df.groupby("grp")['temperature'].shift(-1) 
0  5 
1 9.9 
2 NaN 
3  5 
4 9.9 
5 NaN 
Name: temperature, dtype: object 

私は今の問題はあるが、それはグループの影響を考慮に入れていません。誰も私はどのようにグループごとのCV分割を行うことができます(層別分割のような)私に教えてもらえますか? xvboost.cvを使ってcvを使ってみましょう。

編集:グループごとに時間が変更されます。グループ

答えて

0

内均一(秒)時間の増加は、次はそれを行う必要があります。

series = Series.from_csv('yourfile.csv', header=0) 
    X = series.values 
    n_train = 500 
    n_records = len(X) 
    for i in range(n_train, n_records): 
     train, test = X[0:i], X[i:i+1] 
     print('train=%d, test=%d' % (len(train), len(test))) 
関連する問題