K-means聚类详解
聚類的思想
所謂聚類算法是指將一堆沒有標簽的數據自動劃分成幾類的方法,屬于無監督學習方法,這個方法要保證同一類的數據有相似的特征,如下圖所示:
根據樣本之間的距離或者說是相似性(親疏性),把越相似、差異越小的樣本聚成一類(簇),最后形成多個簇,使同一個簇內部的樣本相似度高,不同簇之間差異性高。
K-means方法是一種非監督學習的算法,它解決的是聚類問題
算法簡介
K-means方法是聚類中的經典算法,數據挖掘十大經典算法之一;算法接受參數k,然后將事先輸入的n個數據對象劃分為k個聚類以便使得所獲得的聚類滿足聚類中的對象相似度較高,而不同聚類中的對象相似度較小。
K-Means算法是聚類中的基礎算法,也是無監督學習里的一個重要方法。其基本原理是隨機確定k(人為指定)個初始點作為簇質心,然后將數據樣本中的每一個點與每個簇質心計算距離,依據此距離對樣本進行分配;之后將每次簇的質心更改為該簇內所有點的平均值
普通的K-Means算法因為初始簇質心的隨機性,很可能會收斂到局部最優。為解決這一情況,可以隨機初始化若干次,取最好結果,但這種方法在初始給定k值較大的情況下,可能只會得到比前一次好一點的結果(因為k值越大,簇質心越多,則隨機性帶來的不確定性越小
算法思想
以空間中k個點為中心進行聚類,對最靠近他們的對象歸類,通過迭代的方法,逐次更新各聚類中心的值,直到得到最好的聚類結果
相關概念
K值:要得到的簇的個數
質心:每個簇的均值向量,即向量各維取平均即可
距離量度:常用歐幾里得距離和余弦相似度(先標準化)
算法描述
K-means是一個反復迭代的過程,算法分為四個步驟:
- 1.隨機選取數據空間中的K個對象作為初始中心,每個對象代表一個聚類中心
- 2.對于樣本中的數據對象,根據它們與這些聚類中心的歐氏距離,按距離最近的準則將它們分到距離它們最近的聚類中心(最相似)所對應的類
- 3.更新聚類中心:將每個類別中所有對象所對應的均值作為該類別的聚類中心,計算目標函數的值
- 4.斷聚類中心和目標函數的值是否發生改變,若不變,則輸出結果,若改變,則返回2)
手算舉例
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也這么算,如下
第一次分組后的結果
組A:P1
組B:P2、P3、P4、P5、P6
3.再計算新的中心
A組質心還是P1=(0,0)
B組新的質心坐標為:P哥=((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)
第二次分組結果
組A:P1、P2、P3
組B:P4、P5、P6
4.再次計算質心
P哥1=(1.33,1)
P哥2=(9,8.33)
第三次分組結果
組A:P1、P2、P3
組B:P4、P5、P6
可以發現,第三次分組結果和第二次分組結果一致,說明已經收斂,聚類結束。
常見的問題小結
1.K值怎么定?我怎么知道應該幾類?
- 這個真的沒有確定的做法,分幾類主要取決于個人的經驗與感覺,通常的做法是多嘗試幾個K值,看分成幾類的結果更好解釋,更符合分析目的等。
- 肘部法則
2.初始的K個質心怎么選?
最常用的方法是隨機選,初始質心的選取對最終聚類結果有影響,因此算法一定要多執行幾次,哪個結果更合理(reasonable),就用哪個結果
3.K-Means會不會陷入一直選質心的過程,永遠停不下來?
不會,有數學證明K-Means一定會收斂,大致思路是利用SSE的概念(也就是誤差平方和),即每個點到自身所歸屬質心的距離的平方和,這個平方和是一個函數,然后能夠證明這個函數是可以最終收斂的函數
4.關于離群值
離群值就是遠離整體的,非常異常、非常特殊的數據點,在聚類之前應該將這些“極大”“極小”之類的離群數據都去掉,否則會對于聚類的結果有影響。但是,離群值往往自身就很有分析的價值,可以把離群值單獨作為一類來分析
5.單位要一致
比如X的單位是米,Y也是米,那么距離算出來的單位還是米,是有意義的。但是如果X是米,Y是噸,用距離公式計算就會出現“米的平方”加上“噸的平方”再開平方,最后算出的東西沒有數學意義,這就有問題了
6.標準化
如果數據中X整體都比較小,比如都是1到10之間的數,Y很大,比如都是1000以上的數,那么,在計算距離的時候Y起到的作用就比X大很多,X對于距離的影響幾乎可以忽略,這也有問題。因此,如果K-Means聚類中選擇歐幾里德距離計算距離,數據集又出現了上面所述的情況,就一定要進行數據的標準化(normalization),即將數據按比例縮放,使之落入一個小的特定區間
停止收斂條件
先隨機選取K個對象作為初始的聚類中心。然后計算每個對象與各個種子聚類中心之間的距離,把每個對象分配給距離它最近的聚類中心。聚類中心以及分配給它們的對象就代表一個聚類。一旦全部對象都被分配了,每個聚類的聚類中心會根據聚類中現有的對象被重新計算。這個過程將不斷重復直到滿足某個終止條件。終止條件可以是以下任何一個:
- 1.沒有(或最小數目)對象被重新分配給不同的聚類,即樣本所屬類別沒有發生改變
- 2.沒有(或最小數目)聚類中心再發生變化。
- 3.誤差平方和局部最小
K均值算法優缺點
優點
- 原理簡單(算法簡單,容易實現)
- 速度快
- 它的復雜度大約是O(nkt),其中n是所有對象的數目,k是簇的數目,t是迭代的次數。通常k<<n。這個算法通常局部收斂。
- 對大數據集有比較好的伸縮性
- 對處理大數據集,該算法是相對可伸縮的和高效率的。
- 算法嘗試找出使平方誤差函數值最小的k個劃分。當簇是密集的、球狀或團狀的,且簇與簇之間區別明顯時,聚類效果較好。
缺點
-
需要指定聚類 數量K,K值比較難以選取
-
對異常值敏感
- 對于”噪聲”和孤立點數據敏感,少量的該類數據能夠對平均值產生極大影響
- 不適合于發現非凸面形狀的簇,或者大小差別很大的簇
-
對初始值敏感
- 對初值的簇心值敏感,對于不同的初始值,可能會導致不同的聚類結果
- 對數據類型要求較高,適合數值型數據
- 可能收斂到局部最小值,在大規模數據上收斂較慢
應用例子
https://blog.csdn.net/qq_42363032/article/details/106505008
代碼實現
https://blog.csdn.net/qq_42363032/article/details/106505046
總結
以上是生活随笔為你收集整理的K-means聚类详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LM2577 DC/DC 升降压模块
- 下一篇: 美团8年经验之谈,测试工程师如何进阶(自