python - sklearn : User defined cross validation for time series data

标签 python scikit-learn cross-validation

我正在尝试解决机器学习问题。我有一个包含时间序列 元素的特定数据集。对于这个问题,我使用了著名的 python 库 - sklearn。这个库中有很多交叉验证迭代器。还有几个迭代器用于自己定义交叉验证。问题是我真的不知道如何为时间序列定义简单的交叉验证。这是我想要获得的一个很好的例子:

假设我们有几个时期(年),我们想将我们的数据集分成几个 block ,如下所示:

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]

但还是不如之前的数据拆分好

最佳答案

您无需使用 sklearn 即可获得所需的交叉验证拆分。这是一个例子

import numpy as np

from sklearn.svm import SVR
from sklearn.feature_selection import RFECV

# Generate some data.
N = 10
X_train = np.random.randn(N, 3)
y_train = np.random.randn(N)

# Define the splits.
idxs = np.arange(N)
cv_splits = [(idxs[:i], idxs[i:]) for i in range(1, N)]

# Create the RFE object and compute a cross-validated score.
svr = SVR(kernel="linear")
rfecv = RFECV(estimator=svr, step=1, cv=cv_splits)
rfecv.fit(X_train, y_train)

关于python - sklearn : User defined cross validation for time series data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928131/

相关文章:

python - 任意形状 NumPy 数组的点积

python - Scikit 学习交叉验证拆分

machine-learning - 在给定连续类标签的情况下使用反向传播神经网络

python - cross_val_score 返回的分数与我的交叉验证分数的自定义实现有何差异?

keras - 一个时期后过度拟合

python - 如何使用Python获取PE文件的指令?

python - 异常是 : unsupported operand type(s) for -: 'str' and 'datetime.timedelta'

Python简单打字机效果

machine-learning - 分类器中的 scikit-learn retrofit /部分拟合选项

python - python安装scikit-learn的问题