原文:http://blog.pluskid.org/?p=39函數
每一個 GMM 由 個 Gaussian 分佈組成,每一個 Gaussian 稱爲一個「Component」,這些 Component 線性加成在一塊兒就組成了 GMM 的機率密度函數:3d
根據上面的式子,若是咱們要從 GMM 的分佈中隨機地取一個點的話,實際上能夠分爲兩步:首先隨機地在這 個 Component 之中選一個,每一個 Component 被選中的機率實際上就是它的係數
,選中了 Component 以後,再單獨地考慮從這個 Component 的分佈中選取一個點就能夠了──這裏已經回到了普通的 Gaussian 分佈,轉化爲了已知的問題。blog
那麼如何用 GMM 來作 clustering 呢?其實很簡單,如今咱們有了數據,假定它們是由 GMM 生成出來的,那麼咱們只要根據數據推出 GMM 的機率分佈來就能夠了,而後 GMM 的 個 Component 實際上就對應了
個 cluster 了。根據數據來推算機率密度一般被稱做 density estimation ,特別地,當咱們在已知(或假定)了機率密度函數的形式,而要估計其中的參數的過程被稱做「參數估計」。ip
如今假設咱們有 個數據點,並假設它們服從某個分佈(記做
),如今要肯定裏面的一些參數的值,例如,在 GMM 中,咱們就須要肯定
、
和
這些參數。 咱們的想法是,找到這樣一組參數,它所肯定的機率分佈生成這些給定的數據點的機率最大,而這個機率實際上就等於
,咱們把這個乘積稱做似然函數 (Likelihood Function)。一般單個點的機率都很小,許多很小的數字相乘起來在計算機裏很容易形成浮點數下溢,所以咱們一般會對其取對數,把乘積變成加和
,獲得 log-likelihood function 。接下來咱們只要將這個函數最大化(一般的作法是求導並令導數等於零,而後解方程),亦即找到這樣一組參數值,它讓似然函數取得最大值,咱們就認爲這是最合適的參數,這樣就完成了參數估計的過程。get
下面讓咱們來看一看 GMM 的 log-likelihood function :it
因爲在對數函數裏面又有加和,咱們無法直接用求導解方程的辦法直接求得最大值。爲了解決這個問題,咱們採起以前從 GMM 中隨機選點的辦法:分紅兩步,實際上也就相似於 K-means 的兩步。io
因爲式子裏的 和
也是須要咱們估計的值,咱們採用迭代法,在計算
的時候咱們假定
和
均已知,咱們將取上一次迭代所得的值(或者初始值)。function
其中 ,而且
也瓜熟蒂落地能夠估計爲
。im