【问题标题】:Visualizing Kmeans cluster after application of TSNE应用 TSNE 后可视化 Kmeans 集群
【发布时间】:2021-02-14 05:00:42
【问题描述】:
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)}

我在 word2vec 向量 (3411x128) 上应用了 KMeans。 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)

但我不知道如何将这两者结合起来以创建一个图形或散点图,将属于一个集群的所有点结合在一起

【问题讨论】:

    标签: python k-means scatter-plot


    【解决方案1】:
    from sklearn.preprocessing import StandardScaler
    from sklearn.decomposition import PCA
    from sklearn.cluster import KMeans
    import plotly.express as px
    
    df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
    
    #remember to scale your data if the ranges are too broad 
    scaler = StandardScaler()
    scaled_features = scaler.fit_transform(df)
    
    kmeans_model = KMeans(n_clusters=3, max_iter=500, random_state=42)
    y_km = kmeans_model.fit_predict(scaled_features)
    
    pca_model = PCA(n_components=2, random_state=42)
    transformed = pca_model.fit_transform(scaled_features)
    centers = pca_model.transform(kmeans_model.cluster_centers_)
    
    fig = px.scatter(x=transformed[:, 0], y=transformed[:, 1], color=y_km)
    fig.add_scatter(
        x=centers[:, 0],
        y=centers[:, 1],
        marker=dict(size=20, color="LightSeaGreen"), name="Centers"
    )
    fig.show()
    

    如果你只做kmeans.fit(df),你可以从kmeans.labels_得到标签

    【讨论】:

      【解决方案2】:
      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,)
      

      import seaborn as sns; sns.set() 这行不是必需的,它只是使样式更好。

      对于绘图,您可以使用 matplotlib.pyplot 。此外,您可以使用 node_embeddings_2d.shape 查看数据的形状,因此您可以确保 plt.scatter 采用正确的参数。 祝你好运! ;)

      【讨论】:

        猜你喜欢
        • 2018-07-11
        • 2020-05-05
        • 2019-09-14
        • 2023-01-17
        • 2021-02-20
        • 2014-04-18
        • 2022-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多