題:
如何判斷數據是否足夠“聚類”以使聚類算法產生有意義的結果?
xuexue
2011-06-08 05:04:44 UTC
view on stackexchange narkive permalink

您怎麼知道您的(高維)數據是否表現出足夠的聚類,從而使kmeans或其他聚類算法的結果實際上有意義?在集群內部方差中,應該是否存在實際的聚類結果有意義(而不是虛假的)?

當繪製數據的降維形式時,聚類應該明顯嗎? kmeans(或其他方法)是否無法可視化聚類?

手寫數字可以很好地測試聚類:一個人期望有10個分離良好的聚類,但是[this](http://stackoverflow.com/questions/6645895/calculating-the-percentage-of-variance-measure-for-k -均值)至少在64d的歐幾里得度量中根本沒有顯示k = 10的膝蓋。
另請參閱http://stackoverflow.com/q/15376075/134830
這個問題在一定程度上與如何檢查聚類結果的有效性以及如何選擇“更好”的方法有關。參見例如http://stats.stackexchange.com/q/195456/3277。
六 答案:
chl
2011-06-08 13:43:28 UTC
view on stackexchange narkive permalink

關於k均值,您可以使用Gap統計信息。基本上,我們的想法是根據平均分散度與參考分佈相比計算聚類度量的優良性,以獲取更多的聚類。更多信息可以在原始論文中找到:

Tibshirani, R.,Walther,G.和Hastie,T.(2001)。 通過差異統計估算數據集中的簇數。 J. R. Statist。 Soc。 B,63(2):411-423。

我對一個相關問題提供的答案突出了其他可用於檢查是否有效的一般有效性指標給定的數據集展現出某種結構。

如果您對只有噪聲的情況一無所知,那麼一種好方法是使用重採樣並研究群集的穩定性。換句話說,通過 Jaccard相似度對數據進行重新採樣(通過引導程序或通過向其添加小噪聲)併計算所得分區的“緊密度”。簡而言之,它允許估計在數據中恢復相似簇的頻率。這種方法可以在 fpc R包中以 clusterboot()的形式輕鬆獲得​​,它以原始數據或距離矩陣作為輸入,並允許應用廣泛的聚類方法(分層,k均值,模糊方法)。鏈接的參考文獻中討論了該方法:

Hennig,C.(2007)群集穩定性的聚類評估計算統計和數據分析,52,258-271。

Hennig,C.(2008)溶解點和隔離魯棒性:通用聚類分析方法的魯棒性標準 Journal of Multivariate Analysis ,99,1154-1176。

下面是使用k-means算法的小規模演示。

  sim.xy <-函數(n,平均值,sd)cbind(rnorm(n,平均值[1],sd [1]),rnorm(n,平均值[2],sd [2]))
xy <- rbind(sim.xy(100,c(0,0),c(.2,.2)),sim.xy(100,c(2.5,0),c(.4,.2)) ,sim.xy(100,c(1.25,.5),c(.3,.2)))庫(fpc)km.boot <- clusterboot(xy,B = 20,bootmethod =“ boot”,clustermethod = kmeansCBI,krange = 3,seed = 15555) 

在該人工(結構良好)數據集中,結果非常肯定,因為三個聚類( krange )溶解在整個樣本中,所有聚類的平均Jaccard相似度均大於0.95。

以下是20個自舉樣本的結果。可以看出,統計單位傾向於保持分組在同一群集中,只有介於兩者之間的那些觀察例外。

enter image description here

您可以將此思想擴展到任何領域。有效性指標,當然是:通過自舉選擇新的觀測值系列(帶替換值),針對一系列聚類數(例如2到1)計算統計量(例如,輪廓寬度,cophenetic相關性,休伯特的伽瑪,在平方和內) 10),重複100或500次,然後查看統計量的箱形圖作為聚類數的函數。

這是我使用相同的模擬數據集得到的結果,但是使用了Ward的層次聚類,並考慮了cophenetic相關性(用於評估距離信息在所生成分區中的再現程度)和輪廓寬度(組合度量評估)集群內部的同質性和集群之間的分離。

cophenetic相關性範圍從0.6267到0.7511,中位數為0.7031(500個引導程序樣本)。當我們考慮3個簇(中位數0.8408,範圍0.7371-0.8769)時,輪廓寬度似乎最大。

enter image description here

非常感謝您提供翔實的答案!聽起來好像clusterboot正是我想要的。也感謝您包含鏈接。
一些魔術數字來解釋輪廓值:http://stats.stackexchange.com/a/12923/12359
您用來在gif中建立這些圖表的命令是什麼?
@Travis圖像被保存為單獨的PNG文件,然後使用[ImageMagick](http://www.imagemagick.org/script/index.php)轉換為GIF動畫文件。另請參閱[this post](http://stats.stackexchange.com/a/6023/930)。
Franck Dernoncourt
2015-02-09 08:07:13 UTC
view on stackexchange narkive permalink

一種快速可視化高維數據是否表現出足夠聚類的方法是使用t分佈隨機鄰居嵌入( t-SNE)。它將數據投影到某個低維空間(例如2D,3D),並且在保持群集結構(如果有)的方面做得很好。

E.g。 MNIST數據集

enter image description here

Olivetti面對數據集:

enter image description here

有沒有辦法在R中應用人臉(或任何圖像)?
我不知道@TravisHeeter
不要將tSNE投影數據聚類。參見例如以下答案:https://stats.stackexchange.com/a/264647/7828
Nick Sabbe
2011-06-08 12:01:16 UTC
view on stackexchange narkive permalink

當然,以視覺方式辨別可繪製數量維的聚類的能力對於聚類算法的有用性是一個令人懷疑的標準,尤其是如果這種降維與聚類本身無關(即:

實際上,聚類方法在找到人眼/大腦看不到聚類的聚類中具有最高價值。

簡單答案是:進行聚類,然後找出它是否有效(使用您感興趣的任何標準,另請參閱@Jeff的答案)。

是的,簇不一定是一組好點的圓點,這基本上就是kmeans所假設的。
@chl您是否使用R製作了此動畫圖像?
Has QUIT--Anony-Mousse
2012-09-06 11:26:12 UTC
view on stackexchange narkive permalink

結果何時有意義?特別是k均值的結果?

事實是k均值優化了特定的數學統計量。

尤其是在高維數據中,第一個問題應該是:歐幾里德距離是否仍然有意義?如果不是,請不要使用k均值。歐幾里得距離在物理世界中很有意義,但是當您擁有其他數據時,它很快就會失去意義。特別是,當您人為地將數據轉換為向量空間時,是否應該將其設為歐幾里得呢?

如果您採用經典的“舊的,忠實的”數據集並對其進行k均值沒有歸一化,但是具有純歐幾里得距離,它已經不再有意義。 EM實際上使用某種形式的“局部群集”馬哈拉諾比斯距離,其效果會更好。

Btw,k-means的關鍵 strength 關鍵在於,無論什麼情況,它實際上總是對數據進行分區看起來像。 您可以使用k均值將均勻噪聲劃分為k個簇。可以斷言,k均值聚類沒有意義。或者,可以接受這樣的說法:用戶希望對數據進行分區以最小化平方的歐幾里得距離,而無需使聚類“有意義”。

-1
空無一人。關鍵是,k均值無關緊要,它將均勻的數據劃分為“簇”,即,它會產生無意義的簇。
Jeff
2011-06-08 07:08:11 UTC
view on stackexchange narkive permalink

我最近才開始使用聚類算法,因此希望有更多知識的人可以提供更完整的答案,但是這裡有一些想法:

“有意義”,我敢肯定,您知道,非常主觀。因此,集群是否足夠好完全取決於您為什麼首先需要集群。如果您要預測組成員身份,那麼任何聚類都可能比偶然做的更好(並且不會更糟),因此結果在某種程度上應該是有意義的。

如果您想知道 reliable 這種集群是,您需要一些度量標準來進行比較。如果您擁有一組具有已知成員身份的實體,則可以使用判別分析來查看預測的效果。如果您沒有一組具有已知成員資格的實體,則必須知道字段中集群的典型差異是什麼。具有剛性類別的實體的物理屬性可能比人類的心理測量數據具有更低的組內方差,但這不一定會使聚類變得“更糟”。

您的第二個問題暗示“什麼我應該選擇k的值嗎?同樣,這裡沒有硬性答案。在沒有任何先驗類別集合的情況下,您可能希望最小化群集數,同時還要最小化平均群集方差。一種簡單的方法可能是繪製“聚類數量”與“平均聚類方差”的關係圖,然後尋找“彎頭”-添加更多聚類對聚類方差沒有明顯影響。

我不會說k-means的結果如果無法可視化就毫無意義,但是當群集在視覺上顯而易見時,它肯定會吸引人。再次,這又引出了一個問題:為什麼需要進行集群,並且需要變得多麼可靠?最終,這是一個需要根據數據使用方式回答的問題。

raegtin
2011-06-09 00:09:12 UTC
view on stackexchange narkive permalink

要判斷聚類是否有意義,可以運行一種算法來計算聚類數,並查看其輸出是否大於1。

像chl所說,一種聚類計數算法是間隙統計算法。粗略地講,這將計算給定實際數據的總聚類方差,並將其與根本不包含任何聚類的數據的總聚類方差進行比較(例如,通過在與實際數據相同的範圍內均勻採樣而形成的數據集)。然後選擇簇的數量$ k $作為給出這兩個簇方差之間最大“差距”的$ k $。

另一種算法是預測強度算法(與其餘算法相似) chl的答案)。大致來說,這將執行一堆k均值聚類,併計算停留在同一聚類中的點的比例。然後選擇$ k $作為最小的$ k $,該$ k $所佔比例高於某個閾值(例如,閾值0.8)。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...