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.        ]]