如何使用python绘制单词嵌入的k均值聚类的输出?

问题描述 投票:0回答:1

我已经使用gensims词嵌入法来找到每个词的向量。然后,我使用K均值来查找单词簇。有接近10,000个标记/单词,我想绘制它们。

我想通过以下方式绘制结果:

  • 注释名称为words的点
  • 群集颜色不同

这是我所做的。

tsne = TSNE(perplexity=40, n_components=2, init='pca', n_iter=500)#, random_state=13)


def tsne_plot(data):
    "Creates and TSNE model and plots it"

    data=data.sample(n = 500).reset_index()
    word=data["word"]
    cluster=data["clusters"]
    data=data.drop(["clusters","word"],axis=1)

    X = tsne.fit_transform(data)

    plt.figure(figsize=(48, 48)) 
    for i in range(len(X)):
        plt.scatter(X[:,0][i],X[:,1][i],c=cluster[i])
        plt.annotate(word[i],
                     xy=(X[:,0][i],X[:,1][i]),
                     xytext=(3, 2),
                     textcoords='offset points',
                     ha='right',
                     va='bottom')
    plt.show()

tsne_plot(data)

尽管在注释words,但无法为不同的组/集群着色?

还有其他使用词主题和为不同簇着色的方法吗?

python-3.x matplotlib gensim
1个回答
1
投票

这通常是这样的;带有注释和彩虹色。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# %matplotlib inline
from sklearn.cluster import KMeans
import seaborn as sns
import matplotlib.pyplot as plt


X = np.array([[5,3],
     [10,15],
     [15,12],
     [24,10],
     [30,45],
     [85,70],
     [71,80],
     [60,78],
     [55,52],
     [80,91],])

kmeans = KMeans(n_clusters=2)
kmeans.fit(X)

print(kmeans.cluster_centers_)

print(kmeans.labels_)

#plt.scatter(X[:,0],X[:,1], c=kmeans.labels_, cmap='rainbow')

data = X
labels = kmeans.labels_


#######################################################################


plt.subplots_adjust(bottom = 0.1)
plt.scatter(data[:, 0], data[:, 1], c=kmeans.labels_, cmap='rainbow') 

for label, x, y in zip(labels, data[:, 0], data[:, 1]):
    plt.annotate(
        label,
        xy=(x, y), xytext=(-20, 20),
        textcoords='offset points', ha='right', va='bottom',
        bbox=dict(boxstyle='round,pad=0.5', fc='red', alpha=0.5),
        arrowprops=dict(arrowstyle = '->', connectionstyle='arc3,rad=0'))

plt.show()


#######################################################################

enter image description here

请参阅下面的链接以获取所有详细信息。

https://stackabuse.com/k-means-clustering-with-scikit-learn/

请参见下面的链接,了解一些如何使用字符(而不是棕褐色的数字)进行注释的示例。

enter image description here

https://nikkimarinsek.com/blog/7-ways-to-label-a-cluster-plot-python

© www.soinside.com 2019 - 2024. All rights reserved.