как проанализировать значение матрицы tfidf в sklearn?

#python #scikit-learn #nltk #k-means #tf-idf

#python #scikit-learn #nltk #k-означает #tf-idf

Вопрос:

Я использую алгоритм KMeans sklearn для кластеризации документов, как указано в http://brandonrose.org/clustering

Вот вычисление матрицы TFIDF. Я понял концепцию, лежащую в основе метода TFIDF, но когда я печатаю эту матрицу, матрица выглядит так:

   (0, 11)   0.238317554822
  (0, 34)   0.355850989305
  (0, 7)    0.355850989305
  (0, 21)   0.238317554822
  (0, 16)   0.355850989305
  (0, 35)   0.355850989305
  (0, 8)    0.355850989305
  (0, 17)   0.355850989305
  (0, 36)   0.355850989305
  (1, 11)   0.238317554822
  (1, 21)   0.238317554822
  (1, 23)   0.355850989305
  (1, 0)    0.355850989305
  (1, 24)   0.355850989305
  (1, 12)   0.355850989305
  (1, 22)   0.355850989305
  (1, 25)   0.355850989305
  (1, 13)   0.355850989305
  (2, 2)    0.27430356415
  (2, 18)   0.339992197465
  (2, 26)   0.339992197465
  (2, 39)   0.339992197465
  (2, 3)    0.339992197465
  (2, 19)   0.339992197465
  (2, 27)   0.339992197465
  (2, 4)    0.339992197465
  (2, 20)   0.339992197465
  (3, 2)    0.27430356415
  (3, 40)   0.339992197465
  (3, 9)    0.339992197465
  (3, 1)    0.339992197465
  (3, 5)    0.339992197465
  (3, 41)   0.339992197465
  (3, 10)   0.339992197465
  (3, 6)    0.339992197465
  (3, 42)   0.339992197465
  (4, 11)   0.202877476983
  (4, 21)   0.202877476983
  (4, 28)   0.302932576437
  (4, 31)   0.302932576437
  (4, 37)   0.302932576437
  (4, 14)   0.302932576437
  (4, 29)   0.302932576437
  (4, 32)   0.302932576437
  (4, 38)   0.302932576437
  (4, 15)   0.302932576437
  (4, 30)   0.302932576437
  (4, 33)   0.302932576437
  

Что представляют значения в этой матрице? может ли кто-нибудь, кто работал над этим, помочь мне понять это?

Комментарии:

1. Какая у вас первая строка? можете ли вы показать нам, как выглядит ваш текстовый корпус (входные данные вашего TFIDF)?

2. Это мой образец данных корпуса [«java — язык, не зависящий от платформы», «изучение языка java — это awasome», «eclipse juno — новая версия»,»eclipse успешно установлен на моем компьютере», «java — объектно-ориентированный язык программирования»]

3. отображается ли в матрице вся полученная матрица или только ее фрагмент?

4. Хорошо, это то, чего я ожидал

5. Я вижу, что никто этого не сказал, поэтому я скажу это, это называется разреженным матричным представлением, полезным, когда большинство значений равно 0 (это верно в TFIDF, поскольку слов намного больше, чем документов, и большинство документов не содержат большинства слов)

Ответ №1:

Первый столбец содержит кортежи (ind_document, ind_word) , где ind_document индекс вашего документа (в вашем случае a string ), содержащийся в вашем наборе данных, и ind_word индекс слова в словаре слов, сгенерированных TfidfVectorizer объектом.

Второй столбец содержит значение TF-IDF вашего given word (слово, соответствующее (ind_document, ind_word) .


Обновить

Если вы посмотрите ближе к реализации TfidfVectorizer here, вы можете увидеть, что там вызывается параметр norm . По умолчанию установлен этот параметр l2 , который является L2-нормой, используемой для нормализации полученных данных.

Если вы не хотите нормализовать свои данные и сравнивать их с результатами, полученными вручную, измените этот параметр на norm = None

Комментарии:

1. Спасибо. Я попытался вычислить TFIDF, используя формулу, указанную на веб-сайте tfidf.com Результат, который я получаю, вычисляя с помощью pen, отличается от того, что дает эта функция TfidfVectorizer. можете ли вы дать представление, почему такая разница? работали ли вы над этим? Поскольку я искал в сети, для результата выполняется некоторая нормализация L-2. Но я не понимаю, что именно происходит.