как значение tfidf используется в кластеризации k-средних - PullRequest
1 голос
/ 19 февраля 2020

Я использую кластеризацию K-средних с TF-IDF, используя библиотеку sckit-learn. Я понимаю, что K-means использует расстояние для создания кластеров, и расстояние представлено в виде (значение оси x, значение оси y), но tf-idf - это одно числовое значение. Мой вопрос заключается в том, как преобразовать это значение tf-idf в (x, y) с помощью K-средних кластеров.

1 Ответ

1 голос
/ 19 февраля 2020

TF-IDF не является единственным значением (т.е. скалярным). Для каждого документа он возвращает вектор, где каждое значение в векторе соответствует каждому слову в словаре.

from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from scipy.sparse.csr import csr_matrix

sent1 = "the quick brown fox jumps over the lazy brown dog"
sent2 = "mr brown jumps over the lazy fox"

corpus = [sent1, sent2]
vectorizer = TfidfVectorizer(input=corpus)

X = vectorizer.fit_transform(corpus)
print(X.todense())

[out]:

matrix([[0.50077266, 0.35190925, 0.25038633, 0.25038633, 0.25038633,
         0.        , 0.25038633, 0.35190925, 0.50077266],
        [0.35409974, 0.        , 0.35409974, 0.35409974, 0.35409974,
         0.49767483, 0.35409974, 0.        , 0.35409974]])

Возвращает двумерную матрицу, где строки представляют предложения, а столбцы представляют словарь.

>>> vectorizer.vocabulary_
{'the': 8,
 'quick': 7,
 'brown': 0,
 'fox': 2,
 'jumps': 3,
 'over': 6,
 'lazy': 4,
 'dog': 1,
 'mr': 5}

Поэтому, когда K-means пытается найти расстояние / сходство между двумя документами, он выполняет сходство между двумя строками в матрице. Например, если предположить, что сходство представляет собой просто произведение точек между двумя строками:

import numpy as np
vector1 = X.todense()[0]
vector2 = X.todense()[1]
float(np.dot(vector1, vector2.T))

[out]:

0.7092938737640962

У Криса Поттса есть хорошее руководство о том, как модели векторного пространства, такие как TF-IDF один создан http://web.stanford.edu/class/linguist236/materials/ling236-handout-05-09-vsm.pdf

...