“我试图使用词云在每个群集中打印数据点,而我的数据点是矢量化数据(BOW),如何使用词云在每个群集中打印单词..”
我已经对k均值进行了最佳k运算,之后我不知道如何在每个簇中打印单词
kmeanModel_bow = KMeans(n_clusters = 2)
有人可以帮助我如何使用词云为每个群集打印词
答案 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])))