问题是应该首先考虑的问题: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
答案 0 :(得分:3)
最好先执行降维,然后进行聚类。
背后的原因是high dimensional space behave in a strange way中的距离。另一个有趣的现象是最近点和最远点之间的比率接近1。
我建议您阅读此question,虽然它询问欧几里德距离,但您可以找到许多有趣的信息。
答案 1 :(得分:2)
首先减少维度然后是群集是很常见的。仅仅因为聚类高维数据 hard ,并且维数降低使得它更容易处理"。
只要你不忘记群集本质上是不可靠的(所以不要相信结果,但学习它们)你应该没事。