scikit-learn:cross_val_predict仅适用于分区

时间:2017-04-07 10:14:37

标签: python scikit-learn cross-validation

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

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

sklearn TimeSeriesSplit cross_val_predict only works for partitions

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

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))

ValueError Traceback(最近一次调用最后一次)  in() ----> 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,方法)     407     408如果不是_check_is_permutation(test_indices,_num_samples(X)): - > 409引发ValueError('cross_val_predict仅适用于分区')     410     411 inv_test_indices = np.empty(len(test_indices),dtype = int)

ValueError:cross_val_predict仅适用于分区

1 个答案:

答案 0 :(得分:4)

cross_val_predict无法与TimeSeriesSplit一起使用,因为TimeSeriesSplit的第一个分区永远不是测试数据集的一部分,这意味着没有为它做出预测。

e.g。当您的数据集是[1,2,3,4,5]

  • fold 1 - train:[1],test:[2]
  • fold 2 - train:[1,2],test:[3]
  • fold 3 - train:[1,2,3],test:[4]
  • fold 4 - train:[1,2,3,4],test:[5]

在测试集中没有任何折叠为1

如果你想要预测2-5,你可以手动循环你的简历生成的分割,并自己存储2-5的预测。