[PYTHON] 100 coups de traitement du langage amateur: 97

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.

97. clustering k-signifie

Exécutez le clustering k-means pour un vecteur de mots> 96 avec le nombre de clusters $ k = 5 $.

Le code fini:

main.py


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

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']

#KMeans clustering
predicts = KMeans(n_clusters=5).fit_predict(matrix_x300)

# (Pays,Numéro de classe)liste
result = zip(dict_index_t.keys(), predicts)

#Trier par numéro de classification et afficher
for country, category in sorted(result, key=lambda x: x[1]):
	print('{}\t{}'.format(category, country))

Résultat de l'exécution:

Les numéros de classification de 0 à 4 et les noms de pays sont délimités par des tabulations.

Résultat d'exécution


0	Andorra
0	Antarctica
0	Antigua_and_Barbuda
0	Bahamas
0	Bahrain
0	Barbados
0	Belarus
0	Belize
0	Benin
0	Bermuda
0	Bhutan
0	Bosnia_and_Herzegovina
0	Botswana
0	Burkina_Faso
0	Burundi
0	Cameroon
0	Central_African_Republic
0	Chad
0	Commonwealth_of_Australia
0	Comoros
0	Congo
0	Cook_Islands
0	Democratic_Republic_of_the_Congo
0	Djibouti
0	Dominica
0	Dominican_Republic
0	Ecuador
0	Eritrea
0	Estonia
0	Federal_Republic_of_Germany
0	Federated_States_of_Micronesia
0	French_Republic
0	Gabon
0	Gambia
0	Gibraltar
0	Greenland
0	Grenada
0	Guadeloupe
0	Guam
0	Guatemala
0	Guinea-Bissau
0	Guyana
0	Haiti
0	Honduras
0	Jamaica
0	Jordan
0	Kazakhstan
0	Kingdom_of_the_Netherlands
0	Kiribati
0	Kuwait
0	Kyrgyzstan
0	Lao
0	Latvia
0	Lesotho
0	Liberia
0	Liechtenstein
0	Luxembourg
0	Macau
0	Madagascar
0	Malawi
0	Maldives
0	Mali
0	Martinique
0	Mauritania
0	Mauritius
0	Mayotte
0	Micronesia
0	Moldova
0	Monaco
0	Mongolia
0	Montenegro
0	Mozambique
0	Myanmar
0	Namibia
0	Nauru
0	Nicaragua
0	Niger
0	Niue
0	Oman
0	Palau
0	Paraguay
0	Qatar
0	Republic_of_Albania
0	Republic_of_Armenia
0	Republic_of_Austria
0	Republic_of_Congo
0	Republic_of_Croatia
0	Republic_of_Estonia
0	Republic_of_Korea
0	Republic_of_Poland
0	Republic_of_Singapore
0	Republic_of_South_Africa
0	Republic_of_Turkey
0	Republic_of_the_Philippines
0	Russian_Federation
0	Rwanda
0	Saint_Lucia
0	Senegal
0	Seychelles
0	Slovenia
0	Solomon_Islands
0	Somalia
0	State_of_Israel
0	Suriname
0	Swaziland
0	Tajikistan
0	Tibet
0	Timor-Leste
0	Togo
0	Tokelau
0	Tonga
0	Tunisia
0	Turkmenistan
0	Tuvalu
0	United_Arab_Emirates
0	United_States_of_America
0	Uzbekistan
0	Vanuatu
0	Vatican
0	Yemen
0	Zambia
0	Zimbabwe
1	Austria
1	Belgium
1	Bulgaria
1	Denmark
1	Egypt
1	France
1	Germany
1	Greece
1	Hungary
1	Ireland
1	Italy
1	Macedonia
1	Netherlands
1	Norway
1	Poland
1	Portugal
1	Romania
1	Spain
1	Sweden
2	Afghanistan
2	China
2	India
2	Iraq
2	Israel
2	Korea
2	Pakistan
2	Taiwan
2	United_States
2	Vietnam
3	Argentina
3	Australia
3	Brazil
3	Canada
3	Japan
3	Mexico
3	New_Zealand
3	Switzerland
4	Albania
4	Algeria
4	Angola
4	Armenia
4	Azerbaijan
4	Bangladesh
4	Bolivia
4	Cambodia
4	Chile
4	Colombia
4	Croatia
4	Cuba
4	Cyprus
4	Czech_Republic
4	Ethiopia
4	Fiji
4	Finland
4	Georgia
4	Ghana
4	Guinea
4	Iceland
4	Indonesia
4	Iran
4	Kenya
4	Kosovo
4	Lebanon
4	Libya
4	Lithuania
4	Malaysia
4	Malta
4	Morocco
4	Nepal
4	Nigeria
4	Panama
4	People's_Republic_of_China
4	Peru
4	Philippines
4	Samoa
4	Serbia
4	Singapore
4	Slovakia
4	Sudan
4	Syria
4	Tanzania
4	Thailand
4	Turkey
4	Uganda
4	Ukraine
4	Uruguay
4	Venezuela

Techniques de classification des données

Il existe deux méthodes principales pour classer les données: la classification (classification) et le clustering (clustering).

Classification (classification)

La classification est une méthode permettant de prédéfinir des groupes (classes), par exemple, lors de la distribution de nouvelles dans des groupes prédéfinis tels que «politique», «économie» et «sports». Aussi connu sous le nom de classification.

Clustering

Le clustering est une méthode d'extraction de groupes de personnes similaires sans définir de groupes à l'avance. Lors de l'analyse d'une grande quantité de données, vous ne pouvez pas voir chacune d'elles, vous pouvez donc les regrouper grossièrement en blocs similaires et voir les propriétés et les tendances de chaque bloc. De quel genre de groupe s'agit-il de se diviser en cinq? Il n'y a pas de définition. Par conséquent, nous utilisons le clustering.

La méthode de regroupement est divisée en regroupement non hiérarchique tel que les K-Means utilisés cette fois et en regroupement hiérarchique tel que la méthode de Ward utilisée dans le problème suivant 98.

Clustering K-Means

L'algorithme de base de K-Means est simple.

Tout d'abord, sélectionnez le centre du nombre spécifié de clusters dans l'espace vectoriel. Ensuite, pour chaque donnée, vérifiez la distance au centre de chaque cluster et distribuez-la au cluster avec le centre le plus proche. Ceci termine la première distribution. Après le tri, vérifiez le score moyen des données appartenant à chaque cluster et utilisez-le comme nouveau point central pour ce cluster. Ici, réinitialisez la distribution des données une fois, vérifiez à nouveau la distance par rapport au nouveau centre de chaque cluster pour chaque donnée et réallouez-la au cluster avec le centre le plus proche. Ceci termine la deuxième distribution. Répétez ceci jusqu'à ce que le centre bouge à peine, et vous avez terminé.

Beaucoup d'explications sur K-Means sortiront lorsque vous google, donc j'omettrai les détails. Vous pouvez étudier à la semaine 8 au [Machine Learning] de Coursera (https://www.coursera.org/learn/machine-learning).

Implémentation des K-Means

Le clustering avec K-Means utilise scikit-learn, que j'ai commencé à utiliser dans Problème 85. C'est facile à utiliser. Spécifiez le nombre de clusters dans la classe sklearn.cluster.KMeans et [fit_predict ()] Si vous transmettez une matrice sur (http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans.fit_predict), le clustering sera effectué et un tableau de numéros de classification pour chaque ligne Vous pouvez obtenir (la plage de valeurs va de 0 au nombre de clusters-1).

Le point central du premier cluster sélectionné est aléatoire. Par conséquent, le résultat peut changer légèrement chaque fois qu'il est exécuté. Si vous ne voulez pas le changer, spécifiez random_state de sklearn.cluster.KMeans pour obtenir un nombre aléatoire. Vous pouvez spécifier la valeur de départ de.

Dans ce programme, j'ai essayé de trier et d'afficher par numéro de classification. Cependant, même si vous regardez les résultats, vous ne pouvez pas dire dans quel type de perspective ils ont été classés. D'une manière ou d'une autre, le numéro de classification 1 semble être une collection de pays européens, mais dans des noms officiels tels que "République_ d'Autriche", il est devenu le numéro de classification 0. «United_States_of_America» et «United_States» sont également des catégories différentes. Problème 96 L'extraction du pays n'a peut-être pas été bonne ...

C'est tout pour le 98e coup. Si vous avez des erreurs, j'apprécierais que vous les signaliez.


Recommended Posts

100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
100 coups de traitement du langage amateur: 97
100 coups de traitement du langage amateur: 67
100 coups de traitement du langage amateur: Résumé
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
100 coups de traitement du langage amateur: 41
100 coups de traitement du langage amateur: 71
100 coups de traitement du langage amateur: 56
100 coups de traitement du langage amateur: 50
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 coups de traitement du langage amateur: 59
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 Language Processing Knock 2020 Chapitre 1
100 coups de langue amateur: 30
100 coups de langue amateur: 06
100 coups de traitement du langage amateur: 84
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
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 Traitement du langage Knock-52: Stemming
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 Traitement du langage Knock Chapitre 1
100 coups de traitement du langage amateur: 63
100 coups de traitement du langage amateur: 78
100 coups de traitement du langage amateur: 12
100 coups de traitement du langage amateur: 14
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: 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: 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 Language Processing Knock 2020 Chapitre 3
100 coups de traitement du langage amateur: 90