簡體   English   中英

時間序列數據的分層交叉驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM