问题是应该首先考虑哪一个: 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
发布于 2016-07-17 16:54:15
先进行降维再进行聚类总是更好。
这背后的原因是在high dimensional space behave in a strange way中的距离。另一个有趣的现象是最近点和最远点之间的比率接近1。
我建议你阅读这篇question,虽然它问的是欧几里德距离,但你可以找到很多有趣的信息。
发布于 2016-06-21 14:26:33
首先降维,然后聚类,这是很常见的。很简单,因为聚类高维数据是困难的,而降维使其更容易处理。
只要您没有忘记集群本质上是不可靠的(所以不要相信结果,而要研究它们),您就应该没问题。
https://stackoverflow.com/questions/37932928
复制相似问题