2017-07-15 35 views
0

我有一大組診斷代碼序列,我試圖根據相似性進行聚類。我通過使用最小公共子序列算法計算相似性,然後從1中減去該相似性來找出每個序列之間的距離,從而創建了一個距離矩陣。使用sklearn DBSCAN時,獲得不太相似的羣集是否正常?

我然後通過了距離矩陣成sklearn的DBSCAN爲這樣:

db = DBSCAN(eps=0.34, metric='precomputed') 
db.fit(sim_mat) 

創建簇後,I輸出中包含的每一個到一個文本文件的序列。除了一個以外,每個集羣都對我有意義。例如,該集羣對我來說很有意義,因爲每個序列有兩個共同點,在相同的順序代碼:

['345.3', '345.11']['345.3', '345.11', '038.9', '038.0', '276.51']['345.3', '345.11']['322.9', '345.3', '345.11'] 

這個集羣,但是,(在這裏縮短,因爲它包含了2852個序列)不作感覺對我來說,因爲沒有序列的具有任何公共代碼:

['162.3', '038.9']['578.1', '584.9']['416.8', '486', '486', '038.11']['493.92', '428.0', '584.9', '427.89']['414.01', '998.59'] 

我的問題還是,如果這是在DBSCAN中的錯誤,如果我誤解了如何使用它和/或它應該如何工作。此外,如果這是一個錯誤或算法的預期輸出,是否有另一個我應該考慮使用?

回答

1

設計(字母N在DBSCAN)算法也承認,做對象屬於任何集羣,被稱爲噪音

如果您錯誤地將「噪音」視爲一個羣集,它們當然會顯得完全不相關。

有些樣品往往只是不適合任何集羣,所以這是一個功能,而不是限制。您可以將每個點分配給與最近的羣集點相同的羣集,但這不會增加羣集質量。

+0

噪音與異常值不同嗎?因爲該算法也推出了離羣值,使用-1 ... – Alex

+0

的標籤應該是罕見的。根據您的參數,DBSCAN定義中的所有點都可能是噪音。 –

0

我想通了。根據DBSCAN的描述,https://en.wikipedia.org/wiki/DBSCAN,似乎這種行爲是正常的。本質上,該算法從一個項目開始,在所需距離內找到其鄰居,然後繼續爲該羣集中的每個點找到鄰居。因此,你最終可能會得到一個實際上離彼此很遠的點。

要解決這個問題,我選擇使用相似性傳播,而不是 - https://en.wikipedia.org/wiki/Affinity_propagation

+0

我覺得你寧願把「噪音」誤解爲集羣。檢查一些不好的情況 - 它們是否真的適合AP將它們放入的羣集? 162.3 038.9現在在哪裏? –

+0

明白了,謝謝。噪音是否與異常值不同? – Alex

相關問題