① 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、例子、細節
② matlab里的kmeans演算法使用案例不理解丘解釋
[Idx,C,sumD,D]=Kmeans(data,3,』dist』,』sqEuclidean』,』rep』,4)
等號右邊:
kmeans:K-均值聚類
data是你自己的輸入數據
3 是你要聚成3類
dist sqEuclidean 這2個參數,表示距離函數為歐式距離。什麼是歐式距離自己網路
』rep』,4聚類重復次數4次。因為要反復算直到選出最好的結果,至多反復算4次
等號左邊:
Idx 是你聚類的標號
C 是聚類之後質心的位置
sumD是所有點到質心的距離之和
D是每個點與所有質心的距離
比如下面這幅圖中,輸入數據data就是所有的小點,K-均值聚類輸出的結果就是所有的數據被聚為了3類,聚類的標號就是紅綠藍三種顏色,每一類有一個自己的質心(大的點)。