Dies ist die Aufzeichnung des 98. "Clustering nach der Ward-Methode" von 100 Language Processing Knock 2015. Im Gegensatz zum vorherigen nicht hierarchischen Clustering wird ein hierarchisches Clustering durchgeführt. Das Klopfergebnis liegt in der unten gezeigten Form vor, in der die Cluster hierarchisch sind (groß, weil es 238 Länder gibt ...).
Verknüpfung | Bemerkungen |
---|---|
098.Clustering nach Ward-Methode.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:98 | Ich bin Ihnen immer mit 100 Sprachverarbeitungsklopfen zu Dank verpflichtet |
Informationen zum Erstellen eines Dendrogramms mit Python und den Elementen der Verknüpfung | Ward-Methode und Dendrogramm-Implementierungsmethode in Python |
Art | Ausführung | Inhalt |
---|---|---|
OS | Ubuntu18.04.01 LTS | Es läuft virtuell |
pyenv | 1.2.15 | Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze |
Python | 3.6.9 | python3 auf pyenv.6.Ich benutze 9 3.7 oder 3.Es gibt keinen tiefen Grund, keine 8er-Serie zu verwenden Pakete werden mit venv verwaltet |
In der obigen Umgebung verwende ich die folgenden zusätzlichen Python-Pakete. Einfach mit normalem Pip installieren.
Art | Ausführung |
---|---|
matplotlib | 3.1.1 |
pandas | 0.25.3 |
scipy | 1.4.1 |
In Kapitel 10 werden wir weiter daran arbeiten, Wortvektoren aus dem vorherigen Kapitel zu lernen.
Führen Sie ein hierarchisches Clustering nach der Ward-Methode für> 96 Wortvektoren durch. Stellen Sie sich das Clustering-Ergebnis außerdem als Dendrogramm vor.
Diesmal handelt es sich um hierarchisches Clustering. Die Details waren in Link sehr leicht zu verstehen. Die Anzahl der Cluster kann durch Teilen durch die obere Hierarchie beliebig festgelegt werden.
import matplotlib.pyplot as plt
import pandas as pd
from scipy.cluster.hierarchy import dendrogram, linkage
country_vec = pd.read_pickle('./096.country_vector.zip')
print(country_vec.info())
clustered = linkage(country_vec, method='ward')
plt.figure(figsize=(20, 50), dpi=100, facecolor='c')
_ = dendrogram(clustered, labels=list(country_vec.index), leaf_font_size=8, orientation='right')
plt.show()
Im Allgemeinen verweise ich auf den Artikel "Über das Erstellen eines Dendrogramms mit Python und den Elementen der Verknüpfung".
Cluster mit der Funktion "Verknüpfung". Durch Setzen des Parameters method
auf ward
wird das Clustering durch die Ward-Methode durchgeführt.
clustered = linkage(country_vec, method='ward')
Danach wird das Ergebnis angezeigt. Das angezeigte Dendrogramm (Baumdiagramm) wird oben platziert. Ich habe die Hintergrundfarbe absichtlich auf "c" (Cyan) gesetzt, da das Standardweiß nicht sichtbar war, als das Etikett in eine Bilddatei umgewandelt wurde.
plt.figure(figsize=(20, 50), dpi=100, facecolor='c')
_ = dendrogram(clustered, labels=list(country_vec.index), leaf_font_size=8, orientation='right')
plt.show()
Ich werde nur nach oben schauen. Im Gegensatz zu K-Means ist es schön zu wissen, wie ähnlich die einzelnen Länder sind. Wenn Sie glauben, dass die Meeresnationen in einer Reihe stehen, sind Japan und China nahe beieinander. Ich wundere mich warum. Irak, Afghanistan und Israel sind in physischer Entfernung nahe beieinander, aber haben sie eine ähnliche Bedeutung?