我尝试使用Normalized Cuts执行频谱嵌入/聚类。我编写了以下代码,但我遇到了一个逻辑瓶颈。聚类特征向量后我该怎么办?我不知道如何在原始数据集上形成聚类。 (A是我的亲和力矩阵)
D = np.diag(np.sum(A, 0))
D_half_inv = np.diag(1.0 / np.sqrt(np.sum(A, 0)))
M = np.dot(D_half_inv, np.dot((D - A), D_half_inv))
# compute eigenvectors and eigenvalues
(w, v) = np.linalg.eigh(M)
# renorm eigenvectors to have norm 1
var = len(w)
v1 = np.array(np.zeros((var, var)))
for j in range(var):
v[:][j] = v[:][j]/np.sqrt(np.sum(A,0))
v[:][j] = v[:][j]/np.linalg.norm(v1[:][j])
v_trailing = v[:,1:45] #omit the corresponding eigenvector of the smallest eigenvalue which is 0 and 45 is my embedding dimension
k = 20 #number of clusters
centroids,idx = kmeans2(v_trailing, k)
之后,我获得每个特征向量的标签。但是如何在原始数据集上链接这些标签?
答案 0 :(得分:0)
原始数据集的输出映射对应于修改集中标签的索引。
因此,如果y i 在C m 中,那么A的 ith 条目将在A m 中
或换句话说
设C 1 ..... C M 是通过聚类你想要的簇的特征向量生成的簇的集合:A 1 ..... A M 其中A i = {j | y j 元素C i }