Визуализация кластера Kmeans после применения TSNE - PullRequest
0 голосов
/ 12 января 2020
k_model = KMeans(n_clusters = 3).fit(actor_w2vec)
cluster_dict = {i: np.where(k_model.labels_ == i)[0] for i in range(k_model.n_clusters)}

Я применил KMeans к вектору word2ve c (3411x128). cluster_dict содержит метку кластера (то есть 0,1,2) в качестве ключа и индексный номер (1,2,3,4, .... 3411) в качестве значения, так что эти значения распределены по трем кластерам.

Теперь я хочу визуализировать эти кластеры, поэтому я использовал TSNE, чтобы уменьшить вектор измерения 128 до 2 измерений

node_embeddings = actor_w2vec
transform = TSNE #PCA

trans = transform(n_components=2)
node_embeddings_2d = trans.fit_transform(node_embeddings)

, но я не знаю, как объединить эти два для создания графика или точечной диаграммы, где все точки, принадлежащие одному кластеру, объединены вместе

1 Ответ

0 голосов
/ 12 января 2020
import numpy as np
import matplotlib.pyplot as plt
#import seaborn as sns; sns.set()
import pandas as pd
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

plt.rcParams['figure.dpi'] = 150 
# create dataset
X, y = make_blobs(
   n_samples=150, n_features=2,
   centers=3, cluster_std=0.5,
   shuffle=True, random_state=0
)
# plot
plt.scatter(
   X[:, 0], X[:, 1],
   edgecolor='black', s=50
)
plt.show()
km = KMeans(
        n_clusters=3, init='random',
        n_init=10, max_iter=10000, 
        tol=1e-04, random_state=0
    )
y_km = km.fit_predict(X)
plt.scatter(X[:,0], X[:,1], c=y_km, s=50, cmap=plt.cm.Paired, alpha=0.4)
plt.scatter(km.cluster_centers_[:, 0],km.cluster_centers_[:, 1], 
        s=250, marker='*', label='centroids',
        edgecolor='black',
       c=np.arange(0,3),cmap=plt.cm.Paired,)

enter image description here

enter image description here

Линия import seaborn as sns; sns.set() не нужна, она только делает лучше style.

Для построения графика вы можете использовать matplotlib.pyplot. Более того, вы можете посмотреть на форму ваших данных с помощью node_embeddings_2d.shape, чтобы убедиться, что plt.scatter принимает правильные аргументы. Удачи! ;)

...