iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
AI & Data

30天搞懂機器學習是否搞錯了什麼系列 第 11

【Day 11】分類(Classification)(下)

昨天提到了生成模型(Generative Model),要去計算事前機率(Prior Probability),還有從類別取樣出 https://chart.googleapis.com/chart?cht=tx&chl=x 的機率(Probability from Class)。今天就會從Probability from Class開始繼續介紹。

Probability from Class

高斯分佈(Gaussian Distribution)

可以想像成是一個function,輸入為一個vector https://chart.googleapis.com/chart?cht=tx&chl=x,輸出為 https://chart.googleapis.com/chart?cht=tx&chl=x 從分佈裡面被取樣出來的機率。而機率的分佈由 平均值 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu 以及 共變異數矩陣 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 決定。

  • 不同的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu 代表機率分佈最高點不同。

  • 不同的 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 代表機率分佈分散的程度不同。

假設我們從一個Gaussian裡面取樣出這79個點,並能透過這79個點估測出這個Gaussian的平均值 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu 以及 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma,那我們找一個新的點 https://chart.googleapis.com/chart?cht=tx&chl=x,帶入上圖中的公式就可以算出 https://chart.googleapis.com/chart?cht=tx&chl=x 從Gaussian裡面被取樣出來的機率,從下圖中也可以看到,如果這個 https://chart.googleapis.com/chart?cht=tx&chl=x 越接近 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu,它被取樣出來的機率會比較大。

如何找到 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma

Maximum Likelihood

每個Gaussian都有可能取樣出這79個點,但它們取樣出這79個點的可能性(Likelihood)是不同的。從圖中可以看到左邊的Gaussian可以取樣出這79個點的可能性是比較高的,右邊的Gaussian的可能性是比較低的。
如果給我們某一個Gaussian的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma,我們就可以算出那個Gaussian的Likelihood,也就是說給我們一個Gaussian的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma,我們就可以算這個Gaussian取樣出這79個點的機率。
式子可以寫成:https://chart.googleapis.com/chart?cht=tx&chl=L(%5Cmu%2C%20%5CSigma)%20%3D%20f_%7B%5Cmu%2C%20%5CSigma%7D(x%5E1)f_%7B%5Cmu%2C%20%5CSigma%7D(x%5E2)f_%7B%5Cmu%2C%20%5CSigma%7D(x%5E3)......f_%7B%5Cmu%2C%20%5CSigma%7D(x%5E%7B79%7D)

我們的目標是要找到一個Gaussian取樣出這79個點的Likelihood是最大的,也就是說我們要窮舉所有的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma,看哪個可以讓Likelihood最大。

https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E*:找 https://chart.googleapis.com/chart?cht=tx&chl=x 的平均值,或是對 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu 取微分,找微分是 0 的點解出來就是答案。
https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma%5E*:先算出 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E*,再對所有的 https://chart.googleapis.com/chart?cht=tx&chl=x%5En 都算 https://chart.googleapis.com/chart?cht=tx&chl=(x%5En%20-%20%5Cmu%5E*)%20(x%5En%20-%20%5Cmu%5E*)%5ET,或是對 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 做微分,找微分是 0 的點解出來就是答案。

而有了兩個 class 的 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%2C%20%5CSigma 我們就可以做分類的問題了。

Classification

  • 計算 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx),如果 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx)%20%3E%200.5https://chart.googleapis.com/chart?cht=tx&chl=x 就屬於 class 1,https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx)%20%3C%200.5https://chart.googleapis.com/chart?cht=tx&chl=x 就屬於 class 2。

改進

因為共變異數矩陣是跟輸入的feature size的平方成正比,所以如果把兩個不同的Gaussian都給不同的共變異數矩陣,你的模型的參數可能就會太多,參數多,變異數就大,那就會很容易導致Overfitting的情況發生。
那為了減少參數我們就可以給這兩個class的feature分佈的Gaussian同樣的共變異數矩陣,再去計算Lilelihood,而 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E1%2C%20%5Cmu%5E2 的計算方法跟前面提到的相同,https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 則是用 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E1%2C%20%5Cmu%5E2 算出來的 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma%5E1%2C%20%5CSigma%5E2 分別去乘上 https://chart.googleapis.com/chart?cht=tx&chl=x 的個數,再除以兩個class的個數總和,也就是加權平均。

從圖中可以發現,如果共用同一個共變異數矩陣,它的boundary就會是一條直線,這樣的模型我們也稱之它為線性模型(Linear Model)。

分類三步驟

之前提到機器學習就是三個步驟,那分類的機率模型也是三個步驟。

  1. 定義一個模型(model)

  2. 從模型裡挑出好的函式(function)

  3. 經由演算法找出最好的函式

機率分佈(Probability Distribution)

  • 如果是binary features的情況,我們可能可以使用伯努利分布(Bernoulli Distribution)。
  • 如果所有的feature都是獨立產生的,我們就是在用單純貝氏分類器(Naive Bayes Classifiers)。

事後機率(Posterior Probability)

將前面 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx) 的式子整理一下之後就會發現,它是一個Sigmoid function。
Sigmoid function在機器學習基本功(三) --- Regression裡面有介紹。

前面提到一般我們會假設共變異數矩陣是共用的,因此我們可以將 https://chart.googleapis.com/chart?cht=tx&chl=z 簡化如下圖所示。
即可將原本的式子寫成 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx)%20%3D%20%5Csigma(w%20%5Ccdot%20x%20%2B%20b),從這個式子就可以看出 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma_1%20%3D%20%5CSigma_2 的時候,你的 class 1 跟 class 2 的boundary會是linear。


參考資料

李宏毅老師 - ML Lecture 4


上一篇
【Day 10】分類(Classification)(上)
下一篇
【Day 12】邏輯迴歸(Logistic Regression)(上)
系列文
30天搞懂機器學習是否搞錯了什麼30

尚未有邦友留言

立即登入留言