计算 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
我一直在使用 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