#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. Но я не понимаю, что именно происходит.