Scikit-learn Значение TfidfVectorizer?
Я читал о TfidfVectorizer реализации scikit-learn, я не понимаю, что является результатом этого метода, например:
new_docs = ['He watches basketball and baseball', 'Julie likes to play basketball', 'Jane loves to play baseball']
new_term_freq_matrix = tfidf_vectorizer.transform(new_docs)
print tfidf_vectorizer.vocabulary_
print new_term_freq_matrix.todense()
выход:
{u'me': 8, u'basketball': 1, u'julie': 4, u'baseball': 0, u'likes': 5, u'loves': 7, u'jane': 3, u'linda': 6, u'more': 9, u'than': 10, u'he': 2}
[[ 0.57735027 0.57735027 0.57735027 0. 0. 0. 0.
0. 0. 0. 0. ]
[ 0. 0.68091856 0. 0. 0.51785612 0.51785612
0. 0. 0. 0. 0. ]
[ 0.62276601 0. 0. 0.62276601 0. 0. 0.
0.4736296 0. 0. 0. ]]
Что такое? (например: u'me ': 8):
{u'me': 8, u'basketball': 1, u'julie': 4, u'baseball': 0, u'likes': 5, u'loves': 7, u'jane': 3, u'linda': 6, u'more': 9, u'than': 10, u'he': 2}
- это матрица или просто вектор?, я не могу понять, что говорит мне вывод:
[[ 0.57735027 0.57735027 0.57735027 0. 0. 0. 0.
0. 0. 0. 0. ]
[ 0. 0.68091856 0. 0. 0.51785612 0.51785612
0. 0. 0. 0. 0. ]
[ 0.62276601 0. 0. 0.62276601 0. 0. 0.
0.4736296 0. 0. 0. ]]
Может ли кто-нибудь объяснить мне более подробно эти выходы?
Спасибо!
Ответы
Ответ 1
TfidfVectorizer - преобразование текстовых векторов в объекты, которые могут использоваться как входные данные для оценки.
vocabulary_
Является ли словарь, который преобразует каждый токен (слово) в индекс функции в матрице, каждый уникальный токен получает индекс функции.
Что такое? (например: u'me ': 8)
Он сообщает вам, что токен "me" представлен как номер функции 8 в выходной матрице.
- это матрица или просто вектор?
Каждое предложение представляет собой вектор, введенные предложения - это матрица с 3 векторами.
В каждом векторе числа (веса) представляют признаки tf-idf.
Например:
'julie': 4 → Сообщает вам, что в каждом предложении 'Julie' появится ненулевой (tf-idf) вес. Как вы можете видеть в 2-м векторе:
[0. 0.68091856 0. 0. 0.51785612 0.51785612 0. 0. 0. 0. 0.]
5-й элемент набрал 0.51785612 - счет tf-idf для 'Джулии'.
Для получения дополнительной информации о подсчете Tf-Idf читайте здесь: http://en.wikipedia.org/wiki/Tf%E2%80%93idf
Ответ 2
Таким образом, tf-idf создает набор своего словарного запаса из всего набора документов. Что видно в первой строке вывода. (для лучшего понимания я его отсортировал)
{u'baseball': 0, u'basketball': 1, u'he': 2, u'jane': 3, u'julie': 4, u'likes': 5, u'linda': 6, u'loves': 7, u'me': 8, u'more': 9, u'than': 10, }
И когда документ анализируется, чтобы получить его tf-idf. Документ:
Он смотрит на баскетбол и бейсбол
и его выход,
[0,57735027 0,57735027 0,57735027 0. 0. 0. 0. 0. 0. 0. 0.]
эквивалентно,
[бейсбольный баскетбол, он jane julie любит linda любит меня больше]
Поскольку наш документ содержит только эти слова: бейсбол, баскетбол, он, из созданного словаря. Вывод вектора документа имеет значения tf-idf только для этих трех слов и в том же отсортированном словаре.
tf-idf используется для классификации документов, ранжирования в поисковой системе. tf: временная частота (количество слов, содержащихся в документе из собственного словаря), idf: частота обратного документа (важность слова для каждого документа).
Ответ 3
Метод учитывает тот факт, что все слова не должны взвешиваться одинаково, используя веса для обозначения слов, которые являются наиболее уникальными для документа и лучше всего используются для его характеристики.
new_docs = ['basketball baseball', 'basketball baseball', 'basketball baseball']
new_term_freq_matrix = vectorizer.fit_transform(new_docs)
print (vectorizer.vocabulary_)
print ((new_term_freq_matrix.todense()))
{'basketball': 1, 'baseball': 0}
[[ 0.70710678 0.70710678]
[ 0.70710678 0.70710678]
[ 0.70710678 0.70710678]]
new_docs = ['basketball baseball', 'basketball basketball', 'basketball basketball']
new_term_freq_matrix = vectorizer.fit_transform(new_docs)
print (vectorizer.vocabulary_)
print ((new_term_freq_matrix.todense()))
{'basketball': 1, 'baseball': 0}
[[ 0.861037 0.50854232]
[ 0. 1. ]
[ 0. 1. ]]
new_docs = ['basketball basketball baseball', 'basketball basketball', 'basketball
basketball']
new_term_freq_matrix = vectorizer.fit_transform(new_docs)
print (vectorizer.vocabulary_)
print ((new_term_freq_matrix.todense()))
{'basketball': 1, 'baseball': 0}
[[ 0.64612892 0.76322829]
[ 0. 1. ]
[ 0. 1. ]]