Могу ли я использовать CountVectorizer одновременно для тестовых и обучающих данных или мне нужно разделить их? - PullRequest
0 голосов
/ 02 февраля 2019

В настоящее время у меня есть модель SVM, которая классифицирует текст на два разных класса.В настоящее время я использую CountVectorizer и TfidfTransformer для создания своего «вектора слов».

Дело в том, что я думаю, что, может быть, я делаю это в неправильном порядке, когда я сначала делаю преобразование всего текста, а затем делю его на части.

Мой вопрос, будет лиБудет ли какая-то разница, если я сначала выполню train_test_split, а затем выполняю fit_transform только на данных поезда, а затем преобразовываю на тестовых данных?

Как правильно это сделать?

Большое спасибо заранее, счастливого кодирования!

count_vect = CountVectorizer(stop_words='english')
X_counts = count_vect.fit_transform(textList)

tfidf_transformer = TfidfTransformer()
X_tfidf = tfidf_transformer.fit_transform(X_counts)

X_train, X_test, y_train, y_test = train_test_split(X_tfidf, correctLabels, test_size=.33, random_state=17)

1 Ответ

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

Сначала разбейте поезд и тестовый набор, затем поместите только в поезд и преобразуйте тестовый набор

Если вы сделаете это наоборот, вы протекаетеинформация из тестового набора в набор поездов.Это может привести к переобучению, что приведет к тому, что ваша модель будет плохо обобщена для новых невидимых данных.

Цель тестового набора - проверить, насколько хорошо ваша модель работает с новыми данными.В случае Text Analytics это может означать слова, которые он никогда раньше не видел, и ничего не знающие о важности или новых распределениях вхождения слов.Если вы сначала используете свои CountVectorizer и TfIdfTransformer, вы не будете знать, как они реагируют на это: в конце концов, все данные были просмотрены трансформаторами.Проблема: вы думаете, что создали великолепную модель с отличной производительностью, но когда она будет запущена в производство, точность будет намного ниже.

...