1. 程式人生 > >聚類、K-Means、例子、細節

聚類、K-Means、例子、細節

聚類

今天說聚類,但是必須要先理解聚類和分類的區別,很多業務人員在日常分析時候不是很嚴謹,混為一談,其實二者有本質的區別。

分類其實是從特定的資料中挖掘模式,作出判斷的過程。比如Gmail郵箱裡有垃圾郵件分類器,一開始的時候可能什麼都不過濾,在日常使用過程中,我人工對於每一封郵件點選“垃圾”或“不是垃圾”,過一段時間,Gmail就體現出一定的智慧,能夠自動過濾掉一些垃圾郵件了。這是因為在點選的過程中,其實是給每一條郵件打了一個“標籤”,這個標籤只有兩個值,要麼是“垃圾”,要麼“不是垃圾”,Gmail就會不斷研究哪些特點的郵件是垃圾,哪些特點的不是垃圾,形成一些判別的模式,這樣當一封信的郵件到來,就可以自動把郵件分到“垃圾”和“不是垃圾”這兩個我們人工設定的分類的其中一個。

聚類的的目的也是把資料分類,但是事先我是不知道如何去分的,完全是演算法自己來判斷各條資料之間的相似性,相似的就放在一起。在聚類的結論出來之前,我完全不知道每一類有什麼特點,一定要根據聚類的結果通過人的經驗來分析,看看聚成的這一類大概有什麼特點。

K-Means

聚類演算法有很多種(幾十種),K-Means是聚類演算法中的最常用的一種,演算法最大的特點是簡單,好理解,運算速度快,但是只能應用於連續型的資料,並且一定要在聚類前需要手工指定要分成幾類。

下面,我們描述一下K-means演算法的過程,為了儘量不用數學符號,所以描述的不是很嚴謹,大概就是這個意思,“物以類聚、人以群分”:

  1. 首先輸入k的值,即我們希望將資料集經過聚類得到k個分組。
  2. 從資料集中隨機選擇k個數據點作為初始大哥(質心,Centroid)
  3. 對集合中每一個小弟,計算與每一個大哥的距離(距離的含義後面會講),離哪個大哥距離近,就跟定哪個大哥。
  4. 這時每一個大哥手下都聚集了一票小弟,這時候召開人民代表大會,每一群選出新的大哥(其實是通過演算法選出新的質心)。
  5. 如果新大哥和老大哥之間的距離小於某一個設定的閾值(表示重新計算的質心的位置變化不大,趨於穩定,或者說收斂),可以認為我們進行的聚類已經達到期望的結果,演算法終止。
  6. 如果新大哥和老大哥距離變化很大,需要迭代3~5步驟。
簡單的手算例子

我搞了6個點,從圖上看應該分成兩推兒,前三個點一堆兒,後三個點是另一堆兒。現在手工執行K-Means,體會一下過程,同時看看結果是不是和預期一致。

case

1.選擇初始大哥: 我們就選P1和P2

2.計算小弟和大哥的距離: P3到P1的距離從圖上也能看出來(勾股定理),是√10 = 3.16;P3到P2的距離√((3-1)^2+(1-2)^2 = √5 = 2.24,所以P3離P2更近,P3就跟P2混。同理,P4、P5、P6也這麼算,如下:

round1

P3到P6都跟P2更近,所以第一次站隊的結果是:

  • 組A:P1
  • 組B:P2、P3、P4、P5、P6

3.人民代表大會: 組A沒啥可選的,大哥還是P1自己 組B有五個人,需要選新大哥,這裡要注意選大哥的方法是每個人X座標的平均值和Y座標的平均值組成的新的點,為新大哥,也就是說這個大哥是“虛擬的”。 因此,B組選出新大哥的座標為:P哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)。 綜合兩組,新大哥為P1(0,0),P哥(6.2,5.6),而P2-P6重新成為小弟

4.再次計算小弟到大哥的距離:

round2

這時可以看到P2、P3離P1更近,P4、P5、P6離P哥更近,所以第二次站隊的結果是:

  • 組A:P1、P2、P3
  • 組B:P4、P5、P6(虛擬大哥這時候消失)

5.第二屆人民代表大會: 按照上一屆大會的方法選出兩個新的虛擬大哥:P哥1(1.33,1) P哥2(9,8.33),P1-P6都成為小弟

6.第三次計算小弟到大哥的距離:

round3

這時可以看到P1、P2、P3離P哥1更近,P4、P5、P6離P哥2更近,所以第二次站隊的結果是:

  • 組A:P1、P2、P3
  • 組B:P4、P5、P6

我們發現,這次站隊的結果和上次沒有任何變化了,說明已經收斂,聚類結束,聚類結果和我們最開始設想的結果完全一致。

K-Means的細節問題
  1. K值怎麼定?我怎麼知道應該幾類? 答:這個真的沒有確定的做法,分幾類主要取決於個人的經驗與感覺,通常的做法是多嘗試幾個K值,看分成幾類的結果更好解釋,更符合分析目的等。或者可以把各種K值算出的SSE做比較,取最小的SSE的K值。

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

  3. K-Means會不會陷入一直選質心的過程,永遠停不下來? 答:不會,有數學證明K-Means一定會收斂,大致思路是利用SSE的概念(也就是誤差平方和),即每個點到自身所歸屬質心的距離的平方和,這個平方和是一個函式,然後能夠證明這個函式是可以最終收斂的函式。

  4. 判斷每個點歸屬哪個質心的距離怎麼算? 答:這個問題必須不得不提一下數學了…… 第一種,歐幾里德距離(歐幾里德這位爺還是很厲害的,《幾何原本》被稱為古希臘數學的高峰,就是用5個公理推匯出了整個平面幾何的結論),這個距離就是平時我們理解的距離,如果是兩個平面上的點,也就是(X1,Y1),和(X2,Y2),那這倆點距離是多少初中生都會,就是√( (x1-x2)^2+(y1-y2)^2) ,如果是三維空間中呢?√( (x1-x2)^2+(y1-y2)^2+(z1-z2)^2 ;推廣到高維空間公式就以此類推。可以看出,歐幾里德距離真的是數學加減乘除算出來的距離,因此這就是隻能用於連續型變數的原因。 第二種,餘弦相似度,餘弦相似度用向量空間中兩個向量夾角的餘弦值作為衡量兩個個體間差異的大小。相比距離度量,餘弦相似度更加註重兩個向量在方向上的差異,而非距離或長度上。下圖表示餘弦相似度的餘弦是哪個角的餘弦,A,B是三維空間中的兩個向量,這兩個點與三維空間原點連線形成的角,如果角度越小,說明這兩個向量在方向上越接近,在聚類時就歸成一類:

    cos

    看一個例子(也許不太恰當):歌手大賽,三個評委給三個歌手打分,第一個評委的打分(10,8,9) 第二個評委的打分(4,3,2),第三個評委的打分(8,9,10) 如果採用餘弦相似度來看每個評委的差異,雖然每個評委對同一個選手的評分不一樣,但第一、第二兩個評委對這四位歌手實力的排序是一樣的,只是第二個評委對滿分有更高的評判標準,說明第一、第二個評委對音樂的品味上是一致的。 因此,用餘弦相似度來看,第一、第二個評委為一類人,第三個評委為另外一類。 如果採用歐氏距離, 第一和第三個評委的歐氏距離更近,就分成一類人了,但其實不太合理,因為他們對於四位選手的排名都是完全顛倒的。 總之,如果注重數值本身的差異,就應該用歐氏距離,如果注重的是上例中的這種的差異(我概括不出來到底是一種什麼差異……),就要用餘弦相似度來計算。 還有其他的一些計算距離的方法,但是都是歐氏距離和餘弦相似度的衍生,簡單羅列如下:明可夫斯基距離、切比雪夫距離、曼哈頓距離、馬哈拉諾比斯距離、調整後的餘弦相似度、Jaccard相似係數……

  5. 還有一個重要的問題是,大家的單位要一致! 比如X的單位是米,Y也是米,那麼距離算出來的單位還是米,是有意義的 但是如果X是米,Y是噸,用距離公式計算就會出現“米的平方”加上“噸的平方”再開平方,最後算出的東西沒有數學意義,這就有問題了。 還有,即使X和Y單位一致,但是如果資料中X整體都比較小,比如都是1到10之間的數,Y很大,比如都是1000以上的數,那麼,在計算距離的時候Y起到的作用就比X大很多,X對於距離的影響幾乎可以忽略,這也有問題。 因此,如果K-Means聚類中選擇歐幾里德距離計算距離,資料集又出現了上面所述的情況,就一定要進行資料的標準化(normalization),即將資料按比例縮放,使之落入一個小的特定區間。去除資料的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行計算和比較。 標準化方法最常用的有兩種:

    • min-max標準化(離差標準化):對原始資料進行線性變換,是結果落到【0,1】區間,轉換方法為 X'=(X-min)/(max-min),其中max為樣本資料最大值,min為樣本資料最小值。
    • z-score標準化(標準差標準化):處理後的資料符合標準正態分佈(均值為0,方差為1),轉換公式:X減去均值,再除以標準差
  6. 每一輪迭代如何選出新的質心? 答:各個維度的算術平均,比如(X1,Y1,Z1)、(X2,Y2,Z2)、(X3,Y3,Z3),那就新質心就是【(X1+X2+X3)/3,(Y1+Y2+Y3)/3,(Z1,Z2,Z3)/3】,這裡要注意,新質心不一定是實際的一個數據點。

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

  8. 用SPSS作出的K-Means聚類結果,包含ANOVA(單因素方差分析),是什麼意思? 答:答簡單說就是判斷用於聚類的變數是否對於聚類結果有貢獻,方差分析檢驗結果越顯著的變數,說明對聚類結果越有影響。對於不顯著的變數,可以考慮從模型中剔除。

五、聚類分析中業務專家的作用

業務專家的作用非常大,主要體現在聚類變數的選擇和對於聚類結果的解讀:

  1. 比如要對於現有的客戶分群,那麼就要根據最終分群的目的選擇不同的變數來分群,這就需要業務專家經驗支援。如果要優化客戶服務的渠道,那麼就應選擇與渠道相關的資料;如果要推廣一個新產品,那就應該選用使用者目前的使用行為的資料來歸類使用者的興趣。演算法是無法做到這一點的
  2. 欠缺經驗的分析人員和經驗豐富的分析人員對於結果的解讀會有很大差異。其實不光是聚類分析,所有的分析都不能僅僅依賴統計學家或者資料工程師。