使用t-SNE降维进行聚类

3
问题在于哪个应该先来:a) 聚类或 b) 降维算法?换句话说,我是否可以应用伪降维方法(如 t-SNE),然后使用聚类算法提取聚类,或者应该在原始高维空间上执行聚类,并用它来仅着色节点? 以下代码是一个好的起点还是我完全错了?
adjMat = g.get_adjacency(attribute='weight') #get the adjacency matrix from a really large graph
adjMat = np.array(adjMat.data)
adjMat = adjMat.T #use the incoming interaction vectors 
#initiate the t-SNE algorithm
tsne = manifold.TSNE() #set dimensionality reduction algorithm
manifoldCoords = tsne.fit_transform(adjMat) 
#initiate clustering algorithm
clusteralgorithm = clusterAlgs.KMeans() #set clustering algorithm
linear_clusters = clusteralgorithm.fit_predict(manifoldCoords) #extract clusters
2个回答

3

进行降维后再进行聚类通常更好。

这是因为在高维空间中,距离的行为方式很奇怪。另一个有趣的现象是最近点和最远点之间的比值趋近于1。

我建议您阅读这个问题,虽然它提到欧几里得距离,但您可以找到很多有趣的信息。


2

通常先降维,再进行聚类是很普遍的。因为对高维数据进行聚类是相当困难的,而降维则使得该过程变得更加可行。

只要不忘记聚类本质上是不可靠的(所以不要信任结果,而是要研究它们),你就应该没问题了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接