【问题标题】:Sklearn : Get last split from timeSeriesSplitSklearn:从 timeSeriesSplit 获取最后一次拆分
【发布时间】:2018-12-10 02:24:36
【问题描述】:

所以我使用 sklearn 中的timeSeriesSplit 像这样拆分我的数据,

tscv = TimeSeriesSplit(n_splits=3)

现在我知道为了获得拆分索引,我们必须遍历 tscv.split(X)。我的问题是,是否可以直接进入最后一个拆分,而无需遍历拆分。函数返回的对象并不完全是一个列表,所以我不知道该怎么做?我只需要最后一次拆分,因为我的数据很大而且没有。分割数也很大。

提前致谢

【问题讨论】:

    标签: python machine-learning scikit-learn cross-validation


    【解决方案1】:
    TimeSeriesSplit 中的

    Split 方法生成索引拆分为了获得特定的拆分,您需要对其进行迭代它被用来迭代所有可能的分割以进行时间序列交叉验证

    如果 cv 拆分中的测试数据大小等于 s。然后,无论您进行多少次拆分,最后一次拆分设置 train_data = all data except last s data pointtest_data as last s data points。因此,如果您想直接进行最后一次拆分:切片数据。例如。如果你的数据是一个 numpy 数组 X:

    import numpy as np
    from sklearn.model_selection import TimeSeriesSplit
    X = np.array([[1, 2], [0, 4], [1, 2], [2, 4] ,[1, 2], [7, 4], [8, 2], [5, 4]])
    
    n_splits = 2                                       # select no of splits required
    tscv = TimeSeriesSplit(n_splits = n_splits)
    
    n_samples = X.shape[0]                             # this is how test_size (s)
    s = n_samples//(n_splits + 1)                      # is evaluated internally              
    
    X_train_last, X_test_last = X[ :-s], X[-s: ]       # s=2 for this split
    
    X_train_last
    # array([[1, 2],
    #        [0, 4],
    #        [1, 2],
    #        [2, 4],
    #        [1, 2],
    #        [7, 4]])
    
    X_test_last
    # array([[8, 2],
    #       [5, 4]])
    

    另外,如果你设置了“max_train_size”,同时拆分。那么你在切片时也需要注意这一点。详情请参考 TimeSeriesSplit documentation here

    【讨论】:

    • 在上面的示例中,我无法理解使用 TimeSeriesSplit 函数添加了什么值。所有工作都在以下三行中完成。能详细点吗?
    • @Anne 考虑到用户在他们的分析中某处同时使用了TimeSeriesSplit 方法和最后一个切片,因此回答了这个问题。如果您不打算遍历所有拆分,那么它对您毫无用处。
    猜你喜欢
    • 2013-12-28
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2014-02-18
    • 2018-12-26
    • 2016-09-20
    相关资源
    最近更新 更多