Table of Contents
機器學習自學筆記05: Classification | Probabilistic Generative Model
今日的課程來自於: https://youtu.be/CXgbekl66jc
參考筆記:https://github.com/Sakura-gh/ML-notes/blob/master/1_Introduction.md
Classification 概念描述
分類的目標就是要找到一個function,當我們將數值輸入後,輸出可以分類。以寶可夢為例,我們已經知道寶可夢有18種屬性,我們期望可以找到一個function,當我們將某一支寶可夢輸入後,可以知道他的屬性。
如何將寶可夢輸入呢? 需要將每個寶可夢數值化。
特性數值化:用一組數字來描述一隻寶可夢的特性。比方說它有多強(total strong)、它的生命值(HP)、它的攻擊力(Attack)、它的防禦力(Defense)、它的特殊攻擊力(Special Attack)、它的特殊攻擊的防禦力(Special defend)、它的速度(Speed)。所以我們可以將每個寶可夢用以上七種特性來描述。
Classification as Regression?
我們可以使用迴歸分析分類嗎?
假設我們要使用regression 來做classification,在training 時可以假設class 1 的輸出是1;class 2 的輸出是2;當我們使用testing時,regression 的輸出是一個數值,當他接近1 的時候分類為class 1 ,接近-1時分類為class 2
但是這樣做會發生什麼問題?
先講解左圖的例子,假設我們資料的分布如左圖,regression train 出來的model (綠線)可以完美的幫我們分類資料屬性(這是最好的情況)
但是若遇到右圖的例子,在右下角有一群data會影響到model,從右圖中可以看出綠色的線是最好的model 分界線。但是!!! 因為使用綠線的model時,會將右下角的資料做regressiong時output會>1 ,而這些大於1 的點對綠線的model 來說都是error !
所以使用這組資料所training 的model 會是紫色的model ,因為它會”減少” 右下角data所帶來的error
而我們看圖就知道綠色的model是最好的,但是我們無法保證每次資料的性質都在分界線的兩端。所以不建議使用regression 使用在 classification 上面
另外,若是遇到多元分類的問題,我們將class 1 當作 1 ;class 2 當作 2 ;class 3當作 3 。這樣的標籤會使regression 以為 class 1 與 class 2 比較相近,而class 1 和 class 3 比較遠,但是這些組別之間並沒有這些關係,所以用regression 沒有辦法得到好的結果。
Ideal Alternatives ( 從新定義loss function)
理想的方法是這樣: 我們要找的 function f(x) 裡面會有另一個 function g(x) ,當我們的input x輸入之後,如果 g(x) > 0 ,那 f(x)的輸出就是 class 1 ;反之,若是g(x) < 0 ,則 f(x)的輸出就是 class 2 。
有發現其實跟regression的方法很像,只是用了不同的套術嗎?
針對 regression 的loss function 來說,因為regression 的loss function 是用output 與”真值” 的平方和 作為標準的,為了解決這個問題,我們只需要從新定義一個loss function 即可!
可以看到上圖的loss function ,新的loss 將加總model 在所有training data 上次預測的錯誤次數,(δ=1,若training data 預測出來與”真值”不同時;反之為0)
然而這個方法沒有辦法微分,所以無法用gradient descent 的方法解決。當然可以用SVM、perceptron來解決,但是今天介紹用別的方法來解決。
Solution: Generative model (生成模型)
假設今天我們有兩個class ,class1 and class2 。若是我們要計算 x 屬於 C1 的機率(=P(C1|x)),那我們就要知道下面四個紅色圈起來的機率,分別是 P(
C1)、P(C2)、P(x|C1)、P(x|C2) 。
要如何知道這四個機率,我們從training data 來估測這四個機率,這個想法叫做generative model 。為甚麼叫做generative model 呢? 因為有這個model 的話,就可以拿它來generate 生成x ;換句話說,如果我們可以計算出每一個x的機率,就可以用這個distribution分布來生成x,sample x 出來。
而P(C1)、P(C2) 這兩個機率比較好算的 (這兩個機率稱為Prior)。
假設我們有140隻寶可夢做training data ,79隻為水系,另外61隻為一般系。那training data中,出現水系(class 1)的機率=P(C1)=79/140=0.56,出現一般系(class 2)的機率=P(C2)=61/140=0.44
那要怎麼得到 P(x|C1)、P(x|C2) ?
假設今天來了一隻新的海龜,但是先前的水系寶可夢中並沒有海龜,所以我挑出一隻海龜的機率為0 。
可以想像,水系的神奇寶貝是從某個機率分布出來的,假設這個分布為gaussioan distribution(高斯分布)。而從gaussian sample出海龜的機率不會等於 0。
Gaussian Distribution
下圖中為gaussian distribution,他的input 就是x ,它的 output 就是這一隻寶可夢, 輸入x 從這一個 distribution 裡面被sample 出來的機率。
這個機率的分布由兩個東西決定,分別是mean μ 和 variance Σ 。
不同的mean μ 和 variance Σ,可以決定機率分布的樣子。下面的圖有不同的mean μ,但有相同的variance Σ。
估測μ 和 Σ 的方式,就是用最大概似估計法(maximum likelihood)
要解出μ 和 Σ,就是假設這個gaussian可以生出所有79個點,而生出這79個點的機率就是每一點出現的機率相乘,下圖中最下方有likelihood 的函數。我們要找到他的解,就要找到這個likelihood 的最佳解,就是極大值。
所以對likelihood分別偏微,解出微分是0的點,就可以找到最終的估測值。
其實最佳的μ 和 Σ ,其實就是這組data 的期望值和變異數。
最後我們可以求得 μ¹、 Σ¹、 μ²、Σ² 。
有了μ¹、 Σ¹、 μ²、Σ² 這四個值,我們就可以帶入gaussian ,並且可以求得 P(C1)、P(C2)、P(x|C1)、P(x|C2)。
接下來我們只要輸入一個x, 如果 P(C1|x) > 0.5 ,我們就將他歸類在 水系神奇寶貝了 (class 1 )
Result
左上圖中,橫軸是defense ,縱軸是SP Defense,藍色的點是水系的寶可夢的分佈,紅色的點是一般系的寶可夢的分佈,對圖中的每一個點都計算出它是class 1的機率,這個機率預測用顏色來表示,如果某點在紅色區域,表示它是水系寶可夢的機率比較大;如果該點在其他顏色的區域,表示它是一般系寶可夢的機率較大。
因為我們做的是分類問題,因此令機率> 0.5的點為class1 ,機率<0.5的點為class 2 ,也就是右上⻆的圖中的紅色和藍色兩塊區域
再把testting data上得到的結果視化出來,即右下⻆的圖,發現分的不是太好,正確率才是47%
我們之前用的只是Defense和SP Defense這兩個參數,在二維空間上得到的效果不太好,但實際上一開始就提到了寶可夢總共是有6個features的,也許在二維空間上它們是重疊在一起的,但是在六維空間上看它們也許會分得很好,每一個寶可夢都是六維空間中的一個點,於是我們的μ是個6-dim的 vector, 則是Σ個6*6的matrix,發現得到的準確率也才64%
這個分類器表現得很糟糕,是否有辦法將它改進的更好?
Modifying Model
之前使用的Model是不常見的,你不會看到每一個gaussian都有自己的mean 和variance 。比較常見的做法是不同的class 可以使用同一個 covariance matrix
variance 和輸入的 feature size 的平方是成正比的。
所以當feature 的數量很大時,Σ 大小的增長是可以非常快的
在這種情況下,若是給不同的covariance matrix , 會導致model的參數太多;參數多會導致 model 的 variance 過大,因而出現 overfitting ,因此對不同的class 使用同一個 covariance matrix,可以有效減少參數
共用同一個covariance matrix,要怎麼選呢 ?
Σ 可以直接 使用原本 Σ¹ 和 Σ²的加權
可以看到使用同一個covariance matrix 之後,我們預測的boundary 是一條直線;這樣的model我們也可以稱之為linear model 。
考慮所有的feature,並共用相同的covariance matrix ,原本54%正確率提高為73% ,顯然是有分對東西。但是為什麼做到這樣子,我們很難分析,因為這是高維空間中發生的事情,我們很難知道boundary到底是怎麼切的,這就是machine learing 他fancy的地方,人沒有辦法知道怎麼做,但是machine 可以幫我們做出來。
Three steps of classification
現在來回顧一下classification的三個步驟,與machine learning 是一樣的
- define a function set (model)
這些required probability P(C) 和probability distribution P(x|C)就是model的參數,選擇不同的Probability distribution(比如不同的分佈函數,或者是不同參數的Gaussian distribution),就會得到不同的function,把這些不同參數的Gaussian distribution集合起來,就是一個model,如果不適用高斯函數而選擇其他分佈函數,又是一個新的model了
當這個posterior Probability P(C|x)>0.5 的話,就 output class 1,反之就為 class 2 - goodness of function
對於Gaussian distribution這個model來說,我們要評價的是決定這個高斯函數形狀的mean和variance 這兩個參數的好壞,而maximum likelihood L(μ,Σ)的輸出值,就評價了這組參數的好壞 - pick the best function
找到的那個最好的function,就是使L(μ,Σ)值最大的那组參數,實際上就是所有樣本的mean和variance
找到一個 probability distribution 他可以最大化產生data 的 likelihood
1 comment
整理的超赞!!!最近也在跟着李宏毅老师学习机器学习