如果可能,在tSNE图上标注几个点,每个簇标注几个点

2024-05-13 11:20:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个约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...]

(因此在一个名为“向量列表”的列表中有大约500个向量列表)

还有一个标签列表,其中每个向量列表都指定给一个标签

我想把它们画在t-SNE图上,所以我写道:

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

输出为:

因此,下图中约有500个点,每个点都有一个标签(来自标签列表)

你可以看到这些点非常粗略地聚集在一起,我只想给每个粗略的簇添加几个标签,这样我就知道哪个簇是哪个簇,或者我可以给簇涂上不同的颜色,并在图例中用该簇中的一个示例词创建一个图例

有并没有一种方法可以让我在每个簇中注释/标记几个点

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

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


Tags: of方法示例列表componentstransform标签向量
1条回答
网友
1楼 · 发布于 2024-05-13 11:20:14

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

# 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')

enter image description here

相关问题 更多 >