K-Means聚類算法

1、聚類思想

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

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

2、k-means聚類分析算法

相關概念:優化

K值:要獲得的簇的個數spa

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

距離量度:經常使用歐幾里得距離和餘弦類似度(先標準化)rem

算法流程:數學

一、首先肯定一個k值,即咱們但願將數據集通過聚類獲得k個集合。it

二、從數據集中隨機選擇k個數據點做爲質心。io

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

四、把全部數據歸好集合後,一共有k個集合。而後從新計算每一個集合的質心。

五、若是新計算出來的質心和原來的質心之間的距離小於某一個設置的閾值(表示從新計算的質心的位置變化不大,趨於穩定,或者說收斂),咱們能夠認爲聚類已經達到指望的結果,算法終止。

六、若是新質心和原質心距離變化很大,須要迭代3~5步驟。

3、數學原理

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

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

4、實例

座標系中有六個點:

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

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

三、第一次分組後結果:

        組A:P1

        組B:P二、P三、P四、P五、P6

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

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

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

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

六、第二次分組結果:

        組A:P一、P二、P3

        組B:P四、P五、P6

七、再次計算質心:

        P哥1=(1.33,1) 

        P哥2=(9,8.33)

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

九、第三次分組結果:

        組A:P一、P二、P3

        組B:P四、P五、P6

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

5、K-Means的優缺點

優勢:

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

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

三、主要須要調參的參數僅僅是簇數k。

缺點:

一、K值須要預先給定,不少狀況下K值的估計是很是困難的。

二、K-Means算法對初始選取的質心點是敏感的,不一樣的隨機種子點獲得的聚類結果徹底不一樣 ,對結果影響很大。

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

四、採用迭代方法,可能只能獲得局部的最優解,而沒法獲得全局的最優解

6、細節問題

一、K值怎麼定?

        答:分幾類主要取決於我的的經驗與感受,一般的作法是多嘗試幾個K值,看分紅幾類的結果更好解釋,更符合分析目的等。或者能夠把各類K值算出的E作比較,取最小的E的K值。

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

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

三、關於離羣值?

        答:離羣值就是遠離總體的,很是異常、很是特殊的數據點,在聚類以前應該將這些「極大」「極小」之類的離羣數據都去掉,不然會對於聚類的結果有影響。可是,離羣值每每自身就頗有分析的價值,能夠把離羣值單獨做爲一類來分析。

四、單位要一致!

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

五、標準化

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

相關文章
相關標籤/搜索