Кластеризация документов с использованием Mean Shift

Я взял пачку документов и рассчитал tf*idf для каждого токена во всех документах и ​​создал векторы (каждый из n измерений,n - это число уникальных слов в корпусе) для каждого документа. Я не могу понять, как создать кластер из векторов с использованием sklearn.cluster.MeanShift

1 ответ

TfidfVectorizer преобразует документы в "разреженную матрицу" чисел. MeanShift требует, чтобы передаваемые ему данные были "плотными". Ниже я покажу, как преобразовать его в конвейер ( кредит), но, если позволяет память, вы можете просто преобразовать разреженную матрицу в плотную с toarray() или же todense(),

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import MeanShift
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import FunctionTransformer

documents = ['this is document one',
             'this is document two',
             'document one is fun',
             'document two is mean',
             'document is really short',
             'how fun is document one?',
             'mean shift... what is that']

pipeline = Pipeline(
  steps=[
    ('tfidf', TfidfVectorizer()),
    ('trans', FunctionTransformer(lambda x: x.todense(), accept_sparse=True)),
    ('clust', MeanShift())
  ])

pipeline.fit(documents)
pipeline.named_steps['clust'].labels_

result = [(label,doc) for doc,label in zip(documents, pipeline.named_steps['clust'].labels_)]

for label,doc in sorted(result):
  print(label, doc)

Печать:

0 document two is mean
0 this is document one
0 this is document two
1 document one is fun
1 how fun is document one?
2 mean shift... what is that
3 document is really short

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

Другие вопросы по тегам