Когда вы используете TfidfVectorizer().fit_transform()
, сначала подсчитывается количество уникального словаря (функции) в ваших данных, а затем его частоты. Ваши данные о тренировках и тестах не имеют одинакового количества уникальных слов. Таким образом, размеры ваших X_test
и X_train
не совпадают, если вы указали .fit_transform()
для каждого из ваших поездов и данных испытаний. Следовательно, ваша прогнозирующая модель теряется и выдает ошибку несоответствия измерений.
Если вы .fit_transform()
на X_train
, а затем просто .transform()
на X_test
, вы учитываете только словарь, включенный в X_train
,Это игнорирует любой словарь, включенный только в X_test
, таким образом, соответствует количеству функций.
РЕДАКТИРОВАТЬ: Я написал небольшой пример.
from sklearn.feature_extraction.text import TfidfVectorizer
city = ['London Moscow Washington',
'Washington Boston']
president = ['Adams Washington',
'Jefferson']
vectorizer = TfidfVectorizer()
Сначала .fit_transform(city)
.
X_city = vectorizer.fit_transform(city)
X_city.toarray()
>>>array([[0. , 0.6316672 , 0.6316672 , 0.44943642],
[0.81480247, 0. , 0. , 0.57973867]])
Затем .transform(president)
на основе приведенного выше соответствия.
vectorizer.transform(president).toarray()
>>>array([[0., 0., 0., 1.],
[0., 0., 0., 0.]])
Наконец, .fit_transform(president)
.
X_president = vectorizer.fit_transform(president)
X_president.toarray()
>>>array([[0.70710678, 0. , 0.70710678],
[0. , 1. , 0. ]])
Все сводится к сопоставлению измерения между данными поезда и испытания для вашей модели.