计算 t-SNE 中的簇大小

Calculating the cluster size in t-SNE

我一直在使用 DBSCAN 处理我的数据的 t-SNE。然后我将获得的值分配给原始数据框,然后用 seaborn 散点图绘制它。这是代码:

from sklearn.manifold import TSNE

tsne_em = TSNE(n_components=3, perplexity=50.0, n_iter=1000, verbose=1).fit_transform(df_tsne)

from bioinfokit.visuz import cluster
cluster.tsneplot(score=tsne_em)

from sklearn.cluster import DBSCAN
get_clusters = DBSCAN(eps=4, min_samples=10).fit_predict(tsne_em)

filter_df['x'] = tsne_em[:,0]
filter_df['y'] = tsne_em[:,1]

g = sns.scatterplot(x='x', y='y', hue = 'Species', style = 'Gender', data=filter_df)
g.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.savefig('Seaborn-MF-Species-TSNE-EPS4.png', dpi=600, bbox_inches='tight')

图片是这样的:

我看到人们计算集群的大小(单元数、百分比等)并进行其他 post 分析,但我还没有找到任何类型的代码。现在有人知道我如何圈出确切的簇,显示其中的细胞数量等...我有几个这样的图表,它真的可以帮助我使它们中的结果看起来更容易理解。

如果是簇大小,你只需要将你的DBSCAN结果制成表格,例如在这个数据集中:

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs
from sklearn.manifold import TSNE
import seaborn as sns

X,y = make_blobs(n_samples = 200,centers=3, n_features= 5, random_state=99)

tsne_em = TSNE(n_components=2, init='pca',learning_rate=1).fit_transform(X)
get_clusters = DBSCAN(eps=2, min_samples=5).fit_predict(X)

df = pd.DataFrame(tsne_em,columns=['tsne1','tsne2'])
df['dbscan'] = get_clusters
df['actual'] = y

我们绘制来自 dbscan 的聚类结果:

sns.scatterplot(x = "tsne1", y = "tsne2",hue = "dbscan",data=df)

可以得到簇大小:

df['dbscan'].value_counts()

 1    63
 2    63
 0    59
-1    15

百分比:

df['dbscan'].value_counts(normalize=True)
 1    0.315
 2    0.315
 0    0.295
-1    0.075

检查其他标签,在本例中我使用了实际标签,您可以使用其他注释:

actual  0   1   2
dbscan          
   -1   4   8   3
    0   0   59  0
    1   0   0   63
    2   63  0   0