我收集了很多单词并将它们放入文件中。接下来,我将它们通过gensim word2vec模型。然后我演了一个MiniBatchKMeans。 到目前为止一切都很好,结果非常好。
现在我想在散点图中绘制聚类。我看过很酷的图片它应该如何工作。 我的想法是得到一个散点图,你可以看到所有的单词和所有的簇(颜色相同)。
好吧,到目前为止一切顺利。
我在网上发现了一些代码并稍微改了一下。 " Kleuren = []"之后的循环是获得随机颜色,数量与我拥有的聚类数量相同。
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(20, 8))
fig.subplots_adjust(left=0.04, right=0.98, bottom=0.1, top=0.9)
kleuren = []
for color in cycle(colors.cnames.keys()):
kleuren.append(color)
if len(kleuren) == n_clusters:
break
t_mini_batch = time.time() - t0
# MiniBatchKMeans
ax = fig.add_subplot(1, 3, 1)
for this_centroid, k, col in zip(classifier.cluster_centers_, range(n_clusters), kleuren):
mask = classifier.labels_ == k
ax.scatter(x[mask, 0], x[mask, 1], marker='.', c=kleuren, edgecolor=col, alpha=0.5)
ax.scatter(this_centroid[0], this_centroid[1], marker='+', c='k', s=50)
ax.set_xticks(())
ax.set_yticks(())
ax.set_title("MiniBatchKMeans")
ax.set_autoscaley_on(False)
plt.text(-3.5, 1.8, 'train time: %.2fs\ninertia: %f' %(t_mini_batch, classifier.inertia_))
plt.show()
要达到这一点,我必须得到MinibatchKMeans(分类器)和x。
dictFileName = "D:\PYTHON\WordVec/wiki.nl.vec.bin"
KeywordFile="D:\PYTHON\DataFiles/dsh_corsa_keywords_question.txt"
model = gensim.models.KeyedVectors.load_word2vec_format(dictFileName, binary=True)
# read keywords from CLEAN source file
words = []
for line in open(KeywordFile,'r'):
words.append(line.split(';')[0])
NumOfWords = len(words)
x = np.zeros((NumOfWords, model.vector_size)) for i in range(0, NumOfWords):
x[i,]=model[words[i]]
# Generate sample data
np.random.seed(0)
# Generate centers for the blobs so that it forms a 10 X 10 grid.
xx = np.linspace(-22, 22, 10)
yy = np.linspace(-22, 22, 10)
xx, yy = np.meshgrid(xx, yy)
centers = np.hstack((np.ravel(xx)[:, np.newaxis], np.ravel(yy)[:, np.newaxis]))
n_clusters = 100
t0 = time.time()
classifier = MiniBatchKMeans(n_clusters=n_clusters, batch_size=100, verbose=0, random_state=0, init_size = 500, n_init=20, max_iter=1000)
classifier.fit(x)
好吧,如果我运行所有这些,我会得到一个带有很多点和很多颜色的散点图,但根本没有集群。
有一些部分代码,我不完全确定我是否真的了解发生了什么以及它如何影响结果。 首先,我在散点图中使用x来获取所有点。 X是所有向量的列表。 是否有可能,x中的单词以不同的方式排序,这是导致这种随机情节的原因?
接下来,中心。我有一个随机网格开始,KMeans将改变这些中心,直到它完成。所以我认为这不会给任何问题。
最后,我列出了所有颜色,我不确定这是不是应该如何。
好吧,很长的故事,但我真的可以在这里使用一些帮助,一些指导正确的方向或一些提示。 特别是散射中的for循环。我理解它的作用,但我感觉我不能真正理解它。
任何帮助将不胜感激!