Ttfidfvectorizer корректирует тест по частотам обучения в конвейере во время перекрестной проверки - PullRequest
0 голосов
/ 15 мая 2019

У меня есть задача классификации текста, основанная на документах, где я ожидаю, что классы связаны с частотами слов.Из-за специфики моего приложения, когда у меня есть корпус, который со временем будет расти и я хочу классифицировать новые документы по мере их поступления, я использовал FeatureHasher, а не существующий TFidfVectorizer (который векторизует и корректирует), так как словарьразмер может увеличиваться с новыми документами.
Как обсуждалось здесь, например (https://stats.stackexchange.com/questions/154660/tfidfvectorizer-should-it-be-used-on-train-only-or-traintest),, мне кажется правильным, что термин частоты при выполнении TFIDF следует рассчитывать только относительно набора поездов, а затем использовать для изменения масштаба тестаустановить вместо того, чтобы сначала выполнять перемасштабирование всего корпуса, а затем расщепление. Это потому, что использование тестового набора данных для вычисления частоты нарушает принцип, по которому вам не следует использовать эту информацию.
Предположим, вы начали с матрицы Xнеобработанные термины частот (еще не настроены) и y, вектор классов. Типичный порядок, который показывают многие примеры кода:

from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.ensemble import RandomForestClassifier

vec = TfidfTransformer()
#rescale X by its own frequencies, then split
X = vec.fit_transform(X) 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
#...now fit a model 

, но правильная вещь должна быть следующей:

vec = TfidfTransformer()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
#store rescaling based on X_train frequencies alone
vec.fit(X_train)
#resacale each (transform) by the same model
X_train = vec.transform(X_train)
X_test = vec.transform(X_test)
#...now fit a model 

Хорошо, теперь основнойвопрос: я хочу провести некоторую перекрестную проверку, возможно, с помощью GridSearchCV, где я могу передать ему набор потенциальных параметров модели и провести несколько разбивок данных для каждого из них.Типичный способ сделать это - построить конвейер модели и затем передать его в утилиту перекрестной проверки.Поскольку конвейеры являются своего рода черными ящиками, которые трудно увидеть в деталях, я просто хотел проверить, правильно ли, если я упомянул выше, если TfidfTransformer включен в качестве шага в конвейере, выполняет корректировкукорректировка тренировочных данных каждого сплита.

...