1

我有一个约 500 个嵌入向量的列表(每个嵌入向量的长度为 400,太长无法发布,但这是其中一个开始的示例:

[-1.5425615, -0.52326035, 0.48309317, -1.3839878, -1.3774203, -0.44861528, 3.026304, -0.23582345, 4.3516054, -2.1284392, -3.0056703, 1.4997623, 0.51767087, -2.3668504, 0.9771546, -2.5286832, -1.1869463, -1.2889853, -4.272979...]

(所以在一个名为“list_of_vectors”的列表中有大约 500 个这些向量列表)

还有一个 list_of_labels,其中每个向量列表都分配给一个标签。

我想将它们绘制在 t-SNE 图上,所以我写道:

tsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(list_of_vectors)

输出是:

所以下图中有约 500 个点,每个点都有一个标签(来自 list_of_labels)

您可以看到这些点非常粗略地聚集在一起,我只想为每个粗略的簇添加几个标签,这样我就知道哪个簇是哪个簇,或者我可以对簇进行不同的着色,并有一个带有示例词的图例传说中的那个簇?

有没有办法让我注释/标记每个集群中的几个点?

或者任何可以在下图中添加 5/10 标签的方法,这样我可以更好地理解情节?

它不必非常精确,我只是想更好地广泛理解情节?

4

1 回答 1

2

如果我理解正确,您想根据它们所属的组在图表中注释一些点。并且您想使用组标签对它们进行注释。如果是这种情况,只需遍历组并注释一些随机选择的点。你可以像我在第一个脚本中那样做,或者你可以用例如seabornwith绘制散点图,hue然后在带有注释的点上添加循环(第二种解决方案)。但是,如果您还为您的组分配了不同的颜色,则阅读起来会容易得多:

# how many samples to annotate
m = 4

#create a new figure
plt.figure(figsize=(10,10))

#loop through labels and plot each cluster separately
for label in data.label.unique():

    # plot the given group
    plt.scatter(x=data.loc[data['label']==label, 'x'], y=data.loc[data['label']==label,'y'], alpha=0.5)
    
    # randomly sample
    tmp = data.loc[data['label']==label].sample(m)
    
    #add label to some random points per group
    for _,row in tmp.iterrows():
        plt.annotate(label, (row['x'], row['y']), size=10, weight='bold', color='k') 
    

与海生

sns.scatterplot(x="x", y="y", hue="label", data=data)

#loop through labels and plot each cluster
for label in data.label.unique():
    
    # randomly sample
    tmp = data.loc[data['label']==label].sample(m)
    
    #add label to some random points per group
    for _,row in tmp.iterrows():
        plt.annotate(label, (row['x'], row['y']), size=10, weight='bold', color='k')

在此处输入图像描述

于 2021-05-04T08:21:51.690 回答