[PYTHON] 100 Amateur-Sprachverarbeitungsklopfen: 98

Es ist ein Herausforderungsrekord von 100 Sprachverarbeitungsklopfen 2015. Die Umgebung ist Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64-Bit). Klicken Sie hier, um eine Liste der vergangenen Schläge anzuzeigen (http://qiita.com/segavvy/items/fb50ba8097d59475f760).

Kapitel 10: Vektorraummethode (II)

In Kapitel 10 werden wir weiter daran arbeiten, Wortvektoren aus dem vorherigen Kapitel zu lernen.

98. Ward Clustering

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.

Der fertige Code:

main.py


# coding: utf-8
import pickle
from collections import OrderedDict
from scipy import io
import numpy as np

from scipy.cluster.hierarchy import ward, dendrogram
from matplotlib import pyplot as plt

fname_dict_index_t = 'dict_index_country'
fname_matrix_x300 = 'matrix_x300_country'


#Wörterbuch lesen
with open(fname_dict_index_t, 'rb') as data_file:
		dict_index_t = pickle.load(data_file)

#Matrix lesen
matrix_x300 = io.loadmat(fname_matrix_x300)['matrix_x300']

#Clustering mit der Ward-Methode
ward = ward(matrix_x300)
print(ward)

#Dendrogrammanzeige
dendrogram(ward, labels=list(dict_index_t.keys()), leaf_font_size=8)
plt.show()

Ausführungsergebnis:

Kobito.MNLwcE.png

Es ist ein wenig detailliert und es ist schwer, den Ländernamen zu lesen, aber ...

Das Ausführungsergebnis der Ward-Methode wird auf der Konsole angezeigt. Am Ende werden einige Warnungen angezeigt, die mit der GUI in Zusammenhang zu stehen scheinen, aber ich habe sie nicht gesehen, da das Dendrogramm vorerst angezeigt werden kann ^^;

Auszug aus dem Ausführungsergebnis


[[  3.20000000e+01   5.50000000e+01   3.53776681e-01   2.00000000e+00]
 [  6.00000000e+00   1.36000000e+02   3.87856834e-01   2.00000000e+00]
 [  1.77000000e+02   1.88000000e+02   4.23449123e-01   2.00000000e+00]
 [  1.54000000e+02   2.10000000e+02   4.27902443e-01   3.00000000e+00]
 [  1.57000000e+02   1.59000000e+02   4.59378255e-01   2.00000000e+00]
 [  3.70000000e+01   1.49000000e+02   4.71549159e-01   2.00000000e+00]
 [  2.80000000e+01   2.11000000e+02   4.87752476e-01   3.00000000e+00]
 [  1.58000000e+02   1.93000000e+02   4.97266503e-01   2.00000000e+00]
 [  3.80000000e+01   6.20000000e+01   5.05332444e-01   2.00000000e+00]
 [  1.20000000e+02   1.60000000e+02   5.24018281e-01   2.00000000e+00]
 [  2.09000000e+02   2.12000000e+02   5.26909455e-01   5.00000000e+00]
 [  2.14000000e+02   2.19000000e+02   5.63841737e-01   7.00000000e+00]
 [  1.01000000e+02   1.78000000e+02   5.74498656e-01   2.00000000e+00]
 [  1.18000000e+02   2.15000000e+02   5.88183758e-01   4.00000000e+00]
 [  1.55000000e+02   2.13000000e+02   6.09433424e-01   3.00000000e+00]
 [  1.51000000e+02   2.20000000e+02   6.57637828e-01   8.00000000e+00]
 [  7.40000000e+01   2.22000000e+02   6.69853809e-01   5.00000000e+00]
 [  4.80000000e+01   7.00000000e+01   6.72731044e-01   2.00000000e+00]
 [  2.17000000e+02   2.21000000e+02   6.88767402e-01   4.00000000e+00]
 [  2.16000000e+02   2.18000000e+02   6.89235190e-01   4.00000000e+00]
(Weggelassen)
 [  3.53000000e+02   3.66000000e+02   7.72813958e+00   3.70000000e+01]
 [  8.80000000e+01   3.93000000e+02   7.91160391e+00   3.00000000e+00]
 [  5.90000000e+01   3.95000000e+02   8.36126980e+00   4.00000000e+00]
 [  3.10000000e+01   3.98000000e+02   8.42501966e+00   4.00000000e+00]
 [  3.71000000e+02   3.97000000e+02   8.67427318e+00   1.10000000e+02]
 [  3.84000000e+02   3.87000000e+02   8.73417227e+00   4.90000000e+01]
 [  9.40000000e+01   3.96000000e+02   8.76123102e+00   3.00000000e+00]
 [  3.88000000e+02   3.92000000e+02   9.29959662e+00   1.20000000e+01]
 [  3.86000000e+02   3.89000000e+02   1.00548308e+01   5.00000000e+00]
 [  3.90000000e+02   3.91000000e+02   1.03513479e+01   1.80000000e+01]
 [  8.40000000e+01   4.06000000e+02   1.08361185e+01   1.90000000e+01]
 [  4.02000000e+02   4.04000000e+02   1.22602262e+01   6.10000000e+01]
 [  4.03000000e+02   4.05000000e+02   1.27024876e+01   8.00000000e+00]
 [  3.99000000e+02   4.07000000e+02   1.36985698e+01   2.30000000e+01]
 [  1.98000000e+02   4.00000000e+02   1.39290496e+01   5.00000000e+00]
 [  4.09000000e+02   4.11000000e+02   1.64166647e+01   1.30000000e+01]
 [  3.94000000e+02   4.08000000e+02   1.65142018e+01   6.30000000e+01]
 [  4.10000000e+02   4.12000000e+02   2.02282024e+01   3.60000000e+01]
 [  4.01000000e+02   4.13000000e+02   2.40955381e+01   1.73000000e+02]
 [  4.14000000e+02   4.15000000e+02   4.18596046e+01   2.09000000e+02]]
GLib-GIO-Message: Using the 'memory' GSettings backend.  Your settings will not be saved or shared with other applications.

(python:20130): Gtk-WARNING **: GModule (/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-fcitx.so) initialization check failed: GLib version too old (micro mismatch)

(python:20130): Gtk-WARNING **: Loading IM context type 'fcitx' failed

(python:20130): Gtk-WARNING **: GModule (/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-fcitx.so) initialization check failed: GLib version too old (micro mismatch)

(python:20130): Gtk-WARNING **: Loading IM context type 'fcitx' failed

(python:20130): Gtk-WARNING **: GModule (/usr/lib/x86_64-linux-gnu/gtk-2.0/2.10.0/immodules/im-fcitx.so) initialization check failed: GLib version too old (micro mismatch)

(python:20130): Gtk-WARNING **: Loading IM context type 'fcitx' failed

Hierarchisches Clustering

Hierarchisches Clustering ist eine Methode, um die ähnlichsten schrittweise zu gruppieren, anstatt wie in der vorherigen Frage K-Means zuerst die Anzahl der Cluster zu bestimmen.

Betrachten Sie zunächst alle Daten als separate Cluster, berechnen Sie den Abstand zwischen den Clustern und kombinieren Sie die Cluster mit den nächstgelegenen Abständen zu einem. Dies schließt den ersten Prozess ab und klassifiziert in Cluster mit -1 Daten. Wiederholen Sie diesen Vorgang, um die Cluster einzeln zu reduzieren. Wenn ein Cluster zusammengestellt wird, wird der Abstand zu anderen Clustern unter Verwendung des Schwerpunkts der dazugehörigen Daten als repräsentativer Punkt dieses Clusters berechnet.

Stationsmethode (Stationsmethode)

Hierarchisches Clustering kann in verschiedene Methoden unterteilt werden, je nachdem, wie der Abstand zwischen Clustern berechnet wird. Die Ward-Methode ist eine davon, die den Abstand zwischen jedem Wert des Clusters und seinem Massenzentrum minimiert. Andere Methoden umfassen die Gruppenmittelwertmethode und die Methode der kürzesten Entfernung.

Dendrogramm

Ein Dendrogramm ist ein Dendrogramm. Visualisieren Sie die Ergebnisse der hierarchischen Clusterbildung in Form einer Turniertabelle. Der Verzweigungspunkt der Linie zeigt den Cluster, der zusammengestellt wurde, und die eigentliche Verarbeitung erfolgt von unten nach oben. Die vertikale Achse ist die Summe der Abstände der zugehörigen Daten im Cluster und zeigt, dass sie umso weiter zusammengesetzt sind, je weiter sie nach oben gehen.

Wenn Sie im Ausführungsergebnis-Dendrogramm es horizontal über 25 auf der vertikalen Achse schneiden, können Sie es als Ergebnis der Klassifizierung in zwei Cluster verwenden. Wenn es knapp über 20 liegt, ist es 3, und wenn es knapp unter 20 ist, ist es 4. Auf diese Weise können Sie die Anzahl der Klassifizierungen festlegen, während Sie das Dendrogramm betrachten.

Kobito.4DlwhF.png

Es gibt viele Erklärungen für hierarchisches Clustering und die Ward-Methode, wenn Sie googeln, daher werde ich die Details weglassen. Die Erklärung Data Mining Cluster Analysis auf der ALBERT-Homepage war leicht zu verstehen.

Implementierung der Ward-Methode

Das Clustering mit der Ward-Methode ist mit SciPy, das wir in Problem 84 verwendet haben, einfach.

Wort in scipy.cluster.hierarchy.ward () Geben Sie den Vektor an und Sie sind fertig. Die Anzahl der Zeilen in der resultierenden Matrix ist die Gesamtzahl (= Anzahl der Daten-1), und der numerische Wert in jeder Spalte ist der Index des Clusters, der durch die ersten beiden gebündelt wird, die Summe der Abstände der zum Cluster gehörenden Daten und der letzten. Ist die Anzahl der Daten im gebündelten Cluster.

Zum Beispiel in der ersten Zeile des Ausführungsergebnisses

[ 3.20000000e+01 5.50000000e+01 3.53776681e-01 2.00000000e+00]


 Zeigt den zuerst zusammengefassten Prozess an. Cluster mit den Indizes 32 und 55 (anfangs das Wort selbst) werden zu einem Cluster gebündelt, und die Summe der Abstände der zugehörigen Daten im Cluster beträgt 0,3537 ... (= der Wert auf der vertikalen Achse des Dendrogramms). Es zeigt, dass zwei Daten dazu gehören. Der gebündelte Cluster wird mit dem aktuellen maximalen Indexwert + 1 indiziert.

 Von der letzten Zeile

#### **` [  4.14000000e+02   4.15000000e+02   4.18596046e+01   2.09000000e+02]`**

Zeigt den endgültigen Zusammenfassungsprozess an. Die Indizes 414 und 415 sind gebündelt, die Summe der Entfernungen beträgt 41,8596 ... und 209 Daten (= Gesamtzahl der Daten) gehören dazu. Dies entspricht der blauen Linie im resultierenden Dendrogramm.

Implementierung des Dendrogramms

Das Anzeigen des Dendrogramms ist auch mit SciPy, scipy.cluster.hierarchy.dendrogram () einfach. /generated/scipy.cluster.hierarchy.dendrogram.html#scipy-cluster-hierarchy-dendrogram) to [scipy.cluster.hierarchy.ward ()](https://docs.scipy.org/doc/scipy/reference/ Geben Sie einfach das Ergebnis von generate / scipy.cluster.hierarchy.ward.html an (# scipy-cluster-hierarchy-ward). Standardmäßig sind die Zeichen zu klein, daher habe ich sie mit "leaf_font_size" angepasst. Sie können Achsen auch tauschen, indem Sie "Ausrichtung" angeben.

Leider ist es das gleiche wie bei der vorherigen Frage, und selbst wenn Sie sich die Ergebnisse ansehen, können Sie nicht sagen, in welche Perspektive es eingeteilt wurde ...

Das ist alles für den 99. Schlag. Wenn Sie Fehler haben, würde ich mich freuen, wenn Sie darauf hinweisen könnten.


Recommended Posts

100 Amateur-Sprachverarbeitungsklopfen: 41
100 Amateur-Sprachverarbeitungsklopfen: 71
100 Amateur-Sprachverarbeitungsklopfen: 24
100 Amateur-Sprachverarbeitungsklopfen: 50
100 Amateur-Sprachverarbeitungsklopfen: 70
100 Amateur-Sprachverarbeitungsklopfen: 62
100 Amateur-Sprachverarbeitungsklopfen: 60
100 Amateur-Sprachverarbeitungsklopfen: 92
100 Amateur-Sprachverarbeitungsklopfen: 30
100 Amateur-Sprachverarbeitungsklopfen: 06
100 Amateur-Sprachverarbeitungsklopfen: 84
100 Amateur-Sprachverarbeitungsklopfen: 81
100 Amateur-Sprachverarbeitungsklopfen: 33
100 Amateur-Sprachverarbeitungsklopfen: 46
100 Amateur-Sprachverarbeitungsklopfen: 88
100 Amateur-Sprachverarbeitungsklopfen: 89
100 Amateur-Sprachverarbeitungsklopfen: 40
100 Amateur-Sprachverarbeitungsklopfen: 45
100 Amateur-Sprachverarbeitungsklopfen: 43
100 Amateur-Sprachverarbeitungsklopfen: 55
100 Amateur-Sprachverarbeitungsklopfen: 22
100 Amateur-Sprachverarbeitungsklopfen: 61
100 Amateur-Sprachverarbeitungsklopfen: 94
100 Amateur-Sprachverarbeitungsklopfen: 54
100 Amateur-Sprachverarbeitungsklopfen: 04
100 Amateur-Sprachverarbeitungsklopfen: 63
100 Amateur-Sprachverarbeitungsklopfen: 78
100 Amateur-Sprachverarbeitungsklopfen: 08
100 Amateur-Sprachverarbeitungsklopfen: 42
100 Amateur-Sprachverarbeitungsklopfen: 19
100 Amateur-Sprachverarbeitungsklopfen: 73
100 Amateur-Sprachverarbeitungsklopfen: 75
100 Amateur-Sprachverarbeitungsklopfen: 98
100 Amateur-Sprachverarbeitungsklopfen: 83
100 Amateur-Sprachverarbeitungsklopfen: 95
100 Amateur-Sprachverarbeitungsklopfen: 32
100 Amateur-Sprachverarbeitungsklopfen: 96
100 Amateur-Sprachverarbeitungsklopfen: 87
100 Amateur-Sprachverarbeitungsklopfen: 72
100 Amateur-Sprachverarbeitungsklopfen: 79
100 Amateur-Sprachverarbeitungsklopfen: 23
100 Amateur-Sprachverarbeitungsklopfen: 05
100 Amateur-Sprachverarbeitungsklopfen: 00
100 Amateur-Sprachverarbeitungsklopfen: 02
100 Amateur-Sprachverarbeitungsklopfen: 37
100 Amateur-Sprachverarbeitungsklopfen: 21
100 Amateur-Sprachverarbeitungsklopfen: 68
100 Amateur-Sprachverarbeitungsklopfen: 11
100 Amateur-Sprachverarbeitungsklopfen: 90
100 Amateur-Sprachverarbeitungsklopfen: 74
100 Amateur-Sprachverarbeitungsklopfen: 66
100 Amateur-Sprachverarbeitungsklopfen: 28
100 Amateur-Sprachverarbeitungsklopfen: 64
100 Amateur-Sprachverarbeitungsklopfen: 34
100 Amateur-Sprachverarbeitungsklopfen: 36
100 Amateur-Sprachverarbeitungsklopfen: 77
100 Amateur-Sprachverarbeitungsklopfen: 01
100 Amateur-Sprachverarbeitungsklopfen: 16
100 Amateur-Sprachverarbeitungsklopfen: 27
100 Amateur-Sprachverarbeitungsklopfen: 10
100 Amateur-Sprachverarbeitungsklopfen: 03