Я полагаю, что проблема, с которой вы сталкиваетесь, связана с использованием метода fit_transform()
в вашем наборе тестов вместо просто метода transform()
.Метод CountVectorizer () учитывает словарный словарь всех токенов в необработанных документах.
Это означает, что когда вы вызываете fit_transform()
на обучающем наборе, он создаст разреженную матрицу с количеством функций, равным разным токенам слов, которые он находит в тексте, который вы вводите в качестве ввода.Когда вы снова вызываете fit_transform()
для тестового набора, он генерирует другую разреженную матрицу с измерениями, основанными на уникальных словах в тестовом наборе, вместо использования исходной матрицы, сгенерированной на обучающих данных.
Затем выприспособьте объект LogisticRegression
к своим данным обучения, но когда вы пытаетесь использовать predict()
в тестовых данных, он жалуется, что размер ввода отличается от того, который вы передали, когда вы обучали его, потому что у него другое количество функций.
РЕДАКТИРОВАТЬ: Это также происходит, когда вы вызываете следующее:
test_matrix = vectorizer.fit_transform(test_data['review'])
Вы должны избегать создания различных подгонок для CountVectorizer
если вы планируете разделить ваши данные на обучающие и тестовые наборы, так как результирующие измерения разреженных матриц вызовут проблемы, подобные той, с которой вы столкнулись.
TL; DR:
Попробуйте заменить эти
test_matrix = vectorizer.fit_transform(test_data['review'])
sample_test_matrix = vectorizer.fit_transform(sample_test_data['review'])
этими
test_matrix = vectorizer.transform(test_data['review'])
sample_test_matrix = vectorizer.transform(sample_test_data['review'])