100 coups de traitement du langage amateur: 98

C'est un record de défi de 100 langues de traitement knock 2015. L'environnement est Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64 bits). Cliquez ici pour une liste des coups passés (http://qiita.com/segavvy/items/fb50ba8097d59475f760).

Chapitre 10: Méthode de l'espace vectoriel (II)

Au chapitre 10, nous continuerons à travailler sur l'apprentissage des vecteurs de mots du chapitre précédent.

98. Regroupement des quartiers

Effectuez un regroupement hiérarchique par la méthode Ward pour> 96 vecteurs de mots. De plus, visualisez le résultat du regroupement sous forme de dendrogramme.

Le code fini:

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'


#Lire le dictionnaire
with open(fname_dict_index_t, 'rb') as data_file:
		dict_index_t = pickle.load(data_file)

#Lecture de la matrice
matrix_x300 = io.loadmat(fname_matrix_x300)['matrix_x300']

#Clustering avec la méthode Ward
ward = ward(matrix_x300)
print(ward)

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

Résultat de l'exécution:

Kobito.MNLwcE.png

C'est un peu détaillé et il est difficile de lire le nom du pays, mais ...

Le résultat de l'exécution de la méthode Ward s'affiche sur la console. A la fin, quelques avertissements qui semblent liés à l'interface graphique sont affichés, mais je ne l'ai pas vu car le dendrogramme peut être affiché pour le moment ^ ^;

Extrait du résultat de l'exécution


[[  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]
(Omis)
 [  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

Classification hiérarchique

Le regroupement hiérarchique est une méthode de regroupement des plus similaires étape par étape, au lieu de déterminer d'abord le nombre de groupes comme dans la question précédente K-Means.

Tout d'abord, considérez chaque donnée comme des grappes séparées, calculez la distance entre les grappes et combinez les grappes avec les distances les plus proches en une seule. Ceci termine le premier processus et se classe en clusters avec -1 données. Répétez cette opération pour réduire les grappes un par un. Lorsqu'un cluster est assemblé, la distance par rapport aux autres clusters est calculée en utilisant le centre de gravité des données lui appartenant en tant que point représentatif de ce cluster.

Méthode Ward (méthode Ward)

Le clustering hiérarchique peut être divisé en plusieurs méthodes en fonction de la façon dont la distance entre les clusters est calculée. La méthode Ward en fait partie, qui minimise la distance entre chaque valeur de l'amas et son centre de masse. D'autres méthodes incluent la méthode de la moyenne de groupe et la méthode de la distance la plus courte.

Dendrogramme

Un dendrogramme est un dendrogramme. Visualisez les résultats du clustering hiérarchique sous la forme d'une table de tournoi. Le point de branchement de la ligne montre le cluster qui a été assemblé et le traitement réel est effectué de bas en haut. L'axe vertical est la somme des distances des données appartenant au cluster, et il montre que plus il monte, plus il est assemblé.

Dans le dendrogramme des résultats d'exécution, si vous le coupez horizontalement au-dessus du 25e axe vertical, vous pouvez l'utiliser à la suite de la classification en deux clusters. S'il est juste au-dessus de 20, il sera de 3, et s'il est juste en dessous de 20, il sera de 4. De cette façon, vous pouvez décider du nombre de classifications tout en regardant le dendrogramme.

Kobito.4DlwhF.png

Il existe de nombreuses explications sur le regroupement hiérarchique et la méthode Ward lorsque vous recherchez sur Google, je vais donc omettre les détails. L'explication Data Mining Cluster Analysis sur la page d'accueil d'ALBERT était facile à comprendre.

Mise en œuvre de la méthode Ward

Le clustering avec la méthode Ward est facile avec SciPy, que nous avons commencé à utiliser dans Problème 84.

Word dans scipy.cluster.hierarchy.ward () Spécifiez le vecteur et vous avez terminé. Le nombre de lignes dans la matrice résultante est le nombre total (= nombre de données-1), et la valeur numérique dans chaque colonne est l'index du cluster regroupé par les deux premiers, la somme des distances des données appartenant au cluster et le dernier. Est le nombre de données dans le cluster groupé.

Par exemple, dans la première ligne du résultat de l'exécution

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


 Indique le processus résumé en premier. Les clusters avec les index 32 et 55 (initialement le mot lui-même) sont regroupés dans un cluster, et la somme des distances des données appartenant au cluster est de 0,3537 ... (= la valeur sur l'axe vertical du dendrogramme). Il montre que deux données lui appartiennent. Le cluster groupé sera indexé avec la valeur d'index maximale actuelle + 1.

 De la dernière ligne

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

Indique le processus de résumé final. Les index 414 et 415 sont regroupés, et la somme des distances est 41,8596 ..., et 209 données (= nombre total de données) lui appartiennent. Cela correspond à la ligne bleue dans le dendrogramme résultant.

Mise en œuvre du dendrogramme

L'affichage du dendrogramme est également facile avec SciPy, scipy.cluster.hierarchy.dendrogram () /generated/scipy.cluster.hierarchy.dendrogram.html#scipy-cluster-hierarchy-dendrogram) à [scipy.cluster.hierarchy.ward ()](https://docs.scipy.org/doc/scipy/reference/ Spécifiez simplement le résultat de generated / scipy.cluster.hierarchy.ward.html # scipy-cluster-hierarchy-ward). Par défaut, les caractères sont trop petits, donc je l'ai ajusté avec leaf_font_size. Vous pouvez également permuter les axes en spécifiant «orientation».

Malheureusement, c'est la même chose que la question précédente, et même si vous regardez les résultats, vous ne pouvez pas dire dans quel type de perspective il a été classé ...

C'est tout pour le 99e coup. Si vous avez des erreurs, je vous serais reconnaissant de bien vouloir les signaler.


Recommended Posts

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