1
I have a matrix x= 
[[0,1,1,1,0,0,0,0], 
[1,0,1,1,0,0,0,0], 
[1,1,0,1,0,0,0,0], 
[1,1,1,0,0,0,0,0], 
[0,0,0,0,0,1,1,1], 
[0,0,0,0,1,0,1,1], 
[0,0,0,0,1,1,0,1], 
[0,0,0,0,1,1,1,0],] 

主叫AgglomerativeClustering我期待的數據被劃分爲2簇(0-3)和後(4-7),即標記_ = [0,0,0,0, 1,1,1,1],但insted的所述labels_列表是[0,0,0,1,0,0,0,1]AgglomerativeClustering scikit學習連通

我的代碼如下s=AgglomerativeClustering(affinity='precomputed',n_clusters=2,linkage='complete) s.fit(x)

代碼是否包含有什麼錯誤?爲什麼羣集不如預期

+1

它是樣本矩陣還是連通矩陣?如果您刪除親和力參數,您將獲得理想的結果。 –

回答

0

錯誤在於如何指定連接矩陣。從你的描述中,我假設你的矩陣表示點之間的聯繫,其中[0/1]表示[無鏈接/鏈接]。然而,該算法將其視爲成對距離的矩陣,這就是爲什麼你會得到意想不到的結果。

你可以通過簡單的變換將你的親和度矩陣轉換成一種距離矩陣;例如

>>> x = np.array(x) 
>>> s.fit(np.exp(-x)) 
>>> s.labels_ 
array([1, 1, 1, 1, 0, 0, 0, 0]) 

更好的做法是對用於生成此關聯矩陣的數據使用實際距離度量。

1

在我看來,在玩過幾個例子之後,AgglomerativeClustering將'親和性'矩陣解釋爲距離矩陣,儘管我無法在任何地方找到它。這意味着你的0和1應該被切換。

此外它似乎只考慮矩陣的上三角部分(其他所有部分都是冗餘的)。

我相信定義x爲:

x= 
[[0,0,0,0,1,1,1,1], 
[ 0,0,0,0,1,1,1,1], 
[ 0,0,0,0,1,1,1,1], 
[ 0,0,0,0,1,1,1,1], 
[ 0,0,0,0,0,0,0,0], 
[ 0,0,0,0,0,0,0,0], 
[ 0,0,0,0,0,0,0,0], 
[ 0,0,0,0,0,0,0,0],] 

會給你預期的結果。