J'ai pris un tas de documents et calculé tf * idf pour chaque jeton dans tous les documents et les vecteurs créés (chacun de n dimension, n est le nombre de mots uniques dans le corpus) pour chaque document. Je n'arrive pas à comprendre comment créer un cluster à partir de vecteurs à l'aide de sklearn.cluster.MeanShiftClustering de documents en utilisant le décalage moyen
-2
A
Répondre
1
TfidfVectorizer convertit les documents en une «matrice fragmentée» de nombres. MeanShift exige que les données qui lui sont transmises soient "denses". Ci-dessous, je montre comment le convertir dans un pipeline (credit) mais, si la mémoire le permet, vous pouvez simplement convertir une matrice clairsemée en dense avec toarray()
ou 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)
Prints:
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
Vous pouvez modifier les "hyperparam'etres", mais cela vous donne une idée générale je pense.
Après avoir calculé tfidf, avez-vous une matrice (ie: table de données avec des lignes et des colonnes) de valeurs numériques? Est-il rare ou dense? Quel type en général? Avez-vous utilisé TfidfVectorizer() de sklearn? – Jarad
Oui, j'ai utilisé TfidfVectorizer() fini avec une matrice clairsemée. Je ne comprends pas comment donner cela comme une entrée à sklearn.clister.MeanShift –