1

我一直在使用 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')

这是图像的显示方式:

在此处输入图像描述

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

4

1 回答 1

1

如果是集群大小,您只需将 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
于 2022-01-05T09:58:50.887 回答