[PYTHON] Text Mining: Wahrscheinlichkeitsdichteverteilung auf Hypersphäre und Textclustering mit KMeans

zunaechst

Dieser Artikel extrahierte den Grad der Streuung von Richtungsinformationen auf der Hypersphäre. In dem damals verwendeten Beispiel eines Kugelclusters wird ein Beispiel mit vmFD erstellt. In einem von ihnen wird tf-idf verwendet, um Wörter in einem Dokument zu vektorisieren, und KMeans wird verwendet, um sie nach dem Schwerpunkt des Vektors zu kategorisieren. In diesem Artikel werden wir das Clustering von Dokumenten vergleichen, indem wir es mit allgemeinen KMeans und movMFD am Beispiel des Sphärenclusters ausführen. Klicken Sie hier für bestimmte Programme. In diesem Artikel werde ich nur die wichtigsten Punkte vorstellen.

Dateneinführung

Zunächst werde ich die zu verwendenden Daten vorstellen. Enthält Zeitungsskripte und 4 Arten von Kategoriedaten aus externen Datensätzen von sklearn Laden Sie den Text.

###############################################################################
# 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)

Die Textdaten werden so erfasst. Screen Shot 2017-01-27 at 1.48.27.png

Dieser Satz wird mit TfidfVectorizer vektorkonvertiert.

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)

Das Ergebnis ist eine Liste von 3387 Zeilen x 43256 Spalten. Wenn Sie tfidf kennen, müssen Sie es nicht erklären, aber es bedeutet, dass es 3387 Sätze und 43256 eindeutige Wörter gibt.

Hier, falls erforderlich, LSA ausführen. Wenn use_LSA = True ist, werden die Dokumentdaten im Voraus dimensional auf n_components = 500 komprimiert. Der Standardwert ist 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()

Damit ist die Datenaufbereitung abgeschlossen.

Clustering von Wortvektordaten

Als nächstes wird das Clustering von Dokumenten auf vier Arten durchgeführt: K-Mittel, sphärische K-Mittel, Soft-MovMF und 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)

Einführung des Bewertungsindex

Hier erfolgt die Auswertung anhand der Metriken von sklearn. Insbesondere führen wir die folgenden sechs Bewertungen durch.

Einzelheiten zu jedem Bewertungsindex finden Sie in diesem Artikel. *Herstellung

Auswertung der Clusterergebnisse

Hier ist das Bewertungsergebnis.

Screen Shot 2017-01-27 at 5.04.20.png

In allen Ergebnissen ist ersichtlich, dass der Index des Kugelclusters K-Mitteln überlegen ist. Insbesondere wurde K Means auf eine Hypersphäre ausgedehnt. Sphärische KMeans und movMF-soft und movMF-hard unter Verwendung der von Mies Fisher-Verteilung zeigten hervorragende Ergebnisse.

Recommended Posts

Text Mining: Wahrscheinlichkeitsdichteverteilung auf Hypersphäre und Textclustering mit KMeans
Vorsichtsmaßnahmen bei der Überlagerung der Wahrscheinlichkeitsdichtefunktion und des Histogramms in matplotlib
Fügen Sie dem Bild Linien und Text hinzu
Besiege die Wahrscheinlichkeitsdichtefunktion der Normalverteilung
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering
Eine Methode zum Clustering von Punkten, die auf einer Hypersphäre verteilt sind. Dies ist praktisch für das Text Mining und die Merkmalsextraktion von Richtungsinformationen.
Extrahieren und listen Sie die Namen von Personen und Orten im Text auf
Verstehen Sie die Exponentialverteilung sorgfältig und zeichnen Sie in Python
Zeichnen und verstehen Sie die multivariate Normalverteilung in Python
Verstehe die Poisson-Distribution sorgfältig und zeichne in Python
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Zählen Sie die Anzahl der Zeichen im Text in der Zwischenablage auf dem Mac
Zeichnen wir ein Diagramm der Poisson-Verteilung und der kumulativen Poisson-Verteilung in Python bzw. Java.
[Python] Das Clustering-Ergebnis mit K-Mitteln wird durch PCA verkleinert und in einem Streudiagramm dargestellt.
Hypothesentest und Wahrscheinlichkeitsverteilung
Versuchen Sie, die stochastische Massenfunktion der Binomialverteilung in Python zu transkribieren
Wahrscheinlichkeit der höchsten und niedrigsten Jungtierpreise in Atsumori
Installieren und verwalten Sie mehrere Umgebungen derselben Distribution in WSL