sklearn TimeSeriesSplit cross_val_predict 仅适用于分区

Posted

技术标签:

【中文标题】sklearn TimeSeriesSplit cross_val_predict 仅适用于分区【英文标题】:sklearn TimeSeriesSplit cross_val_predict only works for partitions 【发布时间】:2017-06-04 20:39:22 【问题描述】:

我正在尝试将 sklearn 版本 0.18.1 中的 TimeSeriesSplit 交叉验证策略与 LogisticRegression 估计器一起使用。我收到一条错误消息:

cross_val_predict 仅适用于分区

下面的代码 sn -p 展示了如何重现:

from sklearn import linear_model, neighbors
from sklearn.model_selection import train_test_split, cross_val_predict, TimeSeriesSplit, KFold, cross_val_score
import pandas as pd
import numpy as np
from datetime import date, datetime

df = pd.DataFrame(data=np.random.randint(0,10,(100,5)), index=pd.date_range(start=date.today(), periods=100), columns='x1 x2 x3 x4 y'.split())


X, y = df['x1 x2 x3 x4'.split()], df['y']
score = cross_val_score(linear_model.LogisticRegression(fit_intercept=True), X, y, cv=TimeSeriesSplit(n_splits=2))
y_hat = cross_val_predict(linear_model.LogisticRegression(fit_intercept=True), X, y, cv=TimeSeriesSplit(n_splits=2), method='predict_proba')

我做错了什么?

【问题讨论】:

如何在堆叠上下文中使用 TimeSeriesSplit 和 cross_val_predict:datascience.stackexchange.com/a/105116/76808 【参考方案1】:

有几种方法可以在cross_val_score 中传递cv 参数。在这里,您必须通过生成器进行拆分。例如

y = range(14)
cv = TimeSeriesSplit(n_splits=2).split(y)

提供一个生成器。有了这个,您可以生成 CV 训练和测试索引数组。第一个看起来像这样:

print cv.next()
    (array([0, 1, 2, 3, 4, 5, 6, 7]), array([ 8,  9, 10, 11, 12, 13]))

您还可以将数据框作为split 的输入。

df = pd.DataFrame(data=np.random.randint(0,10,(100,5)), 
                  index=pd.date_range(start=date.today(), 
                  periods=100), columns='x1 x2 x3 x4 y'.split())

cv = TimeSeriesSplit(n_splits=2).split(df)
print cv.next()
    (array([ 0,  1,  2, ..., 31, 32, 33]), array([34, 35, 36, ..., 64, 65, 66]))

在你的情况下这应该有效:

score = cross_val_score(linear_model.LogisticRegression(fit_intercept=True), 
                         X, y, cv=TimeSeriesSplit(n_splits=2).split(df))

查看cross_val_score 和TimeSeriesSplit 了解详情。

【讨论】:

14range(14) 中是什么?那是一个任意的数字吗?与数据框值相同。我不太清楚你是如何得出这些价值观的。 14 是任意的,并且 - 如前所述 - 一个示例。关于数据框:看看问题,我只是复制它。

以上是关于sklearn TimeSeriesSplit cross_val_predict 仅适用于分区的主要内容,如果未能解决你的问题,请参考以下文章

sklearn可视化不同数据划分方法的差异:KFold, ShuffleSplit,StratifiedKFold, GroupKFold, StratifiedShuffleSplit.......

sklearn数据集划分

sklearn 模型选择和评估

有没有办法使用 SKlearn 获得滑动嵌套交叉验证?

将 GridSearchCV 与 TimeSeriesSplit 一起使用

如 scikit-learn 的文档中所述,如何在 cv 中使用 TimeSeriesSplit