導航:首頁 > 源碼編譯 > 怎麼理解聚類演算法

怎麼理解聚類演算法

發布時間:2025-05-26 21:44:35

Ⅰ K-Means聚類演算法

        所謂聚類演算法是指將一堆沒有標簽的數據自動劃分成幾類的方法,屬於無監督學習方法,這個方法要保證同一類的數據有相似的特徵,如下圖所示:

        根據樣本之間的距離或者說是相似性(親疏性),把越相似、差異越小的樣本聚成一類(簇),最後形成多個簇,使同一個簇內部的樣本相似度高,不同簇之間差異性高。

相關概念:

K值 :要得到的簇的個數

質心 :每個簇的均值向量,即向量各維取平均即可

距離量度 :常用歐幾里得距離和餘弦相似度(先標准化)

演算法流程:

1、首先確定一個k值,即我們希望將數據集經過聚類得到k個集合。

2、從數據集中隨機選擇k個數據點作為質心。

3、對數據集中每一個點,計算其與每一個質心的距離(如歐式距離),離哪個質心近,就劃分到那個質心所屬的集合。

4、把所有數據歸好集合後,一共有k個集合。然後重新計算每個集合的質心。

5、如果新計算出來的質心和原來的質心之間的距離小於某一個設置的閾值(表示重新計算的質心的位置變化不大,趨於穩定,或者說收斂),我們可以認為聚類已經達到期望的結果,演算法終止。

6、如果新質心和原質心距離變化很大,需要迭代3~5步驟。

K-Means採用的啟發式方式很簡單,用下面一組圖就可以形象的描述:

        上圖a表達了初始的數據集,假設k=2。在圖b中,我們隨機選擇了兩個k類所對應的類別質心,即圖中的紅色質心和藍色質心,然後分別求樣本中所有點到這兩個質心的距離,並標記每個樣本的類別為和該樣本距離最小的質心的類別,如圖c所示,經過計算樣本和紅色質心和藍色質心的距離,我們得到了所有樣本點的第一輪迭代後的類別。此時我們對我們當前標記為紅色和藍色的點分別求其新的質心,如圖d所示,新的紅色質心和藍色質心的位置已經發生了變動。圖e和圖f重復了我們在圖c和圖d的過程,即將所有點的類別標記為距離最近的質心的類別並求新的質心。最終我們得到的兩個類別如圖f。

坐標系中有六個點:

1、我們分兩組,令K等於2,我們隨機選擇兩個點:P1和P2

2、通過勾股定理計算剩餘點分別到這兩個點的距離:

3、第一次分組後結果:

        組A:P1

        組B:P2、P3、P4、P5、P6

4、分別計算A組和B組的質心:

        A組質心還是P1=(0,0)

        B組新的質心坐標為:P哥=((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)

5、再次計算每個點到質心的距離:

6、第二次分組結果:

        組A:P1、P2、P3

        組B:P4、P5、P6

7、再次計算質心:

        P哥1=(1.33,1) 

        P哥2=(9,8.33)

8、再次計算每個點到質心的距離:

9、第三次分組結果:

        組A:P1、P2、P3

        組B:P4、P5、P6

可以發現,第三次分組結果和第二次分組結果一致,說明已經收斂,聚類結束。

優點:

1、原理比較簡單,實現也是很容易,收斂速度快。

2、當結果簇是密集的,而簇與簇之間區別明顯時, 它的效果較好。

3、主要需要調參的參數僅僅是簇數k。

缺點:

1、K值需要預先給定,很多情況下K值的估計是非常困難的。

2、K-Means演算法對初始選取的質心點是敏感的,不同的隨機種子點得到的聚類結果完全不同 ,對結果影響很大。

3、對噪音和異常點比較的敏感。用來檢測異常值。

4、採用迭代方法, 可能只能得到局部的最優解,而無法得到全局的最優解 。

1、K值怎麼定?

        答:分幾類主要取決於個人的經驗與感覺,通常的做法是多嘗試幾個K值,看分成幾類的結果更好解釋,更符合分析目的等。或者可以把各種K值算出的 E 做比較,取最小的 E 的K值。

2、初始的K個質心怎麼選?

        答:最常用的方法是隨機選,初始質心的選取對最終聚類結果有影響,因此演算法一定要多執行幾次,哪個結果更reasonable,就用哪個結果。 當然也有一些優化的方法,第一種是選擇彼此距離最遠的點,具體來說就是先選第一個點,然後選離第一個點最遠的當第二個點,然後選第三個點,第三個點到第一、第二兩點的距離之和最小,以此類推。第二種是先根據其他聚類演算法(如層次聚類)得到聚類結果,從結果中每個分類選一個點。

3、關於離群值?

        答:離群值就是遠離整體的,非常異常、非常特殊的數據點,在聚類之前應該將這些「極大」「極小」之類的離群數據都去掉,否則會對於聚類的結果有影響。但是,離群值往往自身就很有分析的價值,可以把離群值單獨作為一類來分析。

4、單位要一致!

        答:比如X的單位是米,Y也是米,那麼距離算出來的單位還是米,是有意義的。但是如果X是米,Y是噸,用距離公式計算就會出現「米的平方」加上「噸的平方」再開平方,最後算出的東西沒有數學意義,這就有問題了。

5、標准化

        答:如果數據中X整體都比較小,比如都是1到10之間的數,Y很大,比如都是1000以上的數,那麼,在計算距離的時候Y起到的作用就比X大很多,X對於距離的影響幾乎可以忽略,這也有問題。因此,如果K-Means聚類中選擇歐幾里德距離計算距離,數據集又出現了上面所述的情況,就一定要進行數據的標准化(normalization),即將數據按比例縮放,使之落入一個小的特定區間。

參考文章: 聚類、K-Means、例子、細節

Ⅱ 八:聚類演算法K-means(20191223-29)

學習內容:無監督聚類演算法K-Means

k-means:模型原理、收斂過程、超參數的選擇

聚類分析是在數據中發現數據對象之間的關系,將數據進行分組,組內的相似性越大,組間的差別越大,則聚類效果越好。

不同的簇類型: 聚類旨在發現有用的對象簇,在現實中我們用到很多的簇的類型,使用不同的簇類型劃分數據的結果是不同的。

基於原型的: 簇是對象的集合,其中每個對象到定義該簇的 原型 的距離比其他簇的原型距離更近,如(b)所示的原型即為中心點,在一個簇中的數據到其中心點比到另一個簇的中心點更近。這是一種常見的 基於中心的簇 ,最常用的K-Means就是這樣的一種簇類型。 這樣的簇趨向於球形。

基於密度的 :簇是對象的密度區域,(d)所示的是基於密度的簇,當簇不規則或相互盤繞,並且有早上和離群點事,常常使用基於密度的簇定義。

關於更多的簇介紹參考《數據挖掘導論》。

基本的聚類分析演算法

     1. K均值: 基於原型的、劃分的距離技術,它試圖發現用戶指定個數(K)的簇。

     2. 凝聚的層次距離: 思想是開始時,每個點都作為一個單點簇,然後,重復的合並兩個最靠近的簇,直到嘗試單個、包含所有點的簇。

     3. DBSCAN: 一種基於密度的劃分距離的演算法,簇的個數有演算法自動的確定,低密度中的點被視為雜訊而忽略,因此其不產生完全聚類。

不同的距離量度會對距離的結果產生影響,常見的距離量度如下所示:

優點:易於實現 

缺點:可能收斂於局部最小值,在大規模數據收斂慢

演算法思想:

選擇K個點作為初始質心 

repeat

    將每個點指派到最近的質心,形成K個簇 

    重新計算每個簇的質心  

until 簇不發生變化或達到最大迭代次數

這里的「重新計算每個簇的質心」,是根據目標函數來計算的,因此在開始時要考慮 距離度量和目標函數。

考慮歐幾里得距離的數據,使用 誤差平方和(Sum of the Squared Error,SSE) 作為聚類的目標函數,兩次運行K均值產生的兩個不同的簇集,使用SSE最小的那個。

k表示k個聚類中心,ci表示第幾個中心,dist表示的是歐幾里得距離。 

這里有一個問題就是為什麼,我們更新質心是讓所有的點的平均值,這里就是SSE所決定的。

k均值演算法非常簡單且使用廣泛,但是其有主要的兩個缺陷:

1. K值需要預先給定 ,屬於預先知識,很多情況下K值的估計是非常困難的,對於像計算全部微信用戶的交往圈這樣的場景就完全的沒辦法用K-Means進行。對於可以確定K值不會太大但不明確精確的K值的場景,可以進行迭代運算,然後找出Cost Function最小時所對應的K值,這個值往往能較好的描述有多少個簇類。

2. K-Means演算法對初始選取的聚類中心點是敏感的 ,不同的隨機種子點得到的聚類結果完全不同

3. K均值演算法並不是很所有的數據類型。 它不能處理非球形簇、不同尺寸和不同密度的簇,銀冠指定足夠大的簇的個數是他通常可以發現純子簇。

4. 對離群點的數據進行聚類時,K均值也有問題 ,這種情況下,離群點檢測和刪除有很大的幫助。

下面對初始質心的選擇進行討論:

當初始質心是隨機的進行初始化的時候,K均值的每次運行將會產生不同的SSE,而且隨機的選擇初始質心結果可能很糟糕,可能只能得到局部的最優解,而無法得到全局的最優解。

多次運行,每次使用一組不同的隨機初始質心,然後選擇一個具有最小的SSE的簇集。該策略非常的簡單,但是效果可能不是很好,這取決於數據集合尋找的簇的個數。

關於更多,參考《數據挖掘導論》

為了克服K-Means演算法收斂於局部最小值的問題,提出了一種 二分K-均值(bisecting K-means)

將所有的點看成是一個簇

當簇小於數目k時

    對於每一個簇

        計算總誤差

        在給定的簇上進行K-均值聚類,k值為2        計算將該簇劃分成兩個簇後總誤差

    選擇是的誤差最小的那個簇進行劃分

在原始的K-means演算法中,每一次的劃分所有的樣本都要參與運算,如果數據量非常大的話,這個時間是非常高的,因此有了一種分批處理的改進演算法。

使用Mini Batch(分批處理)的方法對數據點之間的距離進行計算。

Mini Batch的好處:不必使用所有的數據樣本,而是從不同類別的樣本中抽取一部分樣本來代表各自類型進行計算。n 由於計算樣本量少,所以會相應的減少運行時間n 但另一方面抽樣也必然會帶來准確度的下降。

聚類試圖將數據集中的樣本劃分為若干個通常是不相交的子集,每個子集成為一個「簇」。通過這樣的劃分,每個簇可能對應於一些潛在的概念(也就是類別);需說明的是,這些概念對聚類演算法而言事先是未知的,聚類過程僅能自動形成簇結構,簇對應的概念語義由使用者來把握和命名。

聚類是無監督的學習演算法,分類是有監督的學習演算法。所謂有監督就是有已知標簽的訓練集(也就是說提前知道訓練集里的數據屬於哪個類別),機器學習演算法在訓練集上學習到相應的參數,構建模型,然後應用到測試集上。而聚類演算法是沒有標簽的,聚類的時候,需要實現的目標只是把相似的東西聚到一起。

聚類的目的是把相似的樣本聚到一起,而將不相似的樣本分開,類似於「物以類聚」,很直觀的想法是同一個簇中的相似度要盡可能高,而簇與簇之間的相似度要盡可能的低。

性能度量大概可分為兩類: 一是外部指標, 二是內部指標 。

外部指標:將聚類結果和某個「參考模型」進行比較。

內部指標:不利用任何參考模型,直接考察聚類結果。

對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為K個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大

初學者會很容易就把K-Means和KNN搞混,其實兩者的差別還是很大的。

K-Means是無監督學習的聚類演算法,沒有樣本輸出;而KNN是監督學習的分類演算法,有對應的類別輸出。KNN基本不需要訓練,對測試集裡面的點,只需要找到在訓練集中最近的k個點,用這最近的k個點的類別來決定測試點的類別。而K-Means則有明顯的訓練過程,找到k個類別的最佳質心,從而決定樣本的簇類別。

當然,兩者也有一些相似點,兩個演算法都包含一個過程,即找出和某一個點最近的點。兩者都利用了最近鄰(nearest neighbors)的思想。

優點:

簡單, 易於理解和實現 ;收斂快,一般僅需5-10次迭代即可,高效

缺點:

    1,對K值得選取把握不同對結果有很大的不同

    2,對於初始點的選取敏感,不同的隨機初始點得到的聚類結果可能完全不同

    3,對於不是凸的數據集比較難收斂

    4,對噪點過於敏感,因為演算法是根據基於均值的

    5,結果不一定是全局最優,只能保證局部最優

    6,對球形簇的分組效果較好,對非球型簇、不同尺寸、不同密度的簇分組效果不好。

K-means演算法簡單理解,易於實現(局部最優),卻會有對初始點、雜訊點敏感等問題;還容易和監督學習的分類演算法KNN混淆。

參考閱讀:

1.《 深入理解K-Means聚類演算法 》

2.《 K-Means 》

閱讀全文

與怎麼理解聚類演算法相關的資料

熱點內容
linux查看運行日誌 瀏覽:686
lte技術pdf 瀏覽:52
免密碼支付源碼 瀏覽:295
小躍程序員 瀏覽:768
程序員之路怎麼設置 瀏覽:561
一台雲伺服器能建幾個小程序 瀏覽:398
cad圓心陣列命令 瀏覽:677
加密卡必須要物業授權嗎 瀏覽:632
修改wifi密碼後無法加密 瀏覽:217
綠色的編程軟體是什麼 瀏覽:250
山寨加密比特幣 瀏覽:736
程序員職業規劃書怎麼寫 瀏覽:433
為數據而生pdf 瀏覽:55
幻想三國源碼百度網盤 瀏覽:274
淘寶首頁模塊怎麼進行源碼切換 瀏覽:770
加密許可權的pdf怎麼下載 瀏覽:685
mac命令路徑 瀏覽:592
蘋果郵箱添收件伺服器怎麼填 瀏覽:241
股價回踩60日均線選股源碼 瀏覽:234
礦用可編程式控制制箱 瀏覽:175