Scikit learn 使用GridSearchCV的TimeSeriesSplit在n_分割时失败>;2.

Scikit learn 使用GridSearchCV的TimeSeriesSplit在n_分割时失败>;2.,scikit-learn,time-series,grid-search,Scikit Learn,Time Series,Grid Search,我正在尝试使用scikit learn 0.18.1将TimeSeriesPlit与GridSearchCV结合起来 相关代码如下所示: pipeline = Pipeline([ ('MMS', MinMaxScaler()), ('VT', VarianceThreshold(threshold=0.005)), ('SKB',SelectKBest(chi2, k=90)), ('rf', RandomForestClassi

我正在尝试使用scikit learn 0.18.1将TimeSeriesPlit与GridSearchCV结合起来

相关代码如下所示:

pipeline = Pipeline([
        ('MMS', MinMaxScaler()),
        ('VT', VarianceThreshold(threshold=0.005)),
        ('SKB',SelectKBest(chi2, k=90)),
        ('rf', RandomForestClassifier(class_weight='balanced', random_state=1))])

tscv = TimeSeriesSplit(n_splits=n)
gridsearch = GridSearchCV(pipeline, dict, cv=tscv, n_jobs=1, scoring="roc_auc")
gridsearch.fit(X,y)
X和y的形状是

X.shape == (99942, 2867)
y.shape == (99918,)
对于
n=2
,这可以很好地工作。但是,当
n=3
时,我得到以下错误:

IndexError: index 1 is out of bounds for axis 1 with size 1
堆栈跟踪的相关部分是
sklearn/metrics/scorer.py
中的这段代码:

y_type = type_of_target(y)
y_pred = clf.predict_proba(X)
if y_type == "binary":
    y_pred = y_pred[:, 1]

发生了什么以及如何修复它?

您的一个测试拆分中很可能只有一个类

这将显示拆分中每个类的样本数:

tscv = TimeSeriesSplit(3)
for i, (train, test) in enumerate(tscv.split(X, y)):
    print("Class occurrences in train split #%d: %s" % 
           (i, np.unique(y[train], return_counts=True)))
    print("Class occurrences in test split #%d: %s" % 
           (i, np.unique(y[test], return_counts=True)))

X
y
的形状是什么?同时显示管道中的代码谢谢你的评论,我已经更新了问题。为什么X和y的长度不同?