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

Posted

技术标签:

【中文标题】如 scikit-learn 的文档中所述,如何在 cv 中使用 TimeSeriesSplit【英文标题】:How to use TimeSeriesSplit in cv as mentioned in the documentation of scikit-learn 【发布时间】:2018-10-20 10:20:51 【问题描述】:
tss = TimeSeriesSplit(max_train_size=None, n_splits=10)
l =[]
neighb = [1,3,5,7,9,11,13,12,23,19,18]
for k in neighb:
    knn = KNeighborsClassifier(n_neighbors=k, algorithm='brute')
    sc = cross_val_score(knn, X1, y1, cv=tss, scoring='accuracy')
    l.append(sc.mean())

尝试使用10折TimeSeries Split,但是在cross_val_score的文档中,给出了我们需要传递一个交叉验证生成器或一个iterable。在时间序列分成训练和测试数据到 cv 后,我应该如何传递它

类型错误 Traceback(最近一次通话最后一次) 在 ()

 14 for k in neighb:

 15     knn = KNeighborsClassifier(n_neighbors=k, algorithm='brute')

---> 16 sc = cross_val_score(knn, X1, y1, cv=tss, score='accuracy')

 17     l.append(sc.mean())

 18 ~\Anaconda3\lib\site-packages\sklearn\cross_validation.py in cross_val_score(estimator, X, y, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch)

1579 训练,测试,详细,无, 第1580章)

-> 1581 用于训练,在 cv 中测试)

1582 返回 np.array(scores)[:, 0]

1583

TypeError: 'TimeSeriesSplit' 对象不可迭代

【问题讨论】:

尝试使用 10 fold TimeSeries Split,但是在 cross_val_score 的文档中,给出了我们需要传递一个交叉验证生成器或一个迭代器。在时间序列分成训练和测试数据到 cv 后,我应该如何传递它 我已经更新了答案,见Edit2。这就是我要求完整代码的原因。 删除不推荐使用的类后可以使用。 【参考方案1】:

只需将tss 传递给cv

scores = cross_val_score(knn, X_train, y_train, cv=tss , scoring='accuracy')

无需拨打tss.split()

更新: 上述方法在 scikit-learn v0.19.1 上进行了测试。因此,请确保您拥有最新版本。我也在使用TimeSeriesSplit from model_selection 模块。

编辑 1

你现在正在使用这个:

tss = TimeSeriesSplit(n_splits=10).split(X_1)
kn = KNeighborsClassifier(n_neighbors=5, algorithm='brute') 
sc = cross_val_score(kn, X1, y1, cv=tss, scoring='accuracy') 

但在您发布的问题中,您这样做了:

tss = TimeSeriesSplit(n_splits=10)

查看它们之间的区别(split() 不存在)。我在cross_val_score() 中使用这个tss,没有split(),正如您在问题中发布的那样。

编辑 2

老兄,您正在使用已弃用的类。 目前你正在这样做:

from sklearn.cross_validation import cross_val_score

这是错误的。你应该会收到这样的警告:

DeprecationWarning:此模块在 0.18 版中已弃用,取而代之的是 所有重构类所在的 model_selection 模块 和功能被移动。还要注意新CV的界面 迭代器与此模块的不同。这个模块将是 在 0.20 中删除。

注意这一点,并像这样使用model_selection 模块:

from sklearn.model_selection import cross_val_score

那么我的代码就不会出错了。

【讨论】:

好的,我试试用这个。 这将不起作用,因为 TimeSeriesSplit 不可迭代 @DhruvBhardwaj。我在发布之前检查了此代码,并按预期工作。请分享您当前错误的更多详细信息。另请阅读更新后的答案 tss = TimeSeriesSplit(n_splits=10).split(X_1) kn = KNeighborsClassifier(n_neighbors=5, algorithm='brute') sc = cross_val_score(kn, X1, y1, cv=tss, 评分='准确性') 如你所说,我已经安装了最新版本的 scikit-learn

以上是关于如 scikit-learn 的文档中所述,如何在 cv 中使用 TimeSeriesSplit的主要内容,如果未能解决你的问题,请参考以下文章

iTunes Connect 状态未更改,如电子邮件中所述

powershell 安装Tridion CoreService模块。如http://tridion.stackexchange.com/q/3641/88中所述。这个脚本根本不稳定。

powershell 安装Tridion CoreService模块。如http://tridion.stackexchange.com/q/3641/88中所述。这个脚本根本不稳定。

如果我将鼠标悬停在 Plotly 中,如何显示与图例中所述不同的跟踪名称?

Azure 数字孪生 API 无法使用教程中所述的 DefaultAzureCredential 身份验证方法

如何为SSRS报表服务器的用户创建常见问题解答?