конвейер sklearn: запуск TfidfVectorizer на полном обучающем наборе перед применением TimeSeriesSplit внутри GridSearchCV? - PullRequest
0 голосов
/ 21 февраля 2019

Я уверен, что это возможно, но я не смог понять это.Дайте обучающий набор данных, используя TimeSeriesSplit с num_split=5, разбиения выглядят следующим образом:

[0] : [1]
[0 1] : [2]
[0 1 2] : [3]
[0 1 2 3] : [4]
[0 1 2 3 4] : [5]

Проблема в первых парах, TfidfVectorizer работает с номинальным количеством словфункций, и я хотел бы выполнить это на всем обучающем наборе перед разделением, чтобы размер элемента оставался одинаковым для всех разделений.

Однако, кроме того, кто-нибудь знает способ, при использовании TimeSeriesSplit, пропустить только два последних сплита в серии?Таким образом, вместо всех 5 сплитов GridSearchCV просто использует эти два:

[0 1 2 3] : [4]
[0 1 2 3 4] : [5]

Это позволит значительно улучшить векторизацию, даже если она не будет одинаковой между проходами - по крайней мере, она имеет больший размерчасть, с которой нужно работать до проверки.

Спасибо.

РЕДАКТИРОВАТЬ:

Конвейер, который я использую, по сути является TfidfVectorizer, а затем переходит к классификатору.Но при некоторой проверке данных и функций выглядит, как будто набор данных разделяется перед передачей в TfidVectorizer ().Вот широкие мазки:

tscv = TimeSeriesSplit(n_splits=5)
pipe = Pipeline([('tfidf', TfidfVectorizer(), 'rfc', RandomForestClassifier()])
grid = GridSearchCV(pipe, params, cv=tscv, scoring='roc_auc')

1 Ответ

0 голосов
/ 26 февраля 2019

Это похоже на то, что я хочу.Не понимал, что можно просто передать cv итерируемый.Все, что вам нужно сделать, - это создать разбиение по временному ряду, или любое другое разбиение, которое вы хотите, и передать итерацию, содержащую индексы.Таким образом, если у вас есть набор данных из 10 элементов, и вы просто хотите, чтобы последние два временных ряда разделялись на num_split=4, вы просто передали бы это в cv:

cv = [([0, 1, 2, 3, 4, 5], [6, 7]),
      ([0, 1, 2, 3, 4, 5, 6, 7], [8, 9]))

Таким образом, вы можете передать любой кортежитераций вы хотите.

...