Значение 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.        ]]

Может ли кто-нибудь объяснить мне более подробно эти результаты?

Спасибо!




Ответы (3)


TfidfVectorizer — преобразует текст в векторы признаков, которые можно использовать в качестве входных данных для оценщика.

vocabulary_ Это словарь, который преобразует каждый токен (слово) в индекс функции в матрице, каждый уникальный токен получает индекс функции.

Что такое? (например: u'me': 8 )

Он говорит вам, что токен «я» представлен как функция номер 8 в выходной матрице.

это матрица или просто вектор?

Каждое предложение представляет собой вектор, введенные вами предложения представляют собой матрицу с 3 векторами. В каждом векторе числа (веса) представляют собой оценку характеристик tf-idf. Например: 'julie': 4 --> Сообщает вам, что в каждом предложении 'Julie' вы будете иметь ненулевой (tf-idf) вес. Как вы можете видеть во втором векторе:

[ 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

person D Volsky    schedule 18.09.2014
comment
что такое параметр u в выводе? Используя новую загрузку Anaconda/Scikit, она не отображается. Теперь он не отображается в выводе? - person BluePython; 28.05.2016
comment
К вашему сведению - это разница между юникодом или нет (что указано в версиях до Python 3). - person BluePython; 28.05.2016

Итак, 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. ]

эквивалентно,

[бейсбольный баскетбол он любит джейн джули линда любит меня больше чем]

Так как в нашем документе есть только эти слова: бейсбол, баскетбол, он, из созданного словаря. Выходной вектор документа имеет значения tf-idf только для этих трех слов и в той же отсортированной позиции словаря.

tf-idf используется для классификации документов, ранжирования в поисковых системах. tf: частота термина (количество слов, присутствующих в документе из его собственного словаря), idf: обратная частота документа (важность слова для каждого документа).

person Rajesh Mappu    schedule 18.01.2018
comment
этот объясняет лучше. Спасибо друг. - person Akash Kandpal; 18.06.2018

Метод учитывает тот факт, что все слова не должны иметь одинаковый вес, используя веса для обозначения слов, которые наиболее уникальны для документа и лучше всего подходят для его характеристики.

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.        ]]
person David Miller    schedule 23.01.2019