[机器学习笔记]Note11--聚类
繼續是機器學習課程的筆記,本節介紹的是聚類方法,主要是K-means算法。
非監督學習
首先介紹監督學習和非監督學習的區別。一個監督學習的例子如下圖,給定訓練集如:{(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},每個訓練實例都有對應的標簽。
而對于非監督學習,其例子如下圖所示,給定訓練集是如:{x(1),x(2),…,x(m)},,一般可以使用聚類的方法將訓練集的數據進行劃分。
K-均值算法(K-means)
K-均值是最普及的聚類算法,算法接受一個未標記的數據集,然后將數據集聚類成不同的組。
K-均值是一個迭代算法,假設我們想要將數據聚類成n個組,其方法為:
下面是一個聚類示例,這是迭代1次的狀態,可以看出初始有3群數據,初始聚類中心有3個。如下所示
然后是迭代3次時候的情況,如下所示,初始聚類中心開始移動。
這是迭代10次后,初始聚類中心已經分別移動到3群數據的中心位置。
這里用μ1,μ2,…,μm來表示聚類中心,用c(1),c(2),…,c(m)來存儲與第i個實例數據最近的聚類中心的索引,K-均值算法的偽代碼如下所示:
Repeat{
for i = 1 to m
c(i) := index (from 1 to K) of cluster centroid closed to x(i)
for k = 1 to K
μk:= average (mean) of points assigned to cluster K
}
這個算法分為兩個步驟,第一個for循環是計算數據集每個數據與聚類中心的距離,然后分別將最近的聚類中心的索引賦值到對應的c(i),而第二個for循環就是移動聚類中心到其類平均值處。
當然在這個過程中可能遇到有聚類中心是沒有分配數據點給它的,通常的一個做法是刪除這種聚類中心,或者是重新選擇聚類中心,保證聚類中心數還是初始設定的K個。
K-均值算法是可以很方便將數據分為不同組的,即使是在沒有非常明顯區分的組群的情況下也可以。如下圖是一個包含身高和體重兩個特征的數據集,可以利用K-均值算法將數據分為三類,用于幫助確定將要生產的T-恤的三種尺寸。
優化目標
K-均值最小化問題,就是最小化所有的數據點與其所關聯的聚類中心之間的距離之和,因此K-均值的代價函數(又稱為畸變函數)為:
其中 μc(i)代表與 x(i)最近的聚類中心點。
所以我們的優化目標是找出是的代價函數最小的c(1),c(2),…,c(m)和μ1,μ2,…,μm:
回顧上一小節中K-均值迭代算法的偽代碼可知,第一個循環就是用于減小c(i)引起的代價,而第二個循環則是用于減小μi引起的代價,因此,迭代的過程一定會是每一次迭代都在減小代價函數,不然便是出現了錯誤。
隨機初始化
在運行K-均值算法之前,首先需要隨機初始化所有的聚類中心點,做法如下:
K-均值的一個問題在于,它有可能會停留在一個局部最小值處,而這取決于初始化的情況。
為了解決這個問題,通常需要多次運行K-均值算法,每一次都重新進行隨機初始化,最后再比較多次運行K-均值的結果,選擇代價函數最小的結果。這種方法在K較小(2-10)的時候還是可行的,但是如果K較大,這種做法可能不會有明顯地改善。
選擇聚類數
沒有所謂最好的選擇聚類數的方法,通常是需要根據不同的問題,人工進行選擇的。選擇的時候思考我們運用K-均值算法聚類的動機是什么,然后選擇能最好服務于該目標的聚類數。
例如,在之前給出的T-恤制造例子中,我們要將用戶按照身材聚類,我們可以分成3個尺寸S,M,L,也可以分成5個尺寸XS,S,M,L,XL,這樣的選擇是建立在回答“聚類后我們制造的T-恤是否能較好地適合我們的客戶”這個問題的基礎上做出的。
小結
本節課介紹了非監督學習中的聚類算法的一種最常用的K-均值算法,這種算法是比較簡單,也比較常用。它的做法是先隨機選擇K個聚類中心,然后計算每個數據點到這K個聚類中心的距離,然后劃分數據點到其最近的聚類中心,并視為一類,然后計算每類的平均值,再將聚類中心移動到這個類平均值處,然后再重復這幾個步驟,直到聚類中心不再移動。
該算法的不足就是聚類中心數目的選擇是需要多次實驗才能得到最佳的,同時對于初始的聚類中心數,一般是使用隨機初始化,所以可能導致算法落入局部最優,在K較小的情況可以多次運行算法,選擇代價函數最小的一個。
總結
以上是生活随笔為你收集整理的[机器学习笔记]Note11--聚类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络安全:图片防盗链的实现原理
- 下一篇: C++ 输入一行未知个数的整数