[英]Stratified Cross validation of timeseries data
我想基于组(grp列)进行时间序列交叉验证。 在下面的示例数据中,温度是我的目标变量
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
我计划使用此代码添加一些基于grp的延迟功能。
df.groupby("grp")['temperature'].shift(-1)
0 5
1 9.9
2 NaN
3 5
4 9.9
5 NaN
Name: temperature, dtype: object
我现在的问题是,当我进行交叉验证时,我可以使用sklearn sklearn.model_selection.TimeSeriesSplit中的此函数,但它没有考虑组效果。 任何人都可以告诉我如何进行每组的CV分割(如分层拆分)? 如果有帮助,我将使用xgboost.cv作为cv。
编辑:每组的时间变化。 时间在组内均匀(每秒)增加
以下应该这样做:
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)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.