iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
AI & Data

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

【Day 10】分類(Classification)(上)

  • 找一個function,其輸入為 https://chart.googleapis.com/chart?cht=tx&chl=x,輸出為 https://chart.googleapis.com/chart?cht=tx&chl=x 屬於哪一個class。

範例應用

  • 找一個輸入是某一隻寶可夢,輸出是那隻寶可夢屬性的function。

如何把寶可夢當作數值輸入?

寶可夢有很多特性能夠數值化,例如:整體的強度、生命值、攻擊力、防禦力、特殊攻擊力、特殊攻擊力以及防禦力等等,而我們就能將這些數值組成一個vector來表示寶可夢。

如何做分類?

Classification as Regression?

假設我們只要輸出 https://chart.googleapis.com/chart?cht=tx&chl=x 屬於 class 1 或 class 2 ,那用Regression就可以將 class 1 當作 1,class 2 當作 -1 去訓練,訓練完模型在測試的時候,如果輸出的數值比較接近 1 就把它分類為 class 1,比較接近 -1 就把它分類為 class 2,即以 0 為分類標準。
然而這樣會有一個問題,就是當你有一些訓練資料讓模型輸出遠大於 1 的時候就會讓原本的模型產生很大的誤差,而導致模型會把模型進行調整,讓誤差不要這麼大,反而對classification來說不是一個好的function。

理想的做法

在function https://chart.googleapis.com/chart?cht=tx&chl=f(x) 裡面增加一個function https://chart.googleapis.com/chart?cht=tx&chl=g(x),如果輸出大於零就分類為 class 1,其他就分類為 class 2。Loss則可以定義成function https://chart.googleapis.com/chart?cht=tx&chl=f 在訓練資料上預測錯誤的次數。透過Perceptron, SVM等方法才找到最好的function,這些方法以後有機會會再介紹。

生成模型(Generative Model)

假設有兩個類別,裡面都有籃球跟綠球,從中拿出一顆球 https://chart.googleapis.com/chart?cht=tx&chl=x 出來但不知道是從哪個類別拿出來的,因此我們就必須去計算那顆球從兩個類別拿出來的機率分別是多少。
我們需要知道 class 1 和 class 2 抽一個 https://chart.googleapis.com/chart?cht=tx&chl=x 出來的機率 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1)%2C%20P(C_2),以及 class 1 和 class 2 抽出我們現在考慮的這個 https://chart.googleapis.com/chart?cht=tx&chl=x 的機率 https://chart.googleapis.com/chart?cht=tx&chl=P(x%7CC_1)%2C%20P(x%7CC_2)。有了這些數值我們就可以計算這個 https://chart.googleapis.com/chart?cht=tx&chl=x 屬於 class 1 的機率 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1%7Cx),就可以知道說 https://chart.googleapis.com/chart?cht=tx&chl=x 從哪個class拿出來的機率最大,機率最大的就是正確答案,而我們會希望從訓練資料裡把我們需要的四個機率的值估測出來。
生成模型(Generative Model) 可以生成一個 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=x 出現的機率,你就可以知道 https://chart.googleapis.com/chart?cht=tx&chl=x 的分佈,則可以用這個分佈來產生 https://chart.googleapis.com/chart?cht=tx&chl=x

事前機率(Prior Probability)

  • 計算 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1)%2C%20P(C_2)

假設 class 1 是水系的寶可夢,class 2 是一般系的寶可夢,ID < 400 的當作訓練資料,其餘當作測試資料,可以發現訓練資料裡有79隻是水系,61隻是一般系,因此即可算出 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1)%2C%20P(C_2)

Probability from Class

  • 計算 https://chart.googleapis.com/chart?cht=tx&chl=P(x%7CC_1)%2C%20P(x%7CC_2)
  • 例:從水系寶可夢裡挑一隻出來,它是海龜的機率是多少?

假設海龜不在你的訓練資料裡面,就必須拿前面提到的表示寶可夢的vector,也就是寶可夢的特徵值,去估測從水系寶可夢裡挑一隻出來,它是海龜的機率是多少,而訓練資料的79隻寶可夢可以想像成是從一個高斯分佈(Gaussian Distribution)取樣出來的。


參考資料

李宏毅老師 - ML Lecture 4


上一篇
【Day 9】梯度下降法(Gradient Descent) --- Tip 2, 3
下一篇
【Day 11】分類(Classification)(下)
系列文
30天搞懂機器學習是否搞錯了什麼30

尚未有邦友留言

立即登入留言