tfidf = термин частота (tf) * обратная частота документа (idf)
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(documents)
print(vectorizer.get_feature_names())
print (X.toarray())
print ("---")
t = TfidfTransformer(use_idf=True, norm=None, smooth_idf=False)
a = t.fit_transform(X)
print (a.toarray())
print ("---")
print (t.idf_)
Выход:
idf() низкий, но tf (the, doc1) = 2 высокий, что толкает его на другие слова.
Из приведенного выше примера кода:
idf (без норм, безсглаженный idf) is == the == 1
Однако tf (the, doc1) = 2 и tf (is, doc1) = 1, что увеличивает значение tfidf для tfidf (the, doc1).
аналогично idf (car) = 2.09861229, но tf (car, doc1) = 1, => tfidf (car, doc1) = 2.09861229, что очень близко к tfidf (the, doc1).Сглаживание IDF еще больше уменьшает разрыв.
На большом корпусе различия становятся более заметными.
Попробуйте запустить свой код, отключив сглаживание и не нормализуя, чтобы увидеть влияние на небольшой корпус.
tfidf_transformer = TfidfVectorizer (smooth_idf = False, use_idf = True, norm = None)