Kmeans 算法 收敛
轉(zhuǎn)載自https://ask.julyedu.com/question/143?notification_id=10011
僅mark,侵刪
?
?
下面我們來聊一下K-means。
我們要知道,其實(shí)K-means是一種為了簡化計(jì)算以及加快收斂速度的近似算法,為什么?你看算法在距離上的定義
D=||xk?μ^i||2
是不是很熟悉呢,對的就是歐式距離
憑什么要用歐式距離?用別的距離不行?(K-means:我樂意,不服你來打我啊)
我們下面來聊一聊用別的距離會怎么樣,為了方便起見,我們就用跟歐式距離很像的馬氏距離好了
D=(xk?μ^i)TΣ^?1i(xk?μ^i)
在此之前,我們要知道,聚類究竟是要做什么,聚類可以認(rèn)為是這樣的
1. 樣本的類別c需要知道,比如你拿到一堆沒有標(biāo)簽的數(shù)據(jù),他們是手寫字母,那么類別就應(yīng)該是26(你要是跟我扯大寫小寫一共52個(gè)類別就是不客觀,你就是來砸場的哼)。但是如果這些數(shù)據(jù)是類別不明確的,你根本就沒辦法知道有多少個(gè)類別,或者本來就沒有類別的概念,那么這個(gè)c就取決你了,你可以憑直覺(只要你boss不踢你滾蛋),憑經(jīng)驗(yàn)啥的來決定c取多少,但不管怎樣,這個(gè)c是一定知道的。
2. 每個(gè)類別的先驗(yàn)概率P(w_i)也是知道的,這個(gè)如果你其他參數(shù)都定了,那么這個(gè)參數(shù)就能算出來。
3. 樣本條件概率的數(shù)學(xué)形式是以知的,即
p(x|wj,θj),j=1,?,c
是知道的,可能這個(gè)形式是你本來就知道這個(gè)模型是這樣,或者你猜這個(gè)模型是這樣(俗稱:蒙的),不管怎樣,我說你知道你就是知道別抵抗!
4.參數(shù)是未知的,即我們不知道以下參數(shù)
θ1,θ2,?,θc
的具體取值是什么,但是他們長什么樣是知道的(因?yàn)槟P褪侵赖?#xff09;
所以聚類任務(wù)就可以看做是,我知道模型,知道類別,唯獨(dú)不知道類別標(biāo)簽,所以有監(jiān)督學(xué)習(xí)與無監(jiān)督學(xué)習(xí)是很像的(其實(shí)這兩個(gè)的界限本來就很模糊),如果你是學(xué)自動控制的,你會發(fā)現(xiàn):這TM不就是系統(tǒng)辨識嗎?!
好像扯遠(yuǎn)了,回到我們的k-means上來,k-means實(shí)際上是一種對數(shù)似然函數(shù)空間的隨機(jī)梯度法,這個(gè)一會我們我們再回來聊,我們先來解決一個(gè)問題:我們剛還扯著聚類,怎么就突然扯到似然函數(shù)了???
根據(jù)我們之前關(guān)于聚類問題的定義,我們不難得出從一個(gè)混合密度中采樣到一個(gè)樣本的概率為
p(x|θ)=∑j=1cp(x|wj,θj)P(wj)
(友情提示:你可以認(rèn)為上面的式子就是,對于某個(gè)樣本x,他屬于A類的概率,B類的概率.....所有類別的概率之和)
如果說這時(shí)候參數(shù)θ的數(shù)值知道了,那么整個(gè)問題就解決了,但是我們不知道,所以才會有后面的一大堆問題
不知道怎么辦呢?回想我們的概率論,參數(shù)不知道,那就拿極大似然去擼他咯
友情提示:如果你忘了極大似然的含義,那么你可以理解為極大似然就是,我觀察到這個(gè)現(xiàn)象,那么我就要讓參數(shù)使得我觀察到這個(gè)現(xiàn)象出現(xiàn)的概率最大。
舉個(gè)栗子,現(xiàn)在有兩個(gè)人,某位低調(diào)的網(wǎng)紅小王,以及我。還有一個(gè)參數(shù)---某位地產(chǎn)大亨健林先生,健林先生這個(gè)參數(shù)只能取兩個(gè)值:小王的父親、或是我的父親,但是這個(gè)取值我們不知道。好了背景介紹完畢,現(xiàn)在發(fā)生了一件事,我和小王同時(shí)追一名女生,結(jié)果女生對我說“你是個(gè)好人”。那么問題來了,參數(shù)取值為什么?當(dāng)然是“小王的父親”啊,為什么?因?yàn)檫@個(gè)取值使得我被發(fā)好人卡的概率最大。這就是極大似然的中心思想。
好了,回到原來問題上的討論,對于訓(xùn)練集合D,我們有
p(D|θ)=∏k=1np(xk|θ)
當(dāng)然了,我們往往都是擼對數(shù)似然的,因?yàn)檫B加要比連乘容易處理,所以我們有
l=∑k=1np(xk|θ)
代入混合概率密度并求導(dǎo),得到
?θil=∑k=1n1p(xk|θ)?θi[∑j=1cp(x|wj,θj)P(wj)]
假設(shè)我們的參數(shù)θ1, θ2....是獨(dú)立的,那么引入后驗(yàn)概率
p(wi|xk,θ)=p(x|wj,θj)P(wj)p(xk|θ)
于是我們可以將似然函數(shù)的梯度改寫成:
?θil=∑k=1nP(wi|xk,θ)?θilnp(xk|wi,θi)
友情提示:這個(gè)可以反推回去的,自己試著推一下吧:D
在數(shù)學(xué)推導(dǎo)上,接下來就是令梯度為0,然后求解參數(shù)blahblah
?
?
好了,回到我們之前的話題,我們之前講到似然函數(shù),大家有沒有發(fā)現(xiàn),上面的推導(dǎo)跟有監(jiān)督學(xué)習(xí)的推導(dǎo)是一模一樣的!!!!!
是的,上面的就是有監(jiān)督學(xué)習(xí)的推導(dǎo)=。=
誒誒誒??同學(xué)!別打臉,我明天還要出門見人的
為什么說上面的是有監(jiān)督的推導(dǎo)?因?yàn)樵谶@里我們假定我們是知道先驗(yàn)概率P(w_i)的,也就是說,我們知道各個(gè)類別的出現(xiàn)概率的,問題就出現(xiàn)了,我們現(xiàn)在是無監(jiān)督的啊,一開始就沒給標(biāo)簽?zāi)隳隳膩淼南闰?yàn)概率?
接下來我們就將上面的東西推廣到P(w_i)也未知的情況,下面問題就變成了要求一組參數(shù)θ以及一組P(w)使得似然最大,且這組P(w)還要滿足概率三大公理的前兩條:
P(wi)≥0,i=1,?,c,???????????∑i=1cP(wi)=1
如果我們分別定義P(w_i)和θ的最大似然估計(jì)為:
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)
解釋一下上面兩個(gè)個(gè)式子
第一個(gè)式子:類別概率的最大似然估計(jì)是每個(gè)樣本估計(jì)之和然后求平均,體現(xiàn)貝葉斯的思想
第二個(gè)式子:這是最大似然估計(jì)(令導(dǎo)數(shù)為0),體現(xiàn)最大似然思想
終于進(jìn)入到聚類的領(lǐng)域了,上面這兩個(gè)式子,第一個(gè),你可以理解為k-means的第一階段;第二個(gè),你可以理解為k-means的第二階段。事實(shí)上,k-means和EM算法是很像的,非常非常像,不信你仔細(xì)想想EM是不是也在做同樣的事情?只不過表達(dá)換了一下而已。
好了,回到我之前說的那句話“k-means實(shí)際上是一種對數(shù)似然函數(shù)空間的隨機(jī)梯度法”,現(xiàn)在大家應(yīng)該已經(jīng)知道為什么會出現(xiàn)似然空間這個(gè)說法了,下面我們依然不打算直接講k-means,我們先來看下面這個(gè)圖
上面三條曲線,其中實(shí)線是真實(shí)的概率密度,而兩條虛線是分別是兩種估計(jì),事實(shí)上我們也不難看出,A那條曲線要比B的更準(zhǔn)確,但是就能說A更好嗎?如果我們開了上帝視角當(dāng)然能這么說,但實(shí)際中我們不知道真實(shí)的密度是怎么樣的,所以A和B兩條曲線差不多,沒有那個(gè)更好。此外,如果我們一開始類別設(shè)置錯(cuò)了,我們設(shè)置成了3個(gè)類別,那么得到的曲線又不一樣了,所以,我們對于類別的設(shè)置也對算法起到很重要的作用。
但事實(shí)上,哪怕類別C設(shè)定準(zhǔn)確了,也不一定能收斂到全局最優(yōu)點(diǎn),為什么?看下面這張馬鞍面
圖中的紅線是迭代過程中最大似然的軌跡,如果我們初始化的位置比較好,那么可以上升到最頂點(diǎn),如果不好呢?那就有可能收斂到鞍點(diǎn),所以我們的觀點(diǎn)是:多在幾個(gè)不同的初始點(diǎn)試幾次,選最好的來用。
好了回到k-means上來。在上面那個(gè)模型中,我們知道他是高斯模型,所以我們就使用馬氏距離,所以對于概率
P^(wi|xk,θ^)=p(xk|wi,θ^i)P^(wi)∑cj=1p(xk|wj,θ^j)P^(wj)
我們經(jīng)過推導(dǎo)是可以證明它隨著
(xk?μ^i)TΣ^?1i(xk?μ^i)
的減小而增大,關(guān)于這個(gè)證明,我實(shí)在是不想敲公式了。。。原諒我。。。。。。
但如果我們換成歐式距離呢?也就是
||xk?μ^i||2
然后通過歐氏距離找到中心,并對概率進(jìn)行簡化
P^(wi|xk,θ^)≈1,若i=m
?
P^(wi|xk,θ^)≈0,否則
然后我們就得到了K-means,所以“k-means實(shí)際上是一種對數(shù)似然函數(shù)空間的隨機(jī)梯度法”這種說法明白了嗎?
依然是上面的曲面,我們看下它的等高線圖,在k-means中,他的上升軌跡如下:
從不同的起始點(diǎn),我們可以看到k-means將收斂到不同的點(diǎn),大部分情況下是到全局最后點(diǎn),但也有收斂到鞍點(diǎn)的情況。
聚類,其實(shí)是比較主觀的事,比如下面這個(gè)圖,我既可以說它可以分為兩類,也可以說它可以分為3類,所以這種事,你開心就好
此外,聚類得到的結(jié)果也不一定是正確的,比如下面這張圖,上面部分是聚類的結(jié)果,下面部分才是其真實(shí)情況
K-means簡單粗暴有成效,是個(gè)挺有效果的算法,但不意味著它總能奏效,比如下面這種情況:
如果我們繼續(xù)使用k-means聚類:
很顯然這時(shí)候k-means就不在奏效了,對此我們有譜聚類這種算法,那個(gè)太跑題了,而且我也不太懂那塊,比如下面是對上圖譜聚類的結(jié)果
這其實(shí)不能說K-means就一無是處,事實(shí)上,在機(jī)器學(xué)習(xí)里,每個(gè)算法都是有用處的,只有適不適合,沒有誰比誰本質(zhì)上更好,比如用logistic regression就能工作得很好的工作你就沒必要搬卷積神經(jīng)網(wǎng)絡(luò)這種大炮出來,而且這座大炮還不一定工作得比LR好
樓主對不起=。=
我扯了半天也沒回答你的問題
對于你的問題,我覺得,可以多換幾個(gè)初始值試試,關(guān)于收斂則準(zhǔn)則有兩種,一種是判斷中心移動(如果你的中心已經(jīng)不怎么變化了說明收斂了阿,你可以將誤差記錄下來看看誤差下降情況),另外一種是根據(jù)迭代次數(shù),k-means我印象中是收斂的吧=。=
總結(jié)
以上是生活随笔為你收集整理的Kmeans 算法 收敛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 插入排序Java代码实现
- 下一篇: 软件调试基础