retrival and clustering : week 4 GMM & EM 筆記

華盛頓大學 機器學習 筆記。算法

 

k-means的侷限性app

  k-means 是一種硬分類(hard assignment)方法,例如對於文檔分類問題,k-means會精確地指定某一文檔歸類到某一個主題,但不少時候硬分類並不能徹底描述這個文檔的性質,這個文檔的主題是混合的,這時候須要軟分類(soft assignment)模型。機器學習

  k-means 缺陷:(1)只關注聚類中心的表現。(2)聚類區域形狀必須爲對稱圓形/球形,軸平行。函數

  對於聚類區域大小不1、軸不平行、聚類空間重疊等狀況,k-means 缺陷顯著。
        
學習

 混合模型的優勢:spa

  1.軟分類(例如,主題 54%「世界新聞」,45% 「科學」, 1% 「體育」)3d

  2.關注聚類區域形狀而不僅是中心code

  3.每一個聚類的權重(weights)可學習blog

 

高斯混合模型(GMM)文檔

(1) 高斯函數描述聚類分佈

  高斯混合模型假定每一個聚類能夠用一個高斯分佈函數N(x|μ ,Σ)描述,如圖

        

  描述聚類的參數有三個, { π, μ , Σ },其中,π 爲聚類 的權重(weight),μ爲 聚類的平均值(mean),Σ 爲聚類的協方差(covariance.

  高斯混合模型機率分佈:

      

  如何理這個解機率分佈模型,以計算點xi屬於聚類k的機率爲例。

 

(2)如何計算xi 屬於聚類k 的機率

   貝葉斯公式

         

    假設從數據集中隨機抽取一個數據點,考慮如下幾種狀況:

 

        A  = 抽到的點屬於聚類k

        B  = 抽到點xi

        B|A = 已知抽取的點屬於聚類k 中, 抽到點xi

        A|B = 已知抽到點xi, 抽取的點屬於聚類k

 

     P(A|B)其實等價於」點xi屬於聚類k」的機率。

    接下來求P(A)、P(B)、P(B|A),經過貝葉斯公式可求P(A|B)。

    

  A  = 抽到的點屬於聚類k

  P(A):從數據集中隨機抽取一個點,剛好抽到聚類k中的點的機率。

      (其中,全部聚類權重之和爲1,即 ,m爲聚類數量)

   即

            

 

  B|A = 已知抽取的點屬於聚類k,中, 抽到點xi

    P(B|A):轉換爲從聚類k中隨機抽一個點,剛好抽到點xi的機率。

  GMM模型假設每一個聚類中數據點服從高斯分佈:

      

  即

      

 

     B  = 抽到點xi

   P(B):從數據集中隨機抽取一個點,剛好抽到點xi的機率。

  這種狀況下,抽到的點歸屬於哪一個/些聚類未知,考慮到:

     若是已知抽到的點屬於哪些聚類,這個機率能夠按照P(B|A)的公式算。

     從數據集中隨機抽點,抽到的點屬於某個聚類的機率,能夠按照P(A)的公式計算。

   使用用條件機率公式計算:

    

  這就是就是GMM模型的機率分佈模型。

 

   點xi屬於聚類k的機率,即後驗機率爲:

    

  即

   

 

(3)評估GMM模型優劣的方法——似然性

  首先明確隱變量:

  假設整個數據集是從符合這個GMM模型的大樣本中隨機抽取點構成的,每次抽取的數據記爲 xi(i = 1,2,…,N, 數據集中一共N個點),對於第i次抽取的點,此時xi是已知的,而 xi屬於哪一個聚類未知,以隱變量γ表示,其中

      

  γ爲隨機變量。則變量的徹底數據爲

     

  

  似然函數表示的是,在當前GMM模型的參數下,以上述方法造成的數據集,剛好構成了本來的數據集的機率。

  似然函數計算式:

      

  其中多維高斯分佈函數(維數爲dim):

    

  實際應用中經常使用對數似然函數:

    

 

EM算法

  EM算法expectation maximization, 指望最大化),計算GMM模型分兩步:

      1. E- step: 根據當前GMM模型的參數,計算(estimate)對數似然性指望值

      2. M-step: 求使似然性(likelihood)指望最大的新的模型參數

E-step:

   對數似然性表達式:

   

 

  求指望要先明確一件事,隨機變量是什麼?

        隱變量γ

  

  

隱變量的指望稱爲聚類k對xi的響應度(responsibility)。記爲

          

考慮到表示的意義是,xi是否屬於聚類k。所以的指望就是在當前模型參數下,xi屬於聚類k的機率,即

       

帶入原式得:

  

def log_sum_exp(Z): """ Compute log(\sum_i exp(Z_i)) for some array Z.""" return np.max(Z) + np.log(np.sum(np.exp(Z - np.max(Z)))) def loglikelihood(data, weights, means, covs): """ Compute the loglikelihood of the data for a Gaussian mixture model. """ num_clusters = len(means) num_dim = len(data[0]) num_data = len(data) resp = compute_responsibilities(data, weights, means, covs) log_likelihood = 0 for k in range(num_clusters): Z = np.zeros(num_clusters) for i in range(num_data): # Compute (x-mu)^T * Sigma^{-1} * (x-mu) delta = np.array(data[i]) - means[k] exponent_term = np.dot(delta.T, np.dot(np.linalg.inv(covs[k]), delta)) Z[k] += np.log(weights[k]) Z[k] -= 1/2. * (num_dim * np.log(2*np.pi) + np.log(np.linalg.det(covs[k])) + exponent_term) Z[k] = resp[i][k]* Z[k] log_likelihood += log_sum_exp(Z) return log_likelihood

 

 M-step:

 求使似然性指望最大的新的模型參數。似然性指望的公式:

  

用這個式子分別對 { π, μ , Σ }這幾個參數求偏導數,並令偏導數爲0,便可獲得新的模型參數。

聚類k的新參數計算:

         

EM是一種 座標上升(coordinate-ascent)算法,屢次迭代直到對數似然函數的值再也不有明顯變化,獲得局部最優解。

 

def EM(data, init_means, init_covariances, init_weights, maxiter=1000, thresh=1e-4): # Initialize  means = init_means[:] covariances = init_covariances[:] weights = init_weights[:] num_data = len(data) num_dim = len(data[0]) num_clusters = len(means) resp = np.zeros((num_data, num_clusters)) log_likelihood = loglikelihood(data, weights, means, covariances) ll_trace = [log_likelihood] for it in range(maxiter): # E-step: resp = compute_responsibilities(data, weights, means, covariances) # M-step: # 更新 n(k),weight(k),mean(k),covariances(k) counts = compute_counts(resp) weights = compute_weights(counts) means = compute_means(data, resp, counts) covariances = compute_covariances(data, resp, counts, means) # 計算這次迭代以後的log likelihood ll_latest = loglikelihood(data, weights, means, covariances) ll_trace.append(ll_latest) # 收斂? if (ll_latest - log_likelihood) < thresh and ll_latest > -np.inf: break log_likelihood = ll_latest model = {'weights': weights, 'means': means, 'covs': covariances, 'loglik': ll_trace, 'resp': resp} return model
相關文章
相關標籤/搜索