web-dev-qa-db-fra.com

Regroupement de documents texte à l'aide de kmeans scikit-learn dans Python

J'ai besoin d'implémenter kMeans de scikit-learn pour regrouper les documents texte. Le exemple de code fonctionne très bien tel quel mais prend quelques données de 20newsgroups en entrée. Je souhaite utiliser le même code pour regrouper une liste de documents comme indiqué ci-dessous:

documents = ["Human machine interface for lab abc computer applications",
             "A survey of user opinion of computer system response time",
             "The EPS user interface management system",
             "System and human system engineering testing of EPS",
             "Relation of user perceived response time to error measurement",
             "The generation of random binary unordered trees",
             "The intersection graph of paths in trees",
             "Graph minors IV Widths of trees and well quasi ordering",
             "Graph minors A survey"]

Quelles modifications dois-je faire dans code d'exemple kMeans pour utiliser cette liste en entrée? (Prendre simplement 'dataset = documents' ne fonctionne pas)

22
Nabila Shahid

Ceci est un exemple plus simple:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_Rand_score

documents = ["Human machine interface for lab abc computer applications",
             "A survey of user opinion of computer system response time",
             "The EPS user interface management system",
             "System and human system engineering testing of EPS",
             "Relation of user perceived response time to error measurement",
             "The generation of random binary unordered trees",
             "The intersection graph of paths in trees",
             "Graph minors IV Widths of trees and well quasi ordering",
             "Graph minors A survey"]

vectoriser le texte, c'est-à-dire convertir les chaînes en entités numériques

vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(documents)

documents de cluster

true_k = 2
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
model.fit(X)

imprimer les termes principaux par cluster clusters

print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
    print "Cluster %d:" % i,
    for ind in order_centroids[i, :10]:
        print ' %s' % terms[ind],
    print

Si vous voulez avoir une idée plus visuelle de ce à quoi cela ressemble, voyez cette réponse .

64
elyase

J'ai trouvé cet article très utile pour le clustering de documents à l'aide de K-Means. http://brandonrose.org/clustering .

Pour comprendre l'algorithme, vous pouvez également consulter cet article https://datasciencelab.wordpress.com/2013/12/12/clustering-with-k-means-in-python/

3
Kathirmani Sukumar