绘制MiniBatchKMeans,如何为不同的簇获得不同的颜色

时间:2017-08-17 07:27:00

标签: python matplotlib cluster-analysis k-means scatter-plot

我收集了很多单词并将它们放入文件中。接下来,我将它们通过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循环。我理解它的作用,但我感觉我不能真正理解它。

任何帮助将不胜感激!

0 个答案:

没有答案