我想用不同颜色的t-SNE显示doc2vec模型的文档和单词。我在python2.7中编写了以下代码。但我得到了错误。到目前为止,我还没有在python中使用t-SNE和绘图。
modelfile='/home/fl/models/Robust/dimention500/my_model.doc2vec'
wordNum=10000
docNum=1000
words_vec = []
words_label = []
docs_vec = []
docs_label = []
all_vec = []
model = gensim.models.Doc2Vec.load(modelfile)
w2v = model.wv.vocab
d2v = model.docvecs
lengthVoc=len(w2v)
ids=[None]*wordNum
for i in range(10000):
ids[i]=random.randint(1,lengthVoc)
for i, word in enumerate(w2v.keys()):
if i in ids:
all_vec.append(model[word])
words_vec.append(model[word])
for j, doc in enumerate(d2v.doctags.keys()):
if j in docids:
all_vec.append(d2v[doc])
docs_vec.append(d2v[doc])
words = TSNE(n_components=2).fit_transform(numpy.array(words_vec))
docs = TSNE(n_components=2).fit_transform(numpy.array(docs_vec))
all_dw = TSNE(n_components=2).fit_transform(numpy.array(all_vec))
g1=words
g2=docs
data = (g1, g2)
colors = ("red", "blue")
groups = ("word", "document")
for data, color, group in zip(data, colors, groups):
x, y = data
plt.scatter(x, y, c=color, edgecolors='none', label=group)
plt.title('Robust04')
plt.legend(loc=2)
plt.show()
我收到了这个错误:
Traceback (most recent call last):
File "test.py", line 91, in <module>
x, y = data
ValueError: too many values to unpack
当我将我的代码的以下部分更改为plt.scatter(all_dw[:, 0], all_dw[:, 1])
时,它会显示该图,但所有单词和文档都具有相同的颜色。
for data, color, group in zip(data, colors, groups):
x, y = data
plt.scatter(x, y, c=color, edgecolors='none', label=group)
答案 0 :(得分:0)
检查myCollection
返回的内容 - 它可能不是您所期望的。
具体来说,它的第一个项目将在其第一个索引zip(data, color, groups)
中 - 而不是g1
元组。而(g1, g2)
只是g1
。所以你的问题在于:
words
如果x, y = words
中的项目超过2项,您将获得words
。 (查看ValueError: too many values to unpack
- 它可能是words.shape
。)
如果(10000, 2)
本身就是许多data
对的列表 - 例如x, y
- 并且您需要单独列出所有x值和所有y值,您实际上可以使用[(x1, y1), (x2, y2), ...]
再次zip()
解压缩,使用data
前缀运算符作为参数列表。例如:
*
(x, y = zip(*data)
的转置也可能等效,例如:data
。)