机器学习中的聚类算法(1):k-means算法
一文詳解激光點云的物體聚類:https://mp.weixin.qq.com/s/FmMJn2qjtylUMRGrD5telw
引言:
Q:什么是聚類算法?
現在我們在做的深度學習當中,比如圖像的識別和分類等等,這樣的一般是有監督的學習。但是在現實當中有很多的數據他都是沒有標簽的,所以我們需要進行一種無監督或者非監督的學習。因此,聚類算法是一種很好的解決方案。
Q:聚類算法分為哪些類?
1、k-means算法原理
1.1核心思想:
k-means聚類算法的核心思想主要是選定K的值。K就表示你將這堆數據分成幾個組。
在機器學習算法中有很多是需要我們去進行調參的,在這里我們所需要的調的參數就是這個K的值,K的不同選取是會影響到我們的聚類效果,
1.2算法實現/流程是什么:
比如說我有一堆數據,假設K=2,那么就是我希望把這一堆數據分為2組,所以每一組我都需要有一個聚類的中心,這個中心是怎么選取的呢?
- 第1步:剛開始是隨機選取的,隨機選取兩個點分別當做兩個組的中心A1、A2。中心點選取之后,這個中心點就是每個組的初始點,剛開始中心點都是隨機選取的。
- 第2步:計算這個A1中心點與整個數據集里邊每一個數據點之間的一個距離(就是計算除了與自身之外的其他點的距離),計算完之后就會有一個值。
- 第3步:第二個點A2(也就是令K=2時,選取的兩個中心點,第一個已經在第一步計算過了)他也會計算他到所有數據點的一個距離,比如說在整個數據集中存在一個B點,這個B點會與選取的兩個中心點A1、A2都計算一遍距離,如果B點與A1的距離小于B點與A2的距離,那么就表明B點距離A1比較近,那么就將B點劃分到A1這個中心點所代表的的組中。
- 第4步:將所有點都做一個計算并進行一個距離的比較,我和哪一個中心點的距離小,那么我就其分到那一個中心點所代表的一組中,最終把所有點都跑一邊。之后所有的點都會有一個分類歸屬。(此處是分成了2組)
- 第5步:當分成2組之后,并沒有結束。他還會進行計算。此時把中心點進行移動(因為中心點是你自己隨機選取的,這個中心點并不一定是你劃分為組之后所有數據的一個中心),為了將隨機選取的中心點移動到該組真正所在的一個中心點,還是需要進行一個計算。
(移動的方式就是:因為我們隨機選取的中心點A1和我們的組里邊的每一個點都有一個距離,他會算出一個平均值,他這個平均值就是我們隨機選取的初始點A1移動的一個距離(移動的話不是還需要方向嗎???),按照這個距離進行移動假設此時移動到了N1點,這個N1點就是我們新算出來的一個中心點。那么此時這個N1點就會與數據集里邊所有的點(注意是整個數據集不是每一個組內)里邊所有的數據點再計算一遍距離,計算出來之后我就有了N1點和整個數據集內每一個點的距離了,再進行與另外一組的新中心點的距離比較,再次進行分組劃分;
那么類似的,另一個隨機選取的初始點A2他也會計算出來一個移動的距離(就是平均值,這個平均值的求出是與該組內即與自己所在的組內其他點距離的平均值不是所有整個數據集),假設A2移動到了N2,那么N2這個點也會和數據集里邊所有的點(注意是整個數據集不是每一個組內)也計算出來一個距離。比如此時整個數據集中有一個點E,如果該點E與N1的距離小于E與N2的距離,那么這個E點就劃分到N1這個組里邊去,這樣操作又會把整個數據集分成兩組。之后就是這樣不斷的循環,最后經過不斷的移動,比如說移動到了最終的中心點(怎么確定這個是最終的中心點呢?))
確定某次移動過后這個就是最終的中心點F的方式:比如我們每次移動都會有一個中心點,將移動后本次的中心點F與上一次的中心點L進行一個比較,也就是計算F到L的一個距離,如果這個距離小于某一個閾值,(這個閾值是事先設定好的),如果此時F到L的這個距離小于閾值,那就表明我這個中心點F他就不再移動了(此時基本上我把所有的數據都已經分組好了,沒必要移動了)。
PS:其實整個過程就是在不斷的計算比較的一個過程,直到最終找到中心為止。(所以就是不斷的計算當前聚類的中心或者組的中心到所有點的距離,然后比較,看看我到底被分到哪一組,最終就會找到這個組的中心)
1.3基于sklearn(機器學習庫)算法庫實現的案例
虛擬的數據K到底選多少,會有一個評估的得分,得分越高,那么我這個K就選哪一個。
1.4K-means算法優缺點
2、應用時的一些Trick
(1)第一步隨機的選取一個點,但是我們在應用的時候不能真的隨機選擇數據點中的隨便一個點。
(2)k-means是受初始化影響的,不同初始化會不一樣k-means的結果。所以對于同樣的數據會執行幾遍k-means,然后選取損失函數最小的那一次k-means作為最終的結果。
(3)在E-step的時候,要求n個點到k個中心點的nearset neighbor,我們可以使用k-d tree或者八叉樹去做一些加速。
(4)還有一種變種的k-means叫做mini-batch,即在每一次迭代里邊我都選不一樣的subset of作為我算的數據,在每一次迭代里邊我運算量就少了。代價就是可能會產生更壞的結果。
3、實戰
-----
總結
以上是生活随笔為你收集整理的机器学习中的聚类算法(1):k-means算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深蓝学院的深度学习理论与实践课程:第四章
- 下一篇: 机器学习中的聚类算法(2):Mean S