TimeSeriesSplit с GridSearchCV завершается ошибкой для n_splits> 2 - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь объединить TimeSeriesSplit с GridSearchCV, используя scikit-learn 0.18.1.

Соответствующий код выглядит следующим образом:

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]

Что такоепроисходит и как я могу это исправить?

1 Ответ

0 голосов
/ 05 июня 2018

Скорее всего, в одном из ваших тестовых разделений присутствует только один класс.

Это покажет вам, сколько образцов из каждого класса находится в ваших разделениях:

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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...