[PYTHON] 100 Sprachverarbeitung Knock-99 (mit Pandas): Visualisierung durch t-SNE

Dies ist die Aufzeichnung der 99. "Visualisierung durch t-SNE" von Language Processing 100 Knock 2015. Verwenden Sie t-SNE (t-Distributed Stochastic Neighbor Embedding), um auf zwei Dimensionen zu reduzieren und den Wortvektor wie in der folgenden Abbildung dargestellt zu visualisieren. Menschen können es in 2 oder 3 Dimensionen sehen. image.png

Referenzlink

Verknüpfung Bemerkungen
099.t-Visualisierung durch SNE.ipynb Antwortprogramm GitHub Link
100 Klicks Amateur-Sprachverarbeitung:99 Ich bin Ihnen immer zu Dank verpflichtet, wenn ich auf 100 Sprachverarbeitung klopfe
Das Grundwissen über Matplotlib, das ich früh wissen wollte, oder die Geschichte des Künstlers, der das Erscheinungsbild anpassen kann Ich habe ein wenig über die Grundlagen von Matplotlib gelernt
color example code: colormaps_reference.py Matplotlib Farbkarte

Umgebung

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
scikit-learn 0.21.3

Aufgabe

Kapitel 10: Vektorraummethode (II)

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

99. Visualisierung durch t-SNE

Visualisieren Sie den Vektorraum mit t-SNE für> 96 Wortvektoren.

Aufgabenergänzung (t-SNE)

t-SNE (t-Distributed Stochastic Neighbor Embedding) reduziert die Dimension auf 2 oder 3. In Bezug auf die Dimensionsreduzierung entspricht dies der PCA (Hauptkomponentenanalyse). Es kann jedoch auch Daten mit einer nichtlinearen Struktur verarbeiten, die PCA nicht kann. Ich habe es ausgiebig geschrieben, aber ich verstehe die mathematischen Formeln nicht und es handelt sich um einen Verkauf des Artikels "Komprimierung und Visualisierung cooler Dimensionen durch t-SNE".

Antworten

Antwortprogramm [099.t-Visualisierung von 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()

Kommentar beantworten

Fast 80% der Gesamtzahl sind eine Kopie von Artikel "Amateur Language Processing 100 Knock: 99".

Hier ist der Hauptcode für diese Zeit. TSNE von scikt-learn hat einige Parameter, aber ich habe sie mit den Standardeinstellungen ausgeführt. Einige Blogs erwähnten, dass TSNE von scikt-learn nicht sehr gut ist, aber vorerst Ich werde gehen.

t_sne = TSNE().fit_transform(country_vec)

K-Mean wird auch für nicht hierarchische Clustering als Farbe verwendet, die im Streudiagramm angezeigt werden soll.

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

Verwenden Sie abschließend matplotlib, um das Streudiagramm anzuzeigen. Die Anzeigefarbe wird mit plt.get_cmap definiert, und es gibt Informationen darüber, welche Farbe sie in Farbbeispielcode: colormaps_reference.py hat. .. Der Punkt wird mit "Scatter" angezeigt, und die Bezeichnung (Ländername) wird mit "Annotate" angezeigt.

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()

Wenn man sich die Gegend um Japan ansieht, sieht es so aus. Es ist leichter zu verstehen als das hierarchische Clustering, das im vorherigen Klopfen durchgeführt wurde. image.png

Recommended Posts

100 Sprachverarbeitung Knock-99 (mit Pandas): Visualisierung durch t-SNE
Sprachverarbeitung 100 Knocks-31 (mit Pandas): Verben
100 Sprachverarbeitung Knock-38 (mit Pandas): Histogramm
100 Sprachverarbeitung Knock-33 (mit Pandas): Sahen Nomen
100 Sprachverarbeitung Knock-35 (mit Pandas): Nomenklatur
100 Sprachverarbeitung Knock-39 (mit Pandas): Zipf-Gesetz
100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"
100 Sprachverarbeitung Knock-20 (unter Verwendung von Pandas): Lesen von JSON-Daten
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
100-Sprach-Verarbeitung Knock-98 (unter Verwendung von Pandas): Clustering nach Ward-Methode
100 Sprachverarbeitung Knock-95 (mit Pandas): Bewertung mit WordSimilarity-353
100 Sprachverarbeitung Knock-36 (unter Verwendung von Pandas): Häufigkeit des Auftretens von Wörtern
100 Sprachverarbeitung Knock: Kapitel 2 UNIX-Befehlsgrundlagen (mit Pandas)
100 Sprachverarbeitung Knock-83 (mit Pandas): Messung der Wort- / Kontexthäufigkeit
100 Sprachverarbeitung Knock-30 (unter Verwendung von Pandas): Lesen der Ergebnisse der morphologischen Analyse
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
100 Sprachverarbeitung Knock-73 (mit Scikit-Learn): Lernen
100 Sprachverarbeitung Knock Kapitel 1 von Python
100 Sprachverarbeitung Knock-74 (mit Scicit-Learn): Vorhersage
100 Sprachverarbeitung Knock-84 (mit Pandas): Erstellen einer Wortkontextmatrix
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock-97 (mit Scicit-Learn): k-bedeutet Clustering
Sprachverarbeitung 100 Knocks-44: Visualisierung abhängiger Bäume
100 Sprachverarbeitung Knock-89: Analogie mit additiver Konstitutivität
100 Sprachverarbeitung Knock-71 (mit Stanford NLP): Stoppwort
100 Sprachverarbeitung Knock-90 (mit Gensim): Lernen mit word2vec
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-93 (unter Verwendung von Pandas): Berechnung der Genauigkeitsrate der Analogie-Aufgabe
100 Sprachverarbeitung Knock-52: Stemming
100-Sprach-Verarbeitung Knock-79 (mit Scikit-Learn): Präzisions-Recall-Grafikzeichnung
100 Sprachverarbeitung Knock Kapitel 1
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Sprachverarbeitung Knock-75 (mit Scicit-Learn): Gewicht der Identität
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock-72 (unter Verwendung von Stanford NLP): Identitätsextraktion
100 Sprachverarbeitung Knock-92 (mit Gensim): Anwendung auf Analogiedaten
100 Sprachverarbeitung Knock-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353
100 Sprachverarbeitung Knock-37 (mit Pandas): Top 10 der häufigsten Wörter
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock Kapitel 1 (Python)
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Visualisierungsnotiz von Pandas, Seaborn
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
100 Sprachverarbeitung Knock-77 (mit Scicit-Learn): Messung der korrekten Antwortrate
Knock-70 mit 100 Sprachverarbeitung (unter Verwendung von Stanford NLP): Abrufen und Formatieren von Daten