gpt4 book ai didi

python - sklearn TimeSeriesSplit cross_val_predict 仅适用于分区

转载 作者:行者123 更新时间:2023-11-28 21:07:12 24 4
gpt4 key购买 nike

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

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

我做错了什么?

最佳答案

有几种方法可以在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_scoreTimeSeriesSplit了解详情。

关于python - sklearn TimeSeriesSplit cross_val_predict 仅适用于分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41753795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com