GMM

原文:http://blog.pluskid.org/?p=39函數

每一個 GMM 由 K 個 Gaussian 分佈組成,每一個 Gaussian 稱爲一個「Component」,這些 Component 線性加成在一塊兒就組成了 GMM 的機率密度函數:3d

\displaystyle
\begin{aligned}
p(x) & = \sum_{k=1}^K p(k)p(x|k) \\
     & = \sum_{k=1}^K \pi_k \mathcal{N}(x|\mu_k, \Sigma_k)
\end{aligned}

根據上面的式子,若是咱們要從 GMM 的分佈中隨機地取一個點的話,實際上能夠分爲兩步:首先隨機地在這 K 個 Component 之中選一個,每一個 Component 被選中的機率實際上就是它的係數 \pi_k ,選中了 Component 以後,再單獨地考慮從這個 Component 的分佈中選取一個點就能夠了──這裏已經回到了普通的 Gaussian 分佈,轉化爲了已知的問題。blog

那麼如何用 GMM 來作 clustering 呢?其實很簡單,如今咱們有了數據,假定它們是由 GMM 生成出來的,那麼咱們只要根據數據推出 GMM 的機率分佈來就能夠了,而後 GMM 的 K 個 Component 實際上就對應了 K 個 cluster 了。根據數據來推算機率密度一般被稱做 density estimation ,特別地,當咱們在已知(或假定)了機率密度函數的形式,而要估計其中的參數的過程被稱做「參數估計」。ip

如今假設咱們有 N 個數據點,並假設它們服從某個分佈(記做 p(x) ),如今要肯定裏面的一些參數的值,例如,在 GMM 中,咱們就須要肯定 \pi_k\mu_k\Sigma_k 這些參數。 咱們的想法是,找到這樣一組參數,它所肯定的機率分佈生成這些給定的數據點的機率最大,而這個機率實際上就等於 \prod_{i=1}^N p(x_i) ,咱們把這個乘積稱做似然函數 (Likelihood Function)。一般單個點的機率都很小,許多很小的數字相乘起來在計算機裏很容易形成浮點數下溢,所以咱們一般會對其取對數,把乘積變成加和 \sum_{i=1}^N \log p(x_i),獲得 log-likelihood function 。接下來咱們只要將這個函數最大化(一般的作法是求導並令導數等於零,而後解方程),亦即找到這樣一組參數值,它讓似然函數取得最大值,咱們就認爲這是最合適的參數,這樣就完成了參數估計的過程。get

下面讓咱們來看一看 GMM 的 log-likelihood function :it

\displaystyle
\sum_{i=1}^N \log \left\{\sum_{k=1}^K \pi_k \mathcal{N}(x_i|\mu_k, \Sigma_k)\right\}

因爲在對數函數裏面又有加和,咱們無法直接用求導解方程的辦法直接求得最大值。爲了解決這個問題,咱們採起以前從 GMM 中隨機選點的辦法:分紅兩步,實際上也就相似於 K-means 的兩步。io

  1. 估計數據由每一個 Component 生成的機率(並非每一個 Component 被選中的機率):對於每一個數據 x_i 來講,它由第 k 個 Component 生成的機率爲\displaystyle
\gamma(i, k) = \frac{\pi_k \mathcal{N}(x_i|\mu_k, \Sigma_k)}{\sum_{j=1}^K \pi_j\mathcal{N}(x_i|\mu_j, \Sigma_j)}

    因爲式子裏的 \mu_k\Sigma_k 也是須要咱們估計的值,咱們採用迭代法,在計算 \gamma(i, k) 的時候咱們假定 \mu_k\Sigma_k 均已知,咱們將取上一次迭代所得的值(或者初始值)。function

  2. 估計每一個 Component 的參數:如今咱們假設上一步中獲得的 \gamma(i, k) 就是正確的「數據 x_i 由 Component k 生成的機率」,亦能夠當作該 Component 在生成這個數據上所作的貢獻,或者說,咱們能夠看做 x_i 這個值其中有 \gamma(i, k)x_i 這部分是由 Component k 所生成的。集中考慮全部的數據點,如今實際上能夠看做 Component 生成了 \gamma(1, k)x_1, \ldots, \gamma(N, k)x_N 這些點。因爲每一個 Component 都是一個標準的 Gaussian 分佈,能夠很容易分佈求出最大似然所對應的參數值:\displaystyle
\begin{aligned}
\mu_k & = \frac{1}{N_k}\sum_{i=1}^N\gamma(i, k)x_i \\
\Sigma_k & = \frac{1}{N_k}\sum_{i=1}^N\gamma(i,
k)(x_i-\mu_k)(x_i-\mu_k)^T
\end{aligned}

    其中 N_k = \sum_{i=1}^N \gamma(i, k) ,而且 \pi_k 也瓜熟蒂落地能夠估計爲 N_k/Nim

  3. 重複迭代前面兩步,直到似然函數的值收斂爲止。
相關文章
相關標籤/搜索