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.
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 |
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 |
In Kapitel 10 werden wir weiter daran arbeiten, Wortvektoren aus dem vorherigen Kapitel zu lernen.
Visualisieren Sie den Vektorraum mit t-SNE für> 96 Wortvektoren.
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".
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()
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.
matplotlib
zu lernen [Artikel" Grundkenntnisse über matplotlib, die ich früh wissen wollte, oder die Geschichte eines Künstlers, der das Erscheinungsbild anpassen kann "](https://qiita.com/skotaro/items / 08dc0b8c5704c94eafb9) Ich habe verstanden.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.