[PYTHON] Text mining: distribution de densité de probabilité sur hypersphère et clustering de texte avec KMeans

en premier

Cet article a extrait le degré de dispersion des informations de direction sur l'hypersphère. Dans l'exemple de cluster de sphères utilisé à ce moment-là, un exemple utilisant vmFD est préparé. Dans l'un d'eux, tf-idf est utilisé pour vectoriser des mots dans un document, et KMeans est utilisé pour les catégoriser en fonction du centre de gravité du vecteur. Dans cet article, nous utiliserons l'exemple du cluster de sphères pour effectuer et comparer le clustering de documents avec les KMeans généraux et movMFD. Cliquez ici pour des programmes spécifiques. Dans cet article, je ne présenterai que les principaux points.

Introduction des données

Tout d'abord, je présenterai les données à utiliser. Comprend des scripts de journaux et 4 types d'informations sur les catégories provenant des ensembles de données externes de sklearn Chargez le texte.

###############################################################################
# Load some categories from the training set
categories = [
    'alt.atheism',
    'talk.religion.misc',
    'comp.graphics',
    'sci.space',
]
# Uncomment the following to do the analysis on all the categories
#categories = None

print("Loading 20 newsgroups dataset for categories:")
print(categories)

dataset = fetch_20newsgroups(subset='all', categories=categories,
                             shuffle=True, random_state=42)

Les données de phrase sont acquises comme ceci. Screen Shot 2017-01-27 at 1.48.27.png

Cette phrase est convertie en vecteurs avec TfidfVectorizer.

print("Extracting features from the training dataset using a sparse vectorizer")
vectorizer = TfidfVectorizer(stop_words='english', use_idf=True)
X = vectorizer.fit_transform(dataset.data)

Le résultat est une liste de 3387 lignes x 43256 colonnes. Si vous connaissez tfidf, vous n'avez pas besoin de l'expliquer, mais cela signifie qu'il y a 3387 phrases et 43256 mots uniques.

Ici, si nécessaire, Execute LSA. Si use_LSA = True, les données du document seront compressées dimensionnellement à n_components = 500 à l'avance. La valeur par défaut est use_LSA = False.

###############################################################################
# LSA for dimensionality reduction (and finding dense vectors)
if use_LSA:
  print("Performing dimensionality reduction using LSA")
  svd = TruncatedSVD(n_components)
  normalizer = Normalizer(copy=False)
  lsa = make_pipeline(svd, normalizer)
  X = lsa.fit_transform(X)

  explained_variance = svd.explained_variance_ratio_.sum()
  print("Explained variance of the SVD step: {}%".format(
      int(explained_variance * 100)))

  print()

Ceci termine la préparation des données.

Données vectorielles de mot de cluster

Ensuite, le regroupement de documents est effectué de quatre manières: K-means, K-Means sphériques, soft-movMF et hard-movMF.

# K-Means clustering
km = KMeans(n_clusters=true_k, init='k-means++', n_init=20)

print("Clustering with %s" % km)
km.fit(X)
# Spherical K-Means clustering
skm = SphericalKMeans(n_clusters=true_k, init='k-means++', n_init=20)

print("Clustering with %s" % skm)
skm.fit(X)
# Mixture of von Mises Fisher clustering (soft)
vmf_soft = VonMisesFisherMixture(n_clusters=true_k, posterior_type='soft',
    init='random-class', n_init=20, force_weights=np.ones((true_k,))/true_k)

print("Clustering with %s" % vmf_soft)
vmf_soft.fit(X)
# Mixture of von Mises Fisher clustering (hard)
vmf_hard = VonMisesFisherMixture(n_clusters=true_k, posterior_type='hard',
    init='spherical-k-means', n_init=20, force_weights=np.ones((true_k,))/true_k)

print("Clustering with %s" % vmf_hard)
vmf_hard.fit(X)

Introduction de l'indice d'évaluation

Ici, l'évaluation est effectuée à l'aide des métriques de sklearn. Plus précisément, nous effectuons les six évaluations suivantes.

Pour plus de détails sur chaque index d'évaluation, reportez-vous à cet article. *fabrication

Évaluation des résultats du cluster

Voici le résultat de l'évaluation.

Screen Shot 2017-01-27 at 5.04.20.png

Dans tous les résultats, on peut voir que l'indice d'amas de sphères est supérieur à K Moyens. En particulier, K Means a été étendu à une hypersphère. Les KMeans sphériques et movMF-soft et movMF-hard utilisant la distribution de von Mies Fisher ont montré d'excellents résultats.

Recommended Posts

Text mining: distribution de densité de probabilité sur hypersphère et clustering de texte avec KMeans
Précautions lors de la superposition de la fonction de densité de probabilité et de l'histogramme dans matplotlib
Ajouter des lignes et du texte sur l'image
Battre la fonction de densité de probabilité de la distribution normale
Extraire la couleur de l'objet dans l'image avec le clustering Mask R-CNN et K-Means
Une méthode pour regrouper des points distribués sur une hypersphère, qui est pratique pour l'exploration de texte et l'extraction de caractéristiques des informations de direction.
Extraire et lister les noms des personnes et des lieux dans le texte
Comprenez attentivement la distribution exponentielle et dessinez en Python
Tracer et comprendre la distribution normale multivariée en Python
Comprendre attentivement la distribution de Poisson et dessiner en Python
Vérifiez la nature atrophique de la distribution de probabilité en Python
Comptez le nombre de caractères dans le texte dans le presse-papiers sur Mac
Trouvons un graphique de la distribution de Poisson et de la distribution cumulative de Poisson en Python et Java, respectivement.
[Python] Le résultat du clustering par K-means est réduit en dimension par PCA et tracé sur un diagramme de dispersion.
Test d'hypothèse et distribution de probabilité
Essayez de transcrire la fonction de masse stochastique de la distribution binomiale en Python
Probabilité des prix les plus élevés et les plus bas des louveteaux à Atsumori
Installer et gérer plusieurs environnements de la même distribution sur WSL