如何为kmeans中的每个群集制作词云

时间:2019-06-17 14:48:42

标签: python machine-learning data-science k-means word-cloud

“我试图使用词云在每个群集中打印数据点,而我的数据点是矢量化数据(BOW),如何使用词云在每个群集中打印单词..”

我已经对k均值进行了最佳k运算,之后我不知道如何在每个簇中打印单词

kmeanModel_bow = KMeans(n_clusters = 2)

有人可以帮助我如何使用词云为每个群集打印词

4 个答案:

答案 0 :(得分:1)

为集群中的每个数据点绘制每个单词是不可行的。 BOW将为每个句子创建数千个功能。即使您只说1000个数据点(1个数据点是一个句子),也将导致为单个群集绘制大约数十万个单词。我建议为每个群集绘制群集中心。

要获取集群中心的功能:

使用KMeans函数的cluster_centers_属性,该属性返回NumPy数组。 每行将具有对应于每个聚类中心的要素。 使用以下代码获取功能词:

Words = np.array_str((np.take(vectorizer.get_feature_names(), featurearray)))

然后您可以使用wordcloud绘制获得的单词。

答案 1 :(得分:0)

打印y_kmeans和X会告诉您哪一行属于哪个集群。

kmeanModel_bow = KMeans(n_clusters=2)
y_kmeans = kmeanModel_bow.fit_predict(X)

答案 2 :(得分:0)

from wordcloud import WordCloud, STOPWORDS 
import matplotlib.pyplot as plt 
import pandas as pd 

for tag  in  y_kmeans.labels_ :
if tag==1:
  tags1=element+" "+element[tag]
if tag==2:
  tags2=element+" "+element[tag]
if tag==3:
  tags3=element+" "+element[tag]

  wordcloud = WordCloud(width = 1000, height = 1000, 
            background_color ='white', 
            min_font_size = 14).generate(tag1) 

        plt.figure(figsize = (10, 10), facecolor = None) 
        plt.imshow(wordcloud) 

答案 3 :(得分:0)

找到了解决该问题的更好方法。质心方法可能不起作用,因为很有可能不存在质心BOW。由于特征值将通过取其他数据点的平均值来计算。您可以使用下面的逻辑来获取其他聚类中的单词。

for i in tqdm(range(0,len(K_Means.labels_))):


   lisst = BOWVectorDataPoint[i].nonzero()

   if   K_Means.labels_[i] == 0:
    cluster0words = cluster0words + np.array_str((np.take(Vectorizer.get_feature_names(), lisst[1])))

   elif K_Means.labels_[i] == 1:
    cluster1words = cluster1words + np.array_str((np.take(Vectorizer.get_feature_names(), lisst[1])))