[PYTHON] 100 traitement du langage knock-99 (à l'aide de pandas): visualisation par t-SNE

Il s'agit de l'enregistrement de la 99e "Visualisation par t-SNE" de Traitement du langage 100 knock 2015. Utilisez t-SNE (intégration de voisin stochastique distribué en t) pour réduire à deux dimensions et visualiser le vecteur de mot comme indiqué dans la figure ci-dessous. Les humains peuvent le voir en 2 ou 3 dimensions. image.png

Lien de référence

Lien Remarques
099.t-Visualisation par SNE.ipynb Lien GitHub du programme de réponse
100 coups de traitement du langage amateur:99 Je vous suis toujours redevable de 100 coups de traitement linguistique
Les connaissances de base de matplotlib que je voulais connaître tôt, ou l'histoire de l'artiste qui sait ajuster l'apparence J'ai appris un peu les bases de Matplotlib
color example code: colormaps_reference.py Carte des couleurs Matplotlib

environnement

type version Contenu
OS Ubuntu18.04.01 LTS Il fonctionne virtuellement
pyenv 1.2.15 J'utilise pyenv car j'utilise parfois plusieurs environnements Python
Python 3.6.9 python3 sur pyenv.6.J'utilise 9
3.7 ou 3.Il n'y a aucune raison profonde de ne pas utiliser la série 8
Les packages sont gérés à l'aide de venv

Dans l'environnement ci-dessus, j'utilise les packages Python supplémentaires suivants. Installez simplement avec pip ordinaire.

type version
matplotlib 3.1.1
pandas 0.25.3
scikit-learn 0.21.3

Tâche

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.

99. Visualisation par t-SNE

Visualisez l'espace vectoriel avec t-SNE pour> 96 vecteurs de mots.

Supplément de tâche (t-SNE)

t-SNE (incorporation de voisin stochastique distribué en t) réduit la dimension à 2 ou 3. En termes de réduction de dimension, c'est la même chose que PCA (analyse en composantes principales). Cependant, il est également possible de traiter des données avec une structure non linéaire que PCA ne peut pas. Je l'ai écrit abondamment, mais je ne comprends pas les formules mathématiques et c'est une vente de l'article "Cool dimension compression & visualization by t-SNE".

Répondre

Programme de réponse [099.t-Visualization by SNE.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/10.%E3%83%99%E3%82%AF%E3%83%88 % E3% 83% AB% E7% A9% BA% E9% 96% 93% E6% B3% 95% 20 (II) /099.t-SNE%E3%81%AB%E3%82%88%E3% 82% 8B% E5% 8F% AF% E8% A6% 96% E5% 8C% 96.ipynb)

import matplotlib.pyplot as plt
import pandas as pd
from sklearn.manifold import TSNE
from sklearn.cluster import KMeans

country_vec = pd.read_pickle('./096.country_vector.zip')
print(country_vec.info())

# t-SNE
t_sne = TSNE().fit_transform(country_vec)
print('t_sne shape:', t_sne.shape)

#KMeans clustering
clustered = KMeans(n_clusters=5).fit_predict(country_vec)

fig, ax = plt.subplots(figsize=(22, 22))

# Set Color map
cmap = plt.get_cmap('Dark2')

for i in range(t_sne.shape[0]):
    cval = cmap(clustered[i] / 4)
    ax.scatter(t_sne[i][0], t_sne[i][1], marker='.', color=cval)
    ax.annotate(country_vec.index[i], xy=(t_sne[i][0], t_sne[i][1]), color=cval)
plt.show()

Répondre au commentaire

Près de 80% du total est une copie de Article "Amateur Language Processing 100 Knock: 99".

Voici le code principal pour cette fois. TSNE de scikt-learn a quelques paramètres, mais je l'ai exécuté avec les valeurs par défaut. Certains blogs ont mentionné que TSNE de scikt-learn n'est pas très bon, mais pour le moment, ne vous inquiétez pas. J'irai.

t_sne = TSNE().fit_transform(country_vec)

En outre, le regroupement non hiérarchique est effectué avec K-Mean comme couleur à afficher dans le diagramme de dispersion.

clustered = KMeans(n_clusters=5).fit_predict(country_vec)

Enfin, utilisez matplotlib pour afficher le diagramme de dispersion. La couleur d'affichage est définie en utilisant plt.get_cmap, et il y a des informations sur sa couleur dans code exemple de couleur: colormaps_reference.py. .. Le point est affiché avec «scatter» et le libellé (nom du pays) est affiché avec «annotate».

fig, ax = plt.subplots(figsize=(22, 22))

# Set Color map
cmap = plt.get_cmap('Dark2')

for i in range(t_sne.shape[0]):
    cval = cmap(clustered[i] / 4)
    ax.scatter(t_sne[i][0], t_sne[i][1], marker='.', color=cval)
    ax.annotate(country_vec.index[i], xy=(t_sne[i][0], t_sne[i][1]), color=cval)
plt.show()

En regardant la région autour du Japon, cela ressemble à ceci. Il est plus facile à comprendre que le regroupement hiérarchique qui a été effectué lors du coup précédent. image.png

Recommended Posts

100 traitement du langage knock-99 (à l'aide de pandas): visualisation par t-SNE
100 traitement du langage knock-31 (en utilisant des pandas): verbe
100 traitement du langage knock-38 (en utilisant des pandas): histogramme
100 Language Processing Knock-33 (en utilisant des pandas): nom sahen
100 traitement du langage knock-35 (utilisant des pandas): concaténation de nomenclature
100 Language Processing Knock-39 (en utilisant des pandas): la loi de Zipf
100 traitement de langage knock-34 (utilisant des pandas): "B of A"
100 langage de traitement knock-20 (à l'aide de pandas): lecture de données JSON
100 Language Processing Knock-32 (utilisant des pandas): Prototype de verbe
Traitement de 100 langues knock-98 (en utilisant des pandas): Clustering par méthode Ward
100 traitement du langage knock-95 (en utilisant des pandas): Note avec WordSimilarity-353
100 traitement du langage knock-36 (en utilisant des pandas): fréquence d'occurrence des mots
100 Language Processing Knock: Chapitre 2 Principes de base des commandes UNIX (à l'aide de pandas)
100 Language Processing Knock-83 (en utilisant des pandas): Mesure de la fréquence des mots / contextes
100 Language Processing Knock-30 (en utilisant des pandas): lecture des résultats de l'analyse morphologique
100 traitement du langage knock-76 (en utilisant scicit-learn): étiquetage
100 traitement du langage knock-73 (en utilisant scikit-learn): apprentissage
100 Language Processing Knock Chapitre 1 par Python
100 traitement du langage knock-74 (en utilisant scicit-learn): prédiction
100 Language Processing Knock-84 (en utilisant des pandas): Création d'une matrice de contexte de mots
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
100 traitement du langage knock-97 (en utilisant scicit-learn): clustering k-means
Traitement du langage 100 knocks-44: Visualisation des arbres dépendants
100 Language Processing Knock-89: Analogie avec la constitution additive
100 Language Processing Knock-71 (en utilisant Stanford NLP): Stopword
100 traitement du langage knock-90 (en utilisant Gensim): apprendre avec word2vec
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 Language Processing Knock 2020 Chapitre 1
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
100 traitement du langage knock-93 (en utilisant des pandas): calcul du taux de précision de la tâche d'analogie
100 Traitement du langage Knock-52: Stemming
100 langage de traitement knock-79 (en utilisant scikit-learn): dessin de graphe avec rappel de précision
100 Traitement du langage Knock Chapitre 1
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 traitement du langage knock-75 (en utilisant scicit-learn): poids de l'identité
100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
Traitement 100 langues knock-53: Tokenisation
100 coups de traitement du langage amateur: 97
100 traitements linguistiques Knock 2020 [00 ~ 59 réponse]
100 coups de traitement du langage amateur: 67
100 traitement du langage knock-72 (en utilisant Stanford NLP): Extraction d'identité
100 langage traitement knock-92 (utilisant Gensim): application aux données d'analogie
100 traitement de langage knock-94 (en utilisant Gensim): calcul de similarité avec WordSimilarity-353
100 traitements linguistiques knock-37 (utilisant des pandas): Top 10 des mots les plus fréquents
100 coups de traitement du langage avec Python 2015
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-58: Extraction de Taple
100 traitement linguistique knock-50: coupure de phrase
100 Language Processing Knock Chapitre 1 (Python)
Traitement du langage 100 Knock-87: similitude des mots
Mémo de visualisation par pandas, seaborn
J'ai essayé 100 traitements linguistiques Knock 2020
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
100 coups de traitement du langage amateur: Résumé
100 traitements linguistiques knock-77 (en utilisant scicit-learn): mesure du taux de réponse
100 langage de traitement knock-70 (en utilisant Stanford NLP): Obtention et formatage des données