2014-11-06 37 views
0

我正在嘗試使用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

映射到原始數據集的輸出對應於修改集中標籤的索引。

所以如果y 在C則A的第i個項將在

,或者換一種說法

令C ..... C M是通過對特徵向量進行聚類而生成的簇的集合,您想要的簇是:A ..... A M其中A i = {j | y j C的元素 i}

+0

這適用於我的親和矩陣或親和矩陣來自我的原始數據? – gelazari 2014-11-08 16:32:19

+0

這與親和矩陣相關。這是真正有用的指導這些技術:http://www.cs.columbia.edu/~jebara/4772/papers/Luxburg07_tutorial.pdf – bearrito 2014-11-08 16:34:34

+0

其實我已閱讀,但我仍然不明白的一些事情。那麼,在獲得聚類後,我必須根據標籤重新排列我的親和度矩陣? – gelazari 2014-11-08 16:39:36