Kmeans 算法 收斂

轉載自https://ask.julyedu.com/question/143?notification_id=10011

僅mark,侵刪

 

 

下面我們來聊一下K-means。
我們要知道,其實K-means是一種爲了簡化計算以及加快收斂速度的近似算法,爲什麼?你看算法在距離上的定義

D=||xk−μ^i||2


是不是很熟悉呢,對的就是歐式距離
憑什麼要用歐式距離?用別的距離不行?(K-means:我樂意,不服你來打我啊)

我們下面來聊一聊用別的距離會怎麼樣,爲了方便起見,我們就用跟歐式距離很像的馬氏距離好了

D=(xk−μ^i)TΣ^−1i(xk−μ^i)



在此之前,我們要知道,聚類究竟是要做什麼,聚類可以認爲是這樣的
1. 樣本的類別c需要知道,比如你拿到一堆沒有標籤的數據,他們是手寫字母,那麼類別就應該是26(你要是跟我扯大寫小寫一共52個類別就是不客觀,你就是來砸場的哼)。但是如果這些數據是類別不明確的,你根本就沒辦法知道有多少個類別,或者本來就沒有類別的概念,那麼這個c就取決你了,你可以憑直覺(只要你boss不踢你滾蛋),憑經驗啥的來決定c取多少,但不管怎樣,這個c是一定知道的。
2. 每個類別的先驗概率P(w_i)也是知道的,這個如果你其他參數都定了,那麼這個參數就能算出來。
3. 樣本條件概率的數學形式是以知的,即

p(x|wj,θj),j=1,⋯,c


是知道的,可能這個形式是你本來就知道這個模型是這樣,或者你猜這個模型是這樣(俗稱:蒙的),不管怎樣,我說你知道你就是知道別抵抗!
4.參數是未知的,即我們不知道以下參數

θ1,θ2,⋯,θc


的具體取值是什麼,但是他們長什麼樣是知道的(因爲模型是知道的)

所以聚類任務就可以看做是,我知道模型,知道類別,唯獨不知道類別標籤,所以有監督學習與無監督學習是很像的(其實這兩個的界限本來就很模糊),如果你是學自動控制的,你會發現:這TM不就是系統辨識嗎?!

好像扯遠了,回到我們的k-means上來,k-means實際上是一種對數似然函數空間的隨機梯度法,這個一會我們我們再回來聊,我們先來解決一個問題:我們剛還扯着聚類,怎麼就突然扯到似然函數了???

根據我們之前關於聚類問題的定義,我們不難得出從一個混合密度中採樣到一個樣本的概率爲

p(x|θ)=∑j=1cp(x|wj,θj)P(wj)


(友情提示:你可以認爲上面的式子就是,對於某個樣本x,他屬於A類的概率,B類的概率.....所有類別的概率之和)
如果說這時候參數θ的數值知道了,那麼整個問題就解決了,但是我們不知道,所以纔會有後面的一大堆問題

不知道怎麼辦呢?回想我們的概率論,參數不知道,那就拿極大似然去擼他咯
友情提示:如果你忘了極大似然的含義,那麼你可以理解爲極大似然就是,我觀察到這個現象,那麼我就要讓參數使得我觀察到這個現象出現的概率最大。
舉個栗子,現在有兩個人,某位低調的網紅小王,以及我。還有一個參數---某位地產大亨健林先生,健林先生這個參數只能取兩個值:小王的父親、或是我的父親,但是這個取值我們不知道。好了背景介紹完畢,現在發生了一件事,我和小王同時追一名女生,結果女生對我說“你是個好人”。那麼問題來了,參數取值爲什麼?當然是“小王的父親”啊,爲什麼?因爲這個取值使得我被髮好人卡的概率最大。這就是極大似然的中心思想。

好了,回到原來問題上的討論,對於訓練集合D,我們有

p(D|θ)=∏k=1np(xk|θ)



當然了,我們往往都是擼對數似然的,因爲連加要比連乘容易處理,所以我們有

l=∑k=1np(xk|θ)



代入混合概率密度並求導,得到

∇θil=∑k=1n1p(xk|θ)∇θi[∑j=1cp(x|wj,θj)P(wj)]


假設我們的參數θ1, θ2....是獨立的,那麼引入後驗概率

p(wi|xk,θ)=p(x|wj,θj)P(wj)p(xk|θ)



於是我們可以將似然函數的梯度改寫成:

∇θil=∑k=1nP(wi|xk,θ)∇θilnp(xk|wi,θi)


友情提示:這個可以反推回去的,自己試着推一下吧:D

在數學推導上,接下來就是令梯度爲0,然後求解參數blahblah

 

 

好了,回到我們之前的話題,我們之前講到似然函數,大家有沒有發現,上面的推導跟有監督學習的推導是一模一樣的!!!!!
是的,上面的就是有監督學習的推導=。=

誒誒誒??同學!別打臉,我明天還要出門見人的

爲什麼說上面的是有監督的推導?因爲在這裏我們假定我們是知道先驗概率P(w_i)的,也就是說,我們知道各個類別的出現概率的,問題就出現了,我們現在是無監督的啊,一開始就沒給標籤你你哪來的先驗概率?

接下來我們就將上面的東西推廣到P(w_i)也未知的情況,下面問題就變成了要求一組參數θ以及一組P(w)使得似然最大,且這組P(w)還要滿足概率三大公理的前兩條:

P(wi)≥0,i=1,⋯,c,           ∑i=1cP(wi)=1


如果我們分別定義P(w_i)和θ的最大似然估計爲:

P^(wi),   θ^i


那麼我們有

P^(wi)=1n∑k=1nP^(wi|xk,θ^)


以及

∑k=1nP^(wi|xk,θ^)∇θilnp(xk|wi,θ^i)=0


其中

P^(wi|xk,θ^)=p(xk|wi,θ^i)P^(wi)∑cj=1p(xk|wj,θ^j)P^(wj)



解釋一下上面兩個個式子
第一個式子:類別概率的最大似然估計是每個樣本估計之和然後求平均,體現貝葉斯的思想
第二個式子:這是最大似然估計(令導數爲0),體現最大似然思想

終於進入到聚類的領域了,上面這兩個式子,第一個,你可以理解爲k-means的第一階段;第二個,你可以理解爲k-means的第二階段。事實上,k-means和EM算法是很像的,非常非常像,不信你仔細想想EM是不是也在做同樣的事情?只不過表達換了一下而已。

好了,回到我之前說的那句話“k-means實際上是一種對數似然函數空間的隨機梯度法”,現在大家應該已經知道爲什麼會出現似然空間這個說法了,下面我們依然不打算直接講k-means,我們先來看下面這個圖

2.png


上面三條曲線,其中實線是真實的概率密度,而兩條虛線是分別是兩種估計,事實上我們也不難看出,A那條曲線要比B的更準確,但是就能說A更好嗎?如果我們開了上帝視角當然能這麼說,但實際中我們不知道真實的密度是怎麼樣的,所以A和B兩條曲線差不多,沒有那個更好。此外,如果我們一開始類別設置錯了,我們設置成了3個類別,那麼得到的曲線又不一樣了,所以,我們對於類別的設置也對算法起到很重要的作用。

但事實上,哪怕類別C設定準確了,也不一定能收斂到全局最優點,爲什麼?看下面這張馬鞍面

3.png


圖中的紅線是迭代過程中最大似然的軌跡,如果我們初始化的位置比較好,那麼可以上升到最頂點,如果不好呢?那就有可能收斂到鞍點,所以我們的觀點是:多在幾個不同的初始點試幾次,選最好的來用。

好了回到k-means上來。在上面那個模型中,我們知道他是高斯模型,所以我們就使用馬氏距離,所以對於概率

P^(wi|xk,θ^)=p(xk|wi,θ^i)P^(wi)∑cj=1p(xk|wj,θ^j)P^(wj)


我們經過推導是可以證明它隨着

(xk−μ^i)TΣ^−1i(xk−μ^i)


的減小而增大,關於這個證明,我實在是不想敲公式了。。。原諒我。。。。。。

但如果我們換成歐式距離呢?也就是

||xk−μ^i||2


然後通過歐氏距離找到中心,並對概率進行簡化

P^(wi|xk,θ^)≈1,若i=m

 

P^(wi|xk,θ^)≈0,否則



然後我們就得到了K-means,所以“k-means實際上是一種對數似然函數空間的隨機梯度法”這種說法明白了嗎?

依然是上面的曲面,我們看下它的等高線圖,在k-means中,他的上升軌跡如下:

4.png


從不同的起始點,我們可以看到k-means將收斂到不同的點,大部分情況下是到全局最後點,但也有收斂到鞍點的情況。

聚類,其實是比較主觀的事,比如下面這個圖,我既可以說它可以分爲兩類,也可以說它可以分爲3類,所以這種事,你開心就好

5.png



此外,聚類得到的結果也不一定是正確的,比如下面這張圖,上面部分是聚類的結果,下面部分纔是其真實情況

6.png



K-means簡單粗暴有成效,是個挺有效果的算法,但不意味着它總能奏效,比如下面這種情況:

7.png


如果我們繼續使用k-means聚類:

8.png


很顯然這時候k-means就不在奏效了,對此我們有譜聚類這種算法,那個太跑題了,而且我也不太懂那塊,比如下面是對上圖譜聚類的結果

9.png


這其實不能說K-means就一無是處,事實上,在機器學習裏,每個算法都是有用處的,只有適不適合,沒有誰比誰本質上更好,比如用logistic regression就能工作得很好的工作你就沒必要搬卷積神經網絡這種大炮出來,而且這座大炮還不一定工作得比LR好

樓主對不起=。=
我扯了半天也沒回答你的問題
對於你的問題,我覺得,可以多換幾個初始值試試,關於收斂則準則有兩種,一種是判斷中心移動(如果你的中心已經不怎麼變化了說明收斂了阿,你可以將誤差記錄下來看看誤差下降情況),另外一種是根據迭代次數,k-means我印象中是收斂的吧=。=

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章