使用t-SNE降维来执行聚类

时间:2016-06-20 22:37:51

标签: python algorithm cluster-analysis dimensionality-reduction

问题是应该首先考虑的问题: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 个答案:

答案 0 :(得分:3)

最好先执行降维,然后进行聚类。

背后的原因是high dimensional space behave in a strange way中的距离。另一个有趣的现象是最近点和最远点之间的比率接近1。

我建议您阅读此question,虽然它询问欧几里德距离,但您可以找到许多有趣的信息。

答案 1 :(得分:2)

首先减少维度然后是群集是很常见的。仅仅因为聚类高维数据 hard ,并且维数降低使得它更容易处理"。

只要你不忘记群集本质上是不可靠的(所以不要相信结果,但学习它们)你应该没事。