Перекрестная проверка всего набора данных и векторизация данных - PullRequest
0 голосов
/ 24 октября 2019

У меня есть методологическое сомнение относительно перекрестной проверки (CV). Я нашел несколько научных работ, в которых сообщается о результатах применения CV по всему набору данных. Итак, допустим, я хочу это сделать. Мое сомнение возникает, когда мы должны работать с текстом и сначала применить некоторые преобразования к данным, такие как векторизация. В этом случае, следует ли применять векторизацию ко всему набору данных, не разбивая ее на поезд / тест? Лучшее решение, которое я нашел для этого, состоит в том, чтобы использовать конвейер, подобный следующему, который я использую для векторизации представления текста в части речи:

pipe = make_pipeline(ColumnSelector(column='pos'), 
                  TfidfVectorizer(binary=True, ngram_range=(1,3), max_features=5000),
                  SVC(kernel='linear', random_state=seed))enter code here

Затем я использую этот конвейер для запуска CV надвесь набор данных:

cv_results = model_selection.cross_val_score(pipe, X, y, cv=skf, scoring=scoring)

Я хотел бы убедиться, что этот метод правильный и правильный. Спасибо!

1 Ответ

0 голосов
/ 24 октября 2019

Насколько я понимаю, ваш конвейерный подход разрешит эту ситуацию для вас. Другими словами: TfidfVectorizer будет проходить процесс CV, и в каждой комбинации тренировочных сгибов он будет вызывать .fit_transform;тогда для соответствующего теста продолжительности теста этого фолда он вызовет только .transform. Это эмулирует реальный сценарий, в котором вы будете применять результаты предварительно обученного процесса к новым невидимым данным (эмулируемым «тестовыми» данными), поэтому вам придется выполнять преобразование на основе предварительного соответствия Vocab (Vectorizer). .

Я основываю свое понимание специфической механики sklearn на ответе, который я видел здесь:

Являются ли k-кратные оценки перекрестной проверки из `cross_val_score scikit-learn '`и` GridsearchCV` смещены, если мы включим преобразователи в конвейер?

Респондент подклассирует класс StandardScaler в конвейере и показывает, что в удерживаемых складках он вызывает только .transform, поскольку он проходит черезСорт класс. В настоящее время я понимаю, что любой класс, введенный в cross_val_score, который может принимать входные данные канала с классами, определяющими параметры .fit_transform и .transform, будет обрабатывать это.

...