如 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的主要内容,如果未能解决你的问题,请参考以下文章
powershell 安装Tridion CoreService模块。如http://tridion.stackexchange.com/q/3641/88中所述。这个脚本根本不稳定。
powershell 安装Tridion CoreService模块。如http://tridion.stackexchange.com/q/3641/88中所述。这个脚本根本不稳定。
如果我将鼠标悬停在 Plotly 中,如何显示与图例中所述不同的跟踪名称?