sklearn TimeSeriesSplit cross_val_predict仅适用于分区

2024-04-27 14:08:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在sklearn版本0.18.1中使用TimeSeriesSplit交叉验证策略和logisticstreemption估计器。我得到一个错误说明:

cross_val_predict only works for partitions

下面的代码片段演示如何重新生成:

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

我做错什么了?在


Tags: fromimportdfdatemodelasvalsklearn
1条回答
网友
1楼 · 发布于 2024-04-27 14:08:07

有几种方法可以在cross_val_score中传递cv参数。在这里你必须通过分裂发生器。例如

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

产生一个发电机。有了它,您可以生成CV序列和测试索引数组。第一个看起来像这样:

^{pr2}$

也可以将数据帧作为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和{a2}以了解详细信息。在

相关问题 更多 >