Как использовать TimeSeriesSplit в cv, как упомянуто в документации scikit-learn - PullRequest
0 голосов
/ 10 мая 2018
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, но в документации по cross_val_score указано, что нам нужно пройти генератор перекрестной проверки или итерацию. Как передать его после разделения временных рядов на данные поезда и тестирования на cv

TypeError
Traceback (последний звонок последний) в ()

 14 for k in neighb:

 15     knn = KNeighborsClassifier(n_neighbors=k, algorithm='brute')

---> 16 sc = cross_val_score (knn, X1, y1, cv = tss, выигрыш = 'точность')

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

-> 1581 для поезда, тест на резюме)

1582 возвращение np.array (баллы) [:, 0]

1583

TypeError: объект 'TimeSeriesSplit' не повторяется

1 Ответ

0 голосов
/ 11 мая 2018

Просто передайте tss на cv.

scores = cross_val_score(knn, X_train, y_train, cv=tss , scoring='accuracy')

Не нужно звонить tss.split().

Обновление : Вышеуказанный метод протестирован на scikit-learn v0.19.1. Поэтому убедитесь, что у вас последняя версия. Также я использую TimeSeriesSplit из model_selection module.

Редактировать 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() нет). Я использую это tss в cross_val_score() без split(), как вы отправили в вопросе.

Редактировать 2 :

Чувак, ты используешь устаревший класс. В настоящее время вы делаете это:

from sklearn.cross_validation import cross_val_score

Это неправильно. Вы должны получить предупреждение как это:

Предупреждение об устаревании: этот модуль устарел в версии 0.18 в пользу модуля model_selection, в который преобразуются все классы и функции перемещены. Также обратите внимание, что интерфейс нового резюме итераторы отличаются от этого модуля. Этот модуль будет удалено в 0.20.

Обратите на это внимание и используйте модуль model_selection следующим образом:

from sklearn.model_selection import cross_val_score

Тогда вы не получите ошибку с моим кодом.

...