Я довольно новичок в sckit-learn
и смущен, потому что TfidVectorizer
иногда возвращает другой вектор для того же документа.scikit TfidfVectorizer.transform() возвращает переменные результаты для того же документа
В моем корпусе содержится> 100 документов.
Я бегу:
vectorizer = TfidfVectorizer(ngram_range=(1, 2), token_pattern=r'\b\w+\b', min_df=1)
X = vectorizer.fit_transform(corpus)
инициализировать TfidVectorizer
и приспосабливать его к документам в корпусе. corpus
- это список текстовых строк.
Затем, если я:
test = list(vectorizer.transform([corpus[0]]).toarray()[0])
test == list(X.toarray()[0])
В результате False
.
Если я напечатаю первые 20 предметов list(X.toarray()[0])
и test
, соответственно, вы можете видеть, что они отключены на долю, когда я ожидаю, что они будут одинаковыми.
[0.16971458376720741, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
против
[0.16971458376720716, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Но если я:
test_1 = list(vectorizer.transform([corpus[0]).toarray()[0])
test_2 = list(vectorizer.transform([corpus[0]).toarray()[0])
test_1 == test_2
В результате True
. Выше, я по сути делаю вычисление вектора дважды, что, как я думал, я делал в первом примере (поскольку X содержит векторы, возвращаемые во время fit_transform
).
Почему в моем первом примере векторы разные? Я здесь что-то не так?
Не совсем уверен, что происходит, может быть, какая-то ошибка округления, я думаю, что это, вероятно, не стоит беспокоиться. – maxymoo
Хм нормально. Да, я просто беспокоил меня. Спасибо за ответ. – deef