假設(shè)您想根據(jù)內(nèi)容和主題對數(shù)百(或數(shù)千)個文檔進行分類,或者您希望出于某種原因?qū)⒉煌膱D像組合在一起?;蛘吒匾氖牵僭O(shè)你有相同的數(shù)據(jù)已經(jīng)被分類但是你想要挑戰(zhàn)這個標簽,您想知道數(shù)據(jù)分類是否有意義,或者是否可以改進。
好吧,我的建議是你對數(shù)據(jù)進行聚類。信息經(jīng)常會因為冗余等各種原因變得模糊不清,而將數(shù)據(jù)分組到具有相似特征的群集(群集)中是一種有效的方式。
聚類是一種廣泛用于查找具有相似特征的觀察組(稱為聚類)的技術(shù)。此過程不是由特定目的驅(qū)動的,這意味著您不必專門告訴您的算法如何對這些觀察進行分組,因為它是獨立進行(組有機地形成)分組的。結(jié)果是,同一組中的觀察(或數(shù)據(jù)點)在它們之間比另一組中的其他觀察更相似。目標是獲得盡可能相似的同一組中的數(shù)據(jù)點,并使不同組中的數(shù)據(jù)點盡可能不相似。
K-means非常適合探索性分析,非常適合了解您的數(shù)據(jù)并提供幾乎所有數(shù)據(jù)類型的見解。無論是圖像、圖形還是文本,K-means都非常靈活,幾乎可以滿足所有需求。
無監(jiān)督學習中的搖滾明星之一
聚類(包括K均值聚類)是一種用于數(shù)據(jù)分類的無監(jiān)督學習技術(shù)。
無監(jiān)督學習意味著沒有輸出變量來指導學習過程(沒有這個或那個,沒有對錯),數(shù)據(jù)由算法來探索以發(fā)現(xiàn)模式。我們只觀察這些特征,但沒有對結(jié)果進行確定的測量值,因為我們想要找出它們。
與監(jiān)督學習不同的是,非監(jiān)督學習技術(shù)不使用帶標簽的數(shù)據(jù),算法需要自己去發(fā)現(xiàn)數(shù)據(jù)中的結(jié)構(gòu)。
在聚類技術(shù)領(lǐng)域中,K-means可能是最常見和經(jīng)常使用的技術(shù)之一。K-means使用迭代細化方法,基于用戶定義的集群數(shù)量(由變量K表示)和數(shù)據(jù)集來產(chǎn)生其最終聚類。例如,如果將K設(shè)置為3,則數(shù)據(jù)集將分組為3個群集,如果將K設(shè)置為4,則將數(shù)據(jù)分組為4個群集,依此類推。
K-means從任意選擇的數(shù)據(jù)點開始,作為數(shù)據(jù)組的提議方法,并迭代地重新計算新的均值,以便收斂到數(shù)據(jù)點的最終聚類。
但是,如果您只提供一個值(K),算法如何決定如何對數(shù)據(jù)進行分組?當您定義K的值時,您實際上是在告訴算法您需要多少均值或質(zhì)心(如果設(shè)置K = 3,則創(chuàng)建了3個均值或質(zhì)心,其中包含3個聚類)。質(zhì)心是表示聚類中心的數(shù)據(jù)點(均值),它可能不一定是數(shù)據(jù)集的成員。
這就是算法的工作原理:
K個質(zhì)心是隨機創(chuàng)建的(基于預定義的K值)
K-means將數(shù)據(jù)集中的每個數(shù)據(jù)點分配到最近的質(zhì)心(最小化它們之間的歐幾里德距離),這意味著如果數(shù)據(jù)點比任何其他質(zhì)心更接近該群集的質(zhì)心,則認為該數(shù)據(jù)點位于特定集群中。
然后K-means通過獲取分配給該質(zhì)心集群的所有數(shù)據(jù)點的平均值來重新計算質(zhì)心,從而減少與前一步驟相關(guān)的集群內(nèi)總方差。K均值中的“均值”是指對數(shù)據(jù)求均值并找到新的質(zhì)心。
該算法在步驟2和3之間迭代,直到滿足一些標準(例如最小化數(shù)據(jù)點與其對應(yīng)質(zhì)心的距離之和,達到最大迭代次數(shù),質(zhì)心值不變或數(shù)據(jù)點沒有變化集群)
在該示例中,經(jīng)過5次迭代之后,計算的質(zhì)心保持相同,并且數(shù)據(jù)點不再交換集群(算法收斂)。這里,每個質(zhì)心都顯示為一個深色的數(shù)據(jù)點。
運行此算法的初始結(jié)果可能不是最佳結(jié)果,并且使用不同的隨機起始質(zhì)心重新運行它可能提供更好的性能(不同的初始對象可能產(chǎn)生不同的聚類結(jié)果)。出于這個原因,通常的做法是使用不同的起點多次運行算法,并評估不同的初始化方法(例如Forgy或Kaufman方法)。
但另一個問題出現(xiàn)了:你如何知道K的正確值,或者要創(chuàng)建多少個質(zhì)心?對此這個問題沒有普遍的答案,雖然質(zhì)心或集群的最佳數(shù)量還不是先驗的,但是存在不同的方法來估計它。一種常用的方法是測試不同數(shù)量的集群并測量得到的誤差平方之和,選擇K值,在該值處增加將導致誤差和減小的非常小,而減小時將急劇增加誤差和。定義最佳集群數(shù)的這一點被稱為“肘點”,可以用作一個視覺度量來找到K值的最佳選擇。
在此示例中,肘點位于3個集群中
K-means是您的數(shù)據(jù)科學工具包中必不可少的,有幾個原因。首先,它易于實現(xiàn)并帶來高效的性能。畢竟,您只需要定義一個參數(shù)(K的值)來查看結(jié)果。它的速度很快并且可以很好地處理大型數(shù)據(jù)集,使其能夠處理當前的海量數(shù)據(jù)。它非常靈活,可以與幾乎任何數(shù)據(jù)類型一起使用,其結(jié)果易于解釋,并且比其他算法更易于解釋。此外,該算法非常受歡迎,您幾乎可以在任何學科中找到用例和實現(xiàn)。
但凡事都有不利的一面
K-means也存在一些缺點。第一個是你需要定義集群的數(shù)量,這個決定會嚴重影響結(jié)果。此外,由于初始質(zhì)心的位置是隨機的,因此結(jié)果可能不具有可比性并且顯示缺乏一致性。K-means生成具有統(tǒng)一大小的聚類(每個聚類具有大致相同的觀察量),即使數(shù)據(jù)可能以不同的方式運行,并且它對異常值和噪聲數(shù)據(jù)非常敏感。此外,它假設(shè)每個聚類中的數(shù)據(jù)點被建模為位于該聚類質(zhì)心周圍的球體內(nèi)(球形限制),但是當違反此條件(或任何先前的條件)時,算法可以以非直觀的方式運行。
例1
示例1:在左側(cè),數(shù)據(jù)的直觀聚類,兩組數(shù)據(jù)點之間有明顯分離(由一個較大的數(shù)據(jù)點包圍的一個小環(huán)的形狀)。在右側(cè),通過K均值算法(K值為2)聚類的相同數(shù)據(jù)點,其中每個質(zhì)心用菱形表示。如您所見,該算法無法識別直觀的聚類。
例2
示例2:左側(cè)是兩個可識別數(shù)據(jù)組的聚類。在右側(cè),K-means聚類在相同數(shù)據(jù)點上的結(jié)果不適合直觀的聚類。與示例1的情況一樣,由于算法的球形限制,K-means創(chuàng)建的分區(qū)不能反映我們在視覺上識別的內(nèi)容。它試圖找到圍繞它們的整個數(shù)據(jù)球體的質(zhì)心,并且當聚類的幾何形狀偏離球體時表現(xiàn)很差。
例3
示例3:再次,在左側(cè)有兩個清晰的集群(一個小而緊密的數(shù)據(jù)組和另一個較大且分散的集群),K-means無法識別(右側(cè))。這里,為了平衡兩個數(shù)據(jù)組之間的集群內(nèi)距離并生成具有統(tǒng)一大小的集群,該算法混合兩個數(shù)據(jù)組并創(chuàng)建2個不代表數(shù)據(jù)集的人工集群。
有趣的是,無論這些數(shù)據(jù)點之間的關(guān)系多么明顯,K-means都不允許彼此遠離的數(shù)據(jù)點共享同一個集群。
現(xiàn)在做什么?
事情是現(xiàn)實生活中的數(shù)據(jù)幾乎總是復雜、雜亂無章和嘈雜的?,F(xiàn)實世界中的情況很少能反映出明確的條件,即可立即應(yīng)用這些類型的算法。在K-means算法的情況下,預計至少有一個假設(shè)會被違反,因此我們不僅要識別它,還需要知道在這種情況下該做什么。
好消息是還有其他選擇,可以糾正缺陷。例如,將數(shù)據(jù)轉(zhuǎn)換為極坐標可以解決我們在示例1中描述的球形限制。如果發(fā)現(xiàn)嚴重的限制,還可以考慮使用其他類型的聚類算法??赡艿姆椒ㄊ鞘褂没诿芏然蚧趯哟蔚乃惴?,這些算法修復了一些K均值限制(但也有其自身的局限性)。
總之,K-means是一種具有大量潛在用途的精彩算法,因此它具有多種功能,幾乎可用于任何類型的數(shù)據(jù)分組。但是從來沒有免費的午餐:如果你不想被引導到錯誤的結(jié)果,你需要了解它的假設(shè)和它的運作方式。
審核編輯 :李倩
-
聚類算法
+關(guān)注
關(guān)注
2文章
118瀏覽量
12142 -
K-means
+關(guān)注
關(guān)注
0文章
28瀏覽量
11319
原文標題:一個完整的K-means聚類算法指南!
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論