scikit-learn:cross_val_predict 仅适用于分区

Jam*_*rds 6 python time-series scikit-learn cross-validation

我正在努力研究如何在 sklearn 中实现 TimeSeriesSplit。

下面链接中的建议答案产生了相同的 ValueError。

sklearn TimeSeriesSplit cross_val_predict 仅适用于分区

这里是我的代码中的相关位:

from sklearn.model_selection import cross_val_predict
from sklearn import svm

features = df[df.columns[0:6]]
target = df['target']

clf = svm.SVC(random_state=0)

pred = cross_val_predict(clf, features, target, cv=TimeSeriesSplit(n_splits=5).split(features))
Run Code Online (Sandbox Code Playgroud)
ValueError                                Traceback (most recent call last)
<ipython-input-57-d1393cd05640> in <module>()
----> 1 pred = cross_val_predict(clf, features, target, cv=TimeSeriesSplit(n_splits=5).split(features))

/home/jedwards/anaconda3/envs/py36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in cross_val_predict(estimator, X, y, groups, cv, n_jobs, verbose, fit_params, pre_dispatch, method)
    407 
    408     if not _check_is_permutation(test_indices, _num_samples(X)):
--> 409         raise ValueError('cross_val_predict only works for partitions')
    410 
    411     inv_test_indices = np.empty(len(test_indices), dtype=int)

ValueError: cross_val_predict only works for partitions
Run Code Online (Sandbox Code Playgroud)

Mat*_*uns 7

cross_val_predict 不能与 TimeSeriesSplit 一起使用,因为 TimeSeriesSplit 的第一个分区永远不是测试数据集的一部分,这意味着没有对其进行预测。

例如当你的数据集是 [1, 2, 3, 4, 5]

  • 折叠 1 - 训练:[1],测试:[2]
  • 折叠 2 - 训练:[1, 2],测试:[3]
  • 折叠 3 - 训练:[1, 2, 3],测试:[4]
  • 折叠 4 - 训练:[1, 2, 3, 4],测试:[5]

在测试集中没有一个折叠是 1

如果您想对 2-5 进行预测,您可以手动循环遍历由您的 CV 生成的分割并自己存储 2-5 的预测。