李宏毅 机器学习 2016 秋:5、Classification:Probabilistic Generative Model
文章目錄
- 五、Classification:Probabilistic Generative Model
五、Classification:Probabilistic Generative Model
接下來(lái)我們要來(lái)進(jìn)入新的主題,我們要來(lái)講分類這件事情,在分類這件事情呢,我們要找的是一個(gè) function,它的 input 是一個(gè) object x x x,它的 output 是這個(gè) object 屬于哪一個(gè) class,屬于 n n n 個(gè) class 的哪一個(gè),那這樣的 task 有很多的 application,信手拈來(lái)就一大堆,比如說(shuō),在金融上,他們可以用 classification 的 model,來(lái)決定要不要貸款給某一個(gè)人,你就找一個(gè) function,它的 input 是某一個(gè)人的 income,他的 saving、工作啊、他的年紀(jì)啊,還有他過(guò)去 financial 的 record,他過(guò)去有沒(méi)有欠債啊,等等,那 output 就是要借錢給他,或是不借錢給他,這是 binary classification 的 problem, 也就是 accept 或是 refuse,那或者是拿來(lái)做醫(yī)療的診斷,比如說(shuō),input 就是某一個(gè)人的癥狀,還有他的年紀(jì)、性別,過(guò)去就醫(yī)的歷史啊,等等,或者是來(lái)做,手寫的是數(shù)字、文字的辨識(shí),那 output 就是,他生的是哪一種病,自動(dòng)來(lái)做醫(yī)療的診斷,比如說(shuō),你就手寫一個(gè)字給機(jī)器看,看到這張圖,這是 “金” 這樣子,output 就是這個(gè)字、這個(gè) image,它是屬于哪一個(gè) class,如果你是做中文的手寫辨識(shí)的話,那中文有至少 8000 個(gè) character,那就是一個(gè) 8000 個(gè) class 的 classification,你的 model 要從這 8000 個(gè) class 里面,選一個(gè) class 當(dāng)作 output,或者是做人臉辨識(shí),input 一個(gè)人臉,然后告訴他說(shuō),這個(gè)人臉是誰(shuí)的,好,那我們要用的是怎么樣的 Example Application 呢?
其實(shí)這個(gè)也是寶可夢(mèng)的例子啦,你可能以為說(shuō),我只有前面 predict CP 值那里,其實(shí),我還有很多其他的例子這樣,好,我又做了一些有關(guān)寶可夢(mèng)的研究,我這個(gè)研究是這樣子的,我們知道說(shuō)寶可夢(mèng)有不同的屬性,有幾種呢?有 18 種屬性,包括水、火、電啊,還有草、冰…等等,總共有 18 種屬性,到第六代為止,總共有 18 種屬性,我們現(xiàn)在要做的是一個(gè)分類的問(wèn)題,這個(gè)分類的問(wèn)題就是,要找一個(gè) function,這個(gè) function 的 input 就是某一只寶可夢(mèng),然后,它的 output 就是要告訴你說(shuō),這一只寶可夢(mèng),它是屬于哪一種 type,比如說(shuō),input 給它一只皮卡丘,它 output 就是雷,input 給它一個(gè)杰尼龜 ,它 output 就是水,input 給它一個(gè)妙蛙種子,output 就是草,所以是一個(gè) classification 的問(wèn)題,那要怎么樣做這個(gè)問(wèn)題呢?
你現(xiàn)在的第一個(gè)問(wèn)題,就是怎么把一只寶可夢(mèng)當(dāng)作,function 的 input,你要把一個(gè)東西當(dāng)作 function 的 input,它得數(shù)值化,你要用數(shù)字來(lái)表示一只寶可夢(mèng), 你才能夠把它放到一個(gè) function 里面,那我們要怎么把一只寶可夢(mèng)用數(shù)字來(lái)表示呢?
一只寶可夢(mèng),其實(shí)它有很多的特性,這些特性是可以數(shù)值化的,比如說(shuō),它整體的強(qiáng)度,我先說(shuō)一下,這并不是那個(gè) Pokemon go 的那個(gè)東西,這個(gè)是那個(gè) Pokemon 的電玩,你聽(tīng)不懂我講這個(gè)就算了,就假設(shè)沒(méi)聽(tīng)到這句話,那一只寶可夢(mèng),它其實(shí)可以用一組數(shù)字來(lái)描述它的特性,這組數(shù)字代表什么呢?
比如說(shuō),這個(gè)寶可夢(mèng),它 total 的 strong,就是它有多強(qiáng)這樣子,你可以用一組數(shù)字來(lái)表示它,它的生命值,你可以用數(shù)字來(lái)表示它,它的攻擊力,你可以用數(shù)字來(lái)表示它,它的防御力,你可以用數(shù)字來(lái)表示它,它的特殊攻擊力,就是它用特殊攻擊的時(shí)候,這我也不知道怎么解釋, 反正就是另外一個(gè)特殊攻擊的攻擊力,特殊攻擊的防御力,還有它的速度,速度可以決定說(shuō),就是兩只寶可夢(mèng)相遇的時(shí)候,誰(shuí)可以先攻擊,比如說(shuō),皮卡丘,它整體強(qiáng)的程度是 320,它 HP 是 35,攻擊力是 55,防御力是40,特殊攻擊力是 50,然后,它的特殊防御力是 50,速度是 90,所以一只皮卡丘,我們就可以用一個(gè) vector 來(lái)描述它,這個(gè) vector 里面總共有 7 個(gè)數(shù)值,我們現(xiàn)在要問(wèn)的問(wèn)題就是,我們能不能把 7 個(gè)數(shù)字,輸進(jìn)一個(gè) function,這個(gè) function 就告訴我們說(shuō),它的 output 是哪一種種類的寶可夢(mèng),那你可能會(huì)問(wèn)這樣的問(wèn)題,這件事情的重要性,到底在哪里?
這件事情,是非常重要的,因?yàn)楫?dāng)兩只寶可夢(mèng)相遇,在決斗的時(shí)候,他們之間是有屬性相克的關(guān)系,這個(gè)是 18 × 18 18 \times 18 18×18 的屬性相克表,因?yàn)?#xff0c;你知道說(shuō),總共有 18 種 type,所以是 18 × 18 18 \times 18 18×18 的屬性相克表,左邊代表這個(gè)是攻擊方,上面表示是防御方,所以,格斗系遇到一般的時(shí)候,他的攻擊力就乘 2,這樣,你看得懂這個(gè)圖了嗎?
所以,這個(gè)是很重要的,那你可能會(huì)問(wèn)說(shuō),這個(gè)寶可夢(mèng)屬性,不是寶可夢(mèng)圖鑒上都有了嗎?綠色寶可夢(mèng)屬性,有什么意義呢?這件事情是有很大的意義的,因?yàn)?#xff0c;你有可能在決斗中的時(shí)候,遇到,對(duì)方出的是圖鑒上沒(méi)有的,你沒(méi)有見(jiàn)過(guò)的寶可夢(mèng),如果你現(xiàn)在有這個(gè)預(yù)測(cè)的 model 的話,你就可以預(yù)測(cè)說(shuō),它出的寶可夢(mèng)是哪一種屬性的,你就可以用正確的屬性來(lái)對(duì)付它,所以,這個(gè)是有非常廣泛地運(yùn)用的,而且我發(fā)現(xiàn)說(shuō),寶可夢(mèng)圖鑒,其實(shí)是有影像辨識(shí)的功能,它影像辨識(shí)的功能很強(qiáng),照一張圖,它就可以告訴你說(shuō),它是哪一種寶可夢(mèng),我們應(yīng)該要把這個(gè) prediction 的 model 加到寶可夢(mèng)的圖鑒里面,它就可以幫我們 predict 新的寶可夢(mèng)。
那,怎么完成這個(gè)任務(wù),首先,我們要先收集 data,比如說(shuō),你就說(shuō),我把寶可夢(mèng)編號(hào) 400 以下的, 當(dāng)作 training data,把編號(hào) 400 以上的,當(dāng)作 testing data,你就假設(shè)說(shuō),因?yàn)樗膶毧蓧?mèng)其實(shí)是越來(lái)越多的,我記得我小時(shí)候只有 150 只,后來(lái)發(fā)現(xiàn),越來(lái)越多寶可夢(mèng),現(xiàn)在已經(jīng)有 800 只了,所以寶可夢(mèng)是不斷增加的,所以編號(hào)比較前面的,是比較早發(fā)現(xiàn)的那些寶可夢(mèng),所以,模擬說(shuō),我們已經(jīng)發(fā)現(xiàn)那些寶可夢(mèng)的情況下,如果看到新的寶可夢(mèng)的時(shí)候,我們能不能夠預(yù)測(cè)說(shuō),它是屬于哪一種屬性的。
所以,你要收集 data,比如說(shuō)我們的 data 就是一些 pair,告訴我們說(shuō) function 的 input, output 是什么,比如說(shuō),input 皮卡丘,就要 output 電,input 杰尼龜,就要 output 水,input 妙蛙種子,就要 output 草,那怎么解這個(gè) classification 的問(wèn)題?
有人會(huì)這么想,假設(shè)有人沒(méi)有學(xué)過(guò) classification,他學(xué)過(guò) Regression,他就說(shuō),Classification 就當(dāng)作 Regression 的問(wèn)題來(lái)硬解,怎么硬解呢?我們用 binary 的 classification 來(lái)當(dāng)作例子,假設(shè)我們現(xiàn)在只要 output: input 的 x x x 屬于 class 1 或 class 2,那你就把他當(dāng)作一個(gè) Regression 的問(wèn)題,task 1 就代表說(shuō)它的 target,也就是 y ^ \hat y y^? 是 1,task 2 就代表說(shuō),它的 target 是 ? 1 -1 ?1,就這樣,你就當(dāng)作 Regression 的 problem, 一直 train 下去,然后,train 完這個(gè) model 以后呢,在 testing 的時(shí)候,因?yàn)?Regression 的 output 不會(huì)正好是 0 或是 1 啊,它是一個(gè) number,它是一個(gè)數(shù)值,如果這個(gè)數(shù)值比較接近 1 的話,就說(shuō)是 class 1,如果這個(gè)數(shù)值比較接近 ? 1 -1 ?1 的話,就說(shuō)是 class 2,所以,你可以想成說(shuō),現(xiàn)在就是以 0 為分界,如果你的 Regression model output 是大于 0 的話,就比較接近 1,你的 model 就會(huì)說(shuō)是 class 1,如果小于 0 的話,就比較接近 -1, 所以 model 會(huì)說(shuō)是 class 2,如果你這么做的話,會(huì)遇到什么樣的問(wèn)題呢?
你會(huì)遇到這樣的問(wèn)題,假設(shè)說(shuō),我們現(xiàn)在的 model,input 和 output 的關(guān)系, y = b + w 1 x 1 + w 2 x 2 y = b + w_1x_1 + w_2x_2 y=b+w1?x1?+w2?x2?,所以,input 這兩個(gè) feature,也就是 x 1 x_1 x1? 跟 x 2 x_2 x2?,我們現(xiàn)在有兩個(gè) class,紅色是 class 1、藍(lán)色是 class 2,那如果你用 Regression 來(lái)想的話,藍(lán)色的那些 object,input 到這個(gè) Regression 的 model,我們都希望它越接近 1 越好,紅色這些東西,input 到 Regression 的 model,我們都希望它越接近 -1 越好,這件事,可能是做得到的,如果你把這些 data,真的找出這個(gè) b , w 1 , w 2 b, w_1, w_2 b,w1?,w2? 的話,那你會(huì)發(fā)現(xiàn)說(shuō)呢, b + w 1 x 1 + w 2 x 2 b + w_1x_1 + w_2x_2 b+w1?x1?+w2?x2? 這個(gè)式子等于 0 的線,是綠色這條,也就是 class 1 和 class 2 的分界點(diǎn),這看起來(lái)蠻好的,但是,你可能會(huì)遇到這樣的問(wèn)題,假設(shè),你今天 class 1 的分布不是這樣子,假設(shè)你 class 1 的分布是右邊這樣子,你就麻煩了,為什么?
因?yàn)?#xff0c;如果你用綠色的這條線,所代表的 model 的話,注意一下,這個(gè)是二維的,綠色這條線,只是代表說(shuō)這個(gè) model 的值是 0,就是這個(gè) y y y 的值是 0,你的 Regression 的 output 是 0,左上角這邊,代表這個(gè) Regression 的 output 是小于 0,右下角這邊,代表這個(gè) Regression 的 output 是大于 0,那綠色這條線,會(huì)有什么問(wèn)題呢?
綠色這條線的問(wèn)題就是,左上角 < 0,右下角 > 0,越偏右下,它的值就越大,所以,如果今天是考慮右下角這些點(diǎn)的話,它用這個(gè)綠色的 model,它做 Regression 的時(shí)候,它的 output 可能會(huì)是遠(yuǎn)大于 1 的,但是,如果你用 Regression 的話,你會(huì)希望,藍(lán)色的點(diǎn)都越接近 1 越好,太大也不好,它要越接近 1 越好,太小不行、太大也不行,所以變成說(shuō),這些遠(yuǎn)大于 1 的點(diǎn),它其實(shí)對(duì) Regression 來(lái)說(shuō),是 error,是錯(cuò)的,這些點(diǎn)是不好的,所以,你今天如果拿這樣兩群藍(lán)色的點(diǎn)跟紅色的點(diǎn)去做 Regression 的時(shí)候,你得到的線,不會(huì)是綠色這條,雖然綠色這條,你用直覺(jué)看、你用眼睛一看就會(huì)知道說(shuō),它是一個(gè)比較好的 boundary,但是,如果你用 Regression 做下去的話,不會(huì)是綠色這條,它會(huì)是紫色這條,因?yàn)?#xff0c;它會(huì)覺(jué)得說(shuō),我把綠色這條線,往右偏一點(diǎn),這樣的好處就是,這邊這些藍(lán)色的點(diǎn),它的值就沒(méi)有那么大,它的值就會(huì)壓小,就讓他們,比較接近 1。
結(jié)果,這樣子的 function 反而對(duì) Regression 來(lái)說(shuō),是一個(gè)比較好的 function,也就是說(shuō),Regression 那個(gè)定義 function 好壞的方式,就 classification 來(lái)說(shuō),不適用,今天這個(gè) problem,對(duì) Regression 來(lái)說(shuō),紫色的,是一個(gè)好的 function,但是,顯然對(duì) classification 來(lái)說(shuō), 綠色的才是一個(gè)好的 function,但是,如果你當(dāng)作 Regression 的 problem 來(lái)做,套用到 Regression,一樣的作法的時(shí)候,你得到的結(jié)果會(huì)是不好的,因?yàn)?Regression 對(duì) model 好壞的定義, 是不適合用在這個(gè)地方的,所以,如果你用 Regression 的話,你的 Regression model 它會(huì)懲罰那些,太正確、那些 output 值太大的那些點(diǎn),這樣,反而你得到的結(jié)果是不好的。
那,還有另外一個(gè)問(wèn)題,其實(shí),這種硬把 Classification 當(dāng)作 Regression 來(lái)做,我還看過(guò)有人會(huì)真的這么做,不果我勸你不要這么做,比如說(shuō),你今天有 Multiple class 的話,那你可能說(shuō),我把 class 1 當(dāng)作 target 是 1,class 2 當(dāng)作 target 是 2,class 3 當(dāng)作 target 是 3,這樣子做事會(huì)有問(wèn)題的,因?yàn)楫?dāng)你這樣子做的時(shí)候,你就假設(shè)說(shuō),class 3 和 class 2 是比較近的,它們有某種關(guān)系,class 2 和 class 1 是比較近的,它們有某種關(guān)系,但是,實(shí)際上,如果這種關(guān)系不存在的話,class 1, class 2, class 3 他們中間并沒(méi)有某種特殊的 relation,并沒(méi)有誰(shuí)應(yīng)該跟誰(shuí)比較有關(guān)系的話,你這樣子把它當(dāng)作一個(gè) Regression 的問(wèn)題來(lái)處理,你就沒(méi)有辦法得到一個(gè)好的結(jié)果,那我們這邊,應(yīng)該要怎么做呢?
理想上的做法,是這個(gè)樣子,找一個(gè) function,這個(gè) function 里面呢,這在做 Regression 的時(shí)候,它的 output 是 real number,對(duì)不對(duì)?但是在 classification 的時(shí)候,它的 output 是 discrete,它是某一個(gè) class,它是 discrete,那我要想辦法讓 model 做到這件事情,你當(dāng)然可以有不同的想法,那一個(gè)可能的想法是,假如是二元分類的問(wèn)題,是 binary classification 的話,我就說(shuō),我們要找的 function f f f 里面,內(nèi)建另外一個(gè) function g g g,希望它是自動(dòng),當(dāng)然我們的 g g g 也是根據(jù) training data 被找出來(lái)的,如果 g g g 代進(jìn) x x x, x x x 代進(jìn)去的值大于 0 的話,那就說(shuō)是 class 1,否則呢,就說(shuō)是 class 2,那在 training 的時(shí)候,我們的 loss 應(yīng)該怎么定義才好呢?
我們的 loss 應(yīng)該定義成,如果我選了某一個(gè) function f f f,它在我們的 training data 上面,predict 錯(cuò)誤的次數(shù),我們當(dāng)然希望說(shuō),我們找出來(lái)的 function,它在 data 上的錯(cuò)誤次數(shù)越小,代表它的 loss 越小,你就可以把這個(gè)式子寫成這樣,summation over 所有的 training example, δ ( f ( x n ) ≠ ( y ^ ) n ) \delta(f(x^n) ≠ (\hat y)^n) δ(f(xn)?=(y^?)n),就是如果 f ( x n ) f(x^n) f(xn) 的 output 跟 正確答案 ( y ^ ) n (\hat y)^n (y^?)n 不一樣的話,這個(gè) δ \delta δ 就是 1,否則就是 0,如果你把它全部 sum 起來(lái)的話,就是你用這個(gè) function f f f,在 training data 上面,它會(huì)分類錯(cuò)誤的次數(shù),那當(dāng)然希望這個(gè)值,越小越好,但是,如果要你解這個(gè) function,你現(xiàn)在八成不會(huì),因?yàn)?#xff0c;我們學(xué)過(guò)的是 Gradient Descent,你可能會(huì)用 Gradient Descent 解,但是,這個(gè)沒(méi)辦法微分啊,不知道怎么做。其實(shí),這個(gè)是有方法,比如說(shuō),Perceptron 就是一個(gè)方法,SVM 就是一個(gè)方法,那我們今天先不講這個(gè)方法,我們今天先來(lái)講另外一個(gè) solution。這個(gè) solution,我們先用機(jī)率的觀點(diǎn)來(lái)看待它,之后我們會(huì)說(shuō),這樣的 solution,也是跟 machine learning 的 3 個(gè) step,其實(shí)是一樣的。
我們先這樣看,就是有兩個(gè)盒子,盒子一里面有藍(lán)球和綠球,盒子二里面也有藍(lán)球跟綠球,假設(shè)我不告訴你說(shuō),我從哪一個(gè)盒子里面, 挑一顆球出來(lái),但是,我告訴你說(shuō),我從這兩個(gè)盒子的某一個(gè)盒子里面,隨機(jī)抽取一顆球出來(lái),它是藍(lán)色的,那這顆藍(lán)色的球,它從盒子 1,跟從盒子 2 抽出來(lái)的機(jī)率,分別是多少?
假如說(shuō),你從盒子 1 里面,抽一顆球的機(jī)率是 2/3,你從盒子 2 里面,抽一顆球的機(jī)率是 1/3,再告訴我說(shuō),在盒子 1 里面,藍(lán)球占 4/5,綠球占 1/5,盒子 2 里面,藍(lán)球占 2/5,綠球占 3/5,那你就可以輕易計(jì)算說(shuō),如果我今天得到一顆藍(lán)球,他從盒子 1 里面,抽出來(lái)的機(jī)率,這個(gè)機(jī)率就是 P ( B 1 ∣ Blue ) P(B_1|\text{Blue}) P(B1?∣Blue),這樣,那這個(gè)跟分類,有什么關(guān)系呢?
如果我們把盒子換成分類的話,把盒子 1 跟盒子 2,換成類別 1 跟類別 2,這個(gè)時(shí)候呢,給我一個(gè) x x x,就是,我們要分類的那個(gè)對(duì)象,比如說(shuō),今天我們的例子就是,分類一只寶可夢(mèng),給我一只寶可夢(mèng),他從某一個(gè) class 里面,sample 出來(lái)的機(jī)率是多少呢?那我們需要知到哪些值?
我們需要知道 我從 class 1 里面,抽一個(gè) x x x 出來(lái)的機(jī)率,我們要知道從 class 2 里面,抽一個(gè) x x x 出來(lái)的機(jī)率,我們要知道說(shuō),從 class 1 里面,抽出我們現(xiàn)在考慮的這個(gè) x x x 的機(jī)率,我們要知道從這個(gè) class 2 里面,抽出我現(xiàn)在考慮的這個(gè) x x x 的機(jī)率,如果有這些,當(dāng)給我們一個(gè) x x x 的時(shí)候,有了這 4 個(gè)數(shù)值,我們就可以計(jì)算這個(gè) x x x 是屬于 C 1 C_1 C1? 的機(jī)率,怎么算呢?
x x x 屬于 C 1 C_1 C1? 的機(jī)率,就是 case 1 本身的機(jī)率,乘上 case 1 sample 一個(gè) object 出來(lái),是 x x x 的機(jī)率,再除掉 case 1 本身的機(jī)率,乘上 case 1 sample 一個(gè) object 出來(lái),是 x x x 的機(jī)率,加上 case 2 本身的機(jī)率,乘上從 case 2 里面 sample 出一個(gè) object ,是 x x x 的機(jī)率,所以,我們現(xiàn)在的問(wèn)題就是,如果我們知道這個(gè)機(jī)率的話,問(wèn)題就解決了,因?yàn)榻o我一個(gè)寶可夢(mèng) x x x,我就可以看說(shuō),它從哪一個(gè) case 來(lái)的機(jī)率最大,那機(jī)率最大那個(gè) case,就是正確答案,那現(xiàn)在的問(wèn)題是,我們?nèi)绻氵@個(gè)值,那我們就要算這 4 個(gè)值,假設(shè)我們是考慮一個(gè)二元分類問(wèn)題的話,那這 4 個(gè)值怎么來(lái)呢?
我們就希望從我們的 training data,去把這些值估測(cè)出來(lái),那這一整套想法,叫做 Generative model,為什么它叫做 Generative model 呢?因?yàn)橛羞@個(gè) model 的話,你可以拿它來(lái) generate 一個(gè) x x x,什么意思呢?你可以計(jì)算,某一個(gè) x x x 出現(xiàn)的機(jī)率,如果你可以計(jì)算每一個(gè) x x x 出現(xiàn)的機(jī)率,你就知道 x x x 的 distribution,你就可以用這個(gè) distribution 來(lái)產(chǎn)生 x x x、sample x x x 出來(lái),這一個(gè)機(jī)率是什么呢?
這個(gè)機(jī)率很簡(jiǎn)單,它就是你從 C 1 C_1 C1? 里面,挑一個(gè) x x x 出來(lái)的機(jī)率,乘上 C 1 C_1 C1? 挑出 x x x 的機(jī)率,加上你從 case 2 里面,挑一個(gè) x x x 的機(jī)率,乘上 case 2 產(chǎn)生 x x x 的機(jī)率,你有這些機(jī)率, 你就可以算某一個(gè) x x x 出現(xiàn)的機(jī)率,你就可以自己產(chǎn)生 x x x,所以,這個(gè)東西,叫做 Generative model。
我們先來(lái)算一下 P ( C 1 ) P(C_1) P(C1?) 跟 P ( C 2 ) P(C_2) P(C2?) 它出現(xiàn)的機(jī)率,那這個(gè)機(jī)率呢,叫做 Prior,他們呢,是比較好算的,假設(shè)我們今天考慮的這兩個(gè) class 呢,分別是水系跟一般系,class 1 就是指水系的神奇寶貝,class 2 就是指一般系的神奇寶貝,另外 16 只寶可夢(mèng),我們就無(wú)視它,先考慮一個(gè)二元分類的問(wèn)題,那我們現(xiàn)在呢,把編號(hào) ID,在圖鑒里面編號(hào) < 400 的,水系的和一般系的,就當(dāng)作是 training data,剩下的當(dāng)作是 testing data,如果你想要做的更嚴(yán)謹(jǐn)一點(diǎn)的話,你可以再把 training data 里面切一份 validation data 出來(lái),好,那 training data 里面呢,總共有 79 只是水系的,總共有 61 只一般系,你可能會(huì)問(wèn)說(shuō),為什么選水系跟一般系當(dāng)作二元分類問(wèn)題,因?yàn)槲移鋵?shí)統(tǒng)計(jì)了一下 18 種寶可夢(mèng),每個(gè)種類的數(shù)目,水系跟一般系是最多的,所以,我們就先選水系跟一般系,不過(guò),我試了一下,如果你要把 18 種都分類正確,好像是做不太出來(lái)的,你就先考慮,分兩個(gè) class 就好。
如果我們現(xiàn)在知道說(shuō),training data 里面,那從這個(gè)第一類里面,從 class 1 里面,sample 出一只寶可夢(mèng)的機(jī)率是多少呢,是不是就是 79 / ( 79 + 61 ) 79 / (79+61) 79/(79+61),算出來(lái)是 0.56,那從 class 2,sample 出一只寶可夢(mèng)的機(jī)率,就是 61 / ( 79 + 61 ) 61 / (79+61) 61/(79+61),就是 0.44,這個(gè)是比較容易、比較簡(jiǎn)單可以理解的。
好,那再來(lái)我們的問(wèn)題是這樣子,怎么計(jì)算說(shuō),如果給我某一個(gè) class,某一只寶可夢(mèng),是從這個(gè) class sample 出來(lái)的機(jī)率,比如說(shuō),如果給你一個(gè)海龜,我也不知道這個(gè)海龜應(yīng)該叫什么名字,那從水系的神奇寶貝里面,挑一只神奇寶貝出來(lái),它是海龜?shù)臋C(jī)率,到底應(yīng)該有多大呢?
那我們現(xiàn)在的 training data 是長(zhǎng)這個(gè)樣子,屬于水系的神奇寶貝有 79 只,所以有杰尼龜、可達(dá)鴨、蚊香蝌蚪之類的,這只海龜它不在這 79 只里面,那我到底要怎么算說(shuō),從水系的神奇寶貝里面挑一只出來(lái),是海龜?shù)臋C(jī)率呢,你可能會(huì)想說(shuō),這 79 只神奇寶貝又沒(méi)海龜,所以挑一只出來(lái),是海龜?shù)臋C(jī)率根本是 0 啊,可是這海龜是水系的,我一看它的臉,我就知道它是水系的 XD,那它就是水系的,所以,你說(shuō),它從水系的里面挑出來(lái)是 0 也不對(duì)啊,所以怎么辦?
首先就是,每一只寶可夢(mèng),我們剛才講過(guò)說(shuō),它都用一個(gè)向量來(lái)描述,這個(gè)向量里面的值,就是它的各種的特征值,所以,這個(gè) vector,我們又稱之為一個(gè) feature,所以,每一個(gè)寶可夢(mèng),都是用一堆 feature 來(lái)描述它。
然后呢,我們就真的把那些水系的寶可夢(mèng),它們的防御力和特殊防御力畫(huà)出來(lái),其實(shí),每一只寶可夢(mèng)有 7 個(gè)不同的數(shù)值啊,不過(guò) 7 個(gè)沒(méi)辦法畫(huà),我就先畫(huà)防御力跟特殊防御力就好,值得強(qiáng)調(diào)的是,這邊的是真正的 data 這樣,如果你想要下載完整的寶可夢(mèng)的 data 的話,下載鏈接在這里,你是可以載到完整的 data,那我們就把 79 只寶可夢(mèng),它的防御力跟特殊防御力,都先畫(huà)在這張圖上,所以在這二維的平面上,每一個(gè)點(diǎn),就代表了一只寶可夢(mèng),比如說(shuō),這個(gè)點(diǎn)是可達(dá)鴨,它的防御力是 48,特殊防御力是 50,這個(gè)點(diǎn)是杰尼龜,它的防御力是 65,特殊防御力是 64,可是,現(xiàn)在的問(wèn)就是,如果給我們一個(gè)新的點(diǎn),這個(gè)點(diǎn)是代表一只沒(méi)有在我們的 training data 里面的寶可夢(mèng),是我們沒(méi)有看過(guò)的寶可夢(mèng),比如這只海龜,它的防御力是 103,特殊防御力是 45,它的位置大概在這個(gè)地方,從水系里面,挑到這只神奇寶貝,它是海龜?shù)臋C(jī)率到底應(yīng)該是多少,那你不可以說(shuō)它是 0 ,你不能說(shuō),這個(gè) training data 里面從來(lái)沒(méi)有出現(xiàn)這只海龜,所以它的機(jī)率就是 0,這樣顯然是不對(duì)的,你要想個(gè)辦法估測(cè)說(shuō),從這些我們已經(jīng)有的神奇寶貝里面,估測(cè)說(shuō),如果從水系的神奇寶貝里面,挑一只出來(lái),它是這個(gè)海龜?shù)臋C(jī)率到底有多少?好,那怎么辦呢?,你可以想像說(shuō),這 79 只神奇寶貝,其實(shí)只是冰山的一角,就是水系的神奇寶貝,是從一個(gè)機(jī)率的分布里面,水系神奇寶貝它的防御力跟特殊防御力,是從一個(gè) Gaussian 的 distribution 里面,sample 出來(lái)的,我們只是 sample 了 79 個(gè)點(diǎn)以后,得到的分布長(zhǎng)這個(gè)樣子,但是,從 Gaussian 的 distribution 里面,sample 出這個(gè)點(diǎn)的機(jī)率不是 0,我們假設(shè)說(shuō),這 79 個(gè)點(diǎn)是從一個(gè) Gaussian 的 distribution 里面 sample 出來(lái)的,再來(lái),我們要做的事情就是,如果給我這 79 個(gè)點(diǎn),我們?cè)趺凑业侥莻€(gè) Gaussian 的 distribution,那我這邊還做了幾頁(yè)投影片要說(shuō) Gaussian distribution。
假設(shè)你不知道 Gaussian distribution 是什么的話,你就想成它是一個(gè) function,這個(gè) function 的 input 就是一個(gè) vector x x x,在這邊呢,代表某一只寶可夢(mèng)的數(shù)值,它的 output 就是這一只寶可夢(mèng),這一個(gè) x x x 從這一個(gè) distribution 里面, 被 sample 出來(lái)的機(jī)率,其實(shí)嚴(yán)格說(shuō)起來(lái),這個(gè)東西并不是機(jī)率,它是 probability 的 density,它跟機(jī)率是成正比的,但它并不 exactly 就是機(jī)率,但是這邊,為了讓大家不要太混亂, 我們就假設(shè)它是機(jī)率,好,那這個(gè)機(jī)率的分布呢,它是由兩個(gè)東西決定,一個(gè)東西,叫做 mean,這邊寫成 μ μ μ,另外一個(gè)東西,叫做 variance,寫做 Σ Σ Σ,它是一個(gè) matrix,mean 是一個(gè) vector, Σ Σ Σ 是一個(gè) matrix,所以你把 μ μ μ 跟 Σ Σ Σ 代入這個(gè)看起來(lái)有點(diǎn)復(fù)雜的 function,那它就會(huì)有不同的形狀,同樣的 x x x,如果有不同的 μ μ μ 跟 Σ Σ Σ,那你代進(jìn)同樣的 x x x,它 output 的機(jī)率分布就會(huì)是不一樣的。下面呢,就舉幾個(gè)例子,比如說(shuō),同樣的 Σ Σ Σ、不同的 μ μ μ,代表說(shuō)他們機(jī)率分布最高點(diǎn)的地方,是不一樣的。
比如說(shuō),同樣的 μ μ μ、不同的 Σ Σ Σ,代表說(shuō)機(jī)率分布的最高點(diǎn)是一樣的,但是,它們的分布,散的程度是不一樣的。
那接下來(lái)的問(wèn)題就是,我們假設(shè)有一個(gè) Gaussian 存在,從這個(gè) Gaussian 里面 sample 出這 79 個(gè)點(diǎn),那到底這個(gè) Gaussian長(zhǎng)什么樣子呢?如果我們可以找到這個(gè) Gaussian 的話,假設(shè)我們可以根據(jù)這 79 個(gè)點(diǎn),估測(cè)出這個(gè) Gaussian 的 μ μ μ (mean),應(yīng)該在這個(gè)位置,是 [75, 71.3],它的 Σ Σ Σ 應(yīng)該是這樣的分布,那給我們一個(gè)新的點(diǎn) x x x,它是我們過(guò)去從來(lái)沒(méi)有看過(guò)的點(diǎn),它不在這 79 個(gè) sampling 里面,但是,如果我們知道 μ μ μ 跟 Σ \Sigma Σ 的話,我們就可以把 Gaussian distribution 的 function 寫出來(lái),這個(gè) function 是 depend on μ μ μ 跟 Σ \Sigma Σ 的,所以,我們把它寫成 f μ , Σ ( x ) f_{\mu, \Sigma}(x) fμ,Σ?(x),你把這個(gè) x x x 代進(jìn)去,經(jīng)過(guò)一串復(fù)雜的運(yùn)算以后,那你就可以算出呢,某一個(gè) x x x 從這個(gè) Gaussian 里面,從這個(gè) mean 是 μ μ μ、它的 covariance matrix 是 Σ Σ Σ 的 Gaussian 里面,被 sample 出來(lái)的機(jī)率,那如果你對(duì)這個(gè) function 沒(méi)什么概念的話呢,你就可以想像說(shuō),如果 x x x 越接近中心點(diǎn),越接近 μ μ μ 這個(gè)地方,它 sample 出來(lái)的機(jī)率當(dāng)然是比較大的,像這個(gè) x x x 在這么遠(yuǎn)的地方, 它 sample 出來(lái)的機(jī)率就是比較小的,那再來(lái)有一個(gè)問(wèn)題就是,怎么找這個(gè) μ μ μ 跟怎么找這個(gè) Σ Σ Σ ?
這邊用的這個(gè)概念呢,叫做 Maximum Likelihood,你可以想像說(shuō),這 79 個(gè)點(diǎn),其實(shí)可以從任何一個(gè) Gaussian 里面被 sample 出來(lái),對(duì)不對(duì)?任何一個(gè) Gaussian 都有可能 sample 出這 79 個(gè)點(diǎn),因?yàn)槟銖?Gaussian 里面 sample 出一個(gè) point,它可以是整個(gè)空間上的任何一個(gè)點(diǎn),只是有些地方機(jī)率很低,有些地方機(jī)率很高,但沒(méi)有一個(gè)地方的機(jī)率是 exactly 等于 0 的,所以,雖然說(shuō),右上角這個(gè) Gaussian 它 sample 出左下角這個(gè)點(diǎn)的機(jī)率很低,但是,并不代表說(shuō),這個(gè)機(jī)率是 0。
雖然說(shuō)每一個(gè) Gaussian 都有可能 sample 出這 79 個(gè)點(diǎn),但是,他們 sample 出這 79 個(gè)點(diǎn)的可能性是不一樣的,他們 sample 出這 79 個(gè)點(diǎn)的 Likelihood 是不一樣的,顯然說(shuō),如果你的 Gaussian 是左下角這個(gè)的話,他 sample 出這 79 個(gè)點(diǎn)的 Likelihood 就比較高,如果你的 Gaussian 是右上角這個(gè)的話,他 sample 出這 79 個(gè)點(diǎn)的機(jī)率是比較低的,所以說(shuō),今天給我們某一個(gè) Gaussian 的 μ μ μ 跟 Σ Σ Σ,我們就可以算這個(gè) Gaussian 的 likelihood,也就是說(shuō),給我一個(gè) Gaussian 的 μ μ μ 跟 Σ Σ Σ,我們就可以算這個(gè) Gaussian sample 出這 79 個(gè)點(diǎn)的機(jī)率,那這個(gè) likelihood、這個(gè)可能性呢,我們可以把它寫成這樣一個(gè)式子,這個(gè)可能性我們也用了 L L L,因?yàn)槲蚁氩坏礁玫?notation,可能會(huì)跟 loss function 有點(diǎn)混淆,但是,Likelihood 用別的 notation 又很怪,還是用 L L L,那這個(gè) L L L,它的 input 就是,Gaussian 的 mean( μ μ μ) 跟 covariance ( Σ Σ Σ), L L L 做的事就是把這個(gè) μ μ μ 跟 Σ Σ Σ, 代到這個(gè) likelihood 的 function 里面,那它會(huì)告訴我們說(shuō),這個(gè) μ μ μ 跟 Σ Σ Σ,它 sample 出這 79 個(gè)點(diǎn)的機(jī)率,到底有多大?那這個(gè)東西怎么算?
這個(gè)點(diǎn),這個(gè)東西就是這樣算,因?yàn)樗械?79 個(gè)點(diǎn)是獨(dú)立被 sample 出來(lái)的,所以,今天這個(gè) Gaussian,它 sample 出這 79 個(gè)點(diǎn)的機(jī)率,就是,這個(gè) Gaussian sample 出第 1 個(gè)點(diǎn)的機(jī)率,乘上 sample 出第 2 個(gè)點(diǎn)的機(jī)率,乘上 sample 出第 3 個(gè)點(diǎn)的機(jī)率,一直到 sample 出第 79 個(gè)點(diǎn)的機(jī)率。
我們接下來(lái)要做的事情,就是,找到那一個(gè) Gaussian,它 sample 出這 79 個(gè)點(diǎn)的機(jī)率,是最大的,它 sample 出這 79 個(gè)點(diǎn)的 Likelihood 是最大的,那這個(gè) Gaussian,我們寫作 ( μ ? , Σ ? ) (μ^*, Σ^*) (μ?,Σ?),所以,我們現(xiàn)在要做的事情是這樣,Likelihood 的 function 寫做這樣子,那這每一個(gè) f f f,如果你想知道的話,它很復(fù)雜,是寫成這個(gè)樣子,你就把這個(gè) x x x 代進(jìn)去,然后呢,我們要窮舉所有的 μ μ μ,窮舉所有的 Σ Σ Σ,看哪一個(gè)可以讓上面的 likelihood 的式子最大,它就是我們要找的 μ ? μ^* μ? 跟 Σ ? Σ^* Σ?,它就是我們認(rèn)為最有可能產(chǎn)生這 79 個(gè)點(diǎn)的 μ ? μ^* μ? 跟 Σ ? Σ^* Σ?,我們就當(dāng)作這 79 個(gè)點(diǎn),是從這個(gè) μ ? , Σ ? μ^*, Σ^* μ?,Σ? sample 出來(lái)的,這個(gè)東西,怎么做呢?
你就用微分解一下,找那個(gè)極值的地方這樣,你也可以背個(gè)公式解,怎么秒解,就是,哪一個(gè) μ ? μ^* μ? 可以讓這個(gè)最大呢?這個(gè)結(jié)果是很直覺(jué)的,就是平均值可以讓它最大,所以,你就把 79 個(gè) x x x 平均起來(lái),你就把 79 個(gè) x x x 當(dāng)作是 vector 加起來(lái),除 79,就得到 μ ? μ* μ?,如果你不爽的話,你就把這個(gè)式子取個(gè)微分啊,對(duì) μ μ μ 取個(gè)微分,然后找它微分是 0 的點(diǎn),解出來(lái)就是你的 μ ? μ* μ?。那 Σ ? Σ* Σ? 是什么呢?你先把 μ ? μ* μ? 算出來(lái),然后對(duì)所有的 x n x^n xn,你都算 ( x n ? μ ? ) (x^n - μ^*) (xn?μ?),乘 ( x n ? μ ? ) T (x^n - μ^*)^T (xn?μ?)T (的 transpose),那如果你不爽的話,就把這些值對(duì) Σ ? Σ^* Σ? 做微分,然后解它微分是 0 的點(diǎn),你就解出來(lái)這個(gè)。
有了這些以后,我們就真的去算一下,這個(gè)是真正的結(jié)果,算出來(lái)的 μ μ μ 是這樣子,算出來(lái)的 Σ Σ Σ 是這樣子,也就是說(shuō)呢,假設(shè)這 79 只水系的神奇寶貝,是從這個(gè) Gaussian sample 出來(lái)的話,那最有可能 sample 出這 79 個(gè)點(diǎn)的 Gaussian,它的 mean 是 μ 1 μ^1 μ1,它的 covariance 是 Σ 1 Σ^1 Σ1,那如果你看 class 2 的話,class 2 是一般系的神奇寶貝,有幾只呢?有 61 只,那我們一樣算它的 mean 跟 variance,這 61 只一般系的神奇寶貝,最有可能 sample 出它的 Gaussian,它的 mean 是長(zhǎng)這樣,它的 variance 是長(zhǎng)這樣,有了這些以后,就結(jié)束了,我們就可以做分類的問(wèn)題了,怎么做呢?
我們說(shuō)要做分類的問(wèn)題,我們只要算出 P ( C 1 ∣ x ) P(C_1|x) P(C1?∣x),給我一個(gè) x x x,它是從 C 1 C_1 C1? 來(lái)的機(jī)率,那這整項(xiàng)可以寫成這樣子,只要我們最后算出來(lái)這一項(xiàng),大于 0.5 的話,那 x x x 就屬于 class 1,那 P ( C 1 ) P(C_1) P(C1?) 很容易算,就是這么回事,那 P ( C 2 ) P(C_2) P(C2?) 我們算過(guò),就是這么回事, P ( x ∣ C 1 ) P(x|C_1) P(x∣C1?) 怎么算呢?我們已經(jīng)假設(shè)說(shuō)這個(gè)東西,它就是一個(gè) Gaussian distribution,這個(gè) Gaussian distribution 的 mean 跟 variance,分別就是 μ 1 μ^1 μ1 跟 Σ 1 Σ^1 Σ1,這我們剛才已經(jīng)算出來(lái)過(guò)了,因?yàn)槲覀儎偛乓呀?jīng)根據(jù),class 1 所有的那 79 只寶可夢(mèng)的分布,知道說(shuō),他們是從一個(gè),mean 是 μ 1 μ^1 μ1,covariance 是 Σ 1 Σ^1 Σ1 的 distribution 里面 sample 出來(lái)的,那 P ( x ∣ C 2 ) P(x|C_2) P(x∣C2?),那我們也知道說(shuō), 它的這個(gè) Gaussian distribution,它是從 mean 是 μ 2 μ^2 μ2, covariance 是 Σ 2 Σ^2 Σ2 的 distribution 里面 sample 出來(lái)的,有了這些以后,問(wèn)題就解決了,那結(jié)果怎么樣呢?
我是真的有做的,這個(gè)橫軸跟縱軸,分別就是防御力跟特殊防御力,藍(lán)色的點(diǎn),是水系的神奇寶貝的分布,紅色的點(diǎn),是一般系的神奇寶貝的分布,看到這個(gè)結(jié)果,我有點(diǎn)緊張,因?yàn)橛X(jué)得分不出來(lái),我用人眼看就知道不太 ok,那我們就真的計(jì)算一下,在這個(gè)二維平面上,每一個(gè)點(diǎn),我都當(dāng)作一個(gè) x x x,進(jìn)去我都可以算一個(gè),它是 C 1 C_1 C1? 的機(jī)率,那這個(gè)機(jī)率呢,用顏色來(lái)表示,紅色就代表說(shuō),在這個(gè)區(qū)域呢,是 class 1,是水系神奇寶貝的機(jī)率是比較大的,在藍(lán)色這個(gè)地方呢,水系神奇寶貝的機(jī)率是比較小的,你看這很合理嘛,因?yàn)?#xff0c;水系神奇寶貝在紅色這邊的分布還是比較多,所以這個(gè)地方機(jī)率是比較大的,那現(xiàn)在,因?yàn)槲覀兲幚淼氖欠诸惖膯?wèn)題,我們算這個(gè)機(jī)率,我們是要 output 說(shuō)是哪一類,所以我們說(shuō),機(jī)率大于 0.5,就是類別一,也就是紅色這個(gè)區(qū)間,機(jī)率小于 0.5,就是藍(lán)色這個(gè)區(qū)間,他們就是類別二。
你會(huì)發(fā)現(xiàn)說(shuō),有點(diǎn)難搞,因?yàn)樗麄冎虚g沒(méi)有一個(gè)明確的 boundary,那把它 apply 到 testing set 上,現(xiàn)在,testing set 就是編號(hào)大于 400 那些寶可夢(mèng),把他們整個(gè) class 1 跟 class 2 的寶可夢(mèng)畫(huà)在這個(gè)二維平面上,那 boundary 是一樣的,你會(huì)發(fā)現(xiàn)說(shuō),分的不太好,正確率是 47 %,那你有一點(diǎn)擔(dān)心,會(huì)不會(huì)是這題有可能分不出來(lái),這也是有可能的,但是我想說(shuō)我們現(xiàn)在只看了二維的空間,對(duì)不對(duì),機(jī)器學(xué)習(xí)厲害的地方就是,因?yàn)槲覀冏寵C(jī)器處理這個(gè)問(wèn)題,所以高維空間也可以處理,不是只處理二維的空間而已,所以我們看一下高維的空間,事實(shí)上,每一只神奇寶貝(寶可夢(mèng)呢),它是分布在一個(gè)七維的空間里面,如果只用二維的空間分不出來(lái), 可是搞不好七維分的出來(lái)啊,就是這個(gè)紅色跟藍(lán)色搞不好在高維的空間上看到,一個(gè)是這樣,一個(gè)是這樣,現(xiàn)在從上面往下看,就覺(jué)得疊在一起,搞不好在七維空間上,是分開(kāi)的,所以,每一個(gè)寶可夢(mèng)都是存在七維空間中的一個(gè)點(diǎn),我們一樣可以算 class 1 跟 class 2 在七維空間中,sample 出那些點(diǎn)的 μ 1 μ^1 μ1 跟 μ 2 μ^2 μ2, μ 1 μ^1 μ1 跟 μ 2 μ^2 μ2 都是七維, Σ 1 Σ^1 Σ1 跟 Σ 2 Σ^2 Σ2 都是 7 × 7 7 \times 7 7×7 的 matrix,然后你就做一發(fā),正確率就 54%,很糟,這樣就跟你 random 猜,大概也是這個(gè)樣子,然后就 so sad。那怎么辦呢?
那其實(shí)呢,當(dāng)你用這樣子的 probability generated 的 model 的時(shí)候,是比較少見(jiàn)的,其實(shí)你不常看到,給每一個(gè) Gaussian 都有自己的 mean 跟自己的 variance,class 1 有一個(gè) μ 1 , Σ 1 μ^1, Σ^1 μ1,Σ1,class 2 有一個(gè) μ 2 , Σ 2 μ^2, Σ^2 μ2,Σ2,比較常見(jiàn)的做法是,不同的 class,可以 share 同一個(gè) covariance 的 matrix。首先,你想想看,covariance matrix,它其實(shí)是跟你 input 的 feature size,是跟它的平方成正比的,所以,covariance matrix 當(dāng)你的 feature size 很大的時(shí)候,它的增長(zhǎng)呢,其實(shí)是可以非常快的,所以在這個(gè)情況下呢,如果你把兩個(gè)不同的 Gaussian 都給它不同的 covariance matrix,那你的 model 參數(shù)可能就太多了,model 參數(shù)多,variance 就大,也就是容易 overfitting,所以,如果我們要有效減少參數(shù)的話,我們可以給這兩個(gè) class,就是屬于水系的神奇寶貝和屬于一般系的神奇寶貝,它們的描述這兩個(gè) class 的 feature 分布的 Gaussian,故意給他們同樣的 covariance matrix,強(qiáng)迫他們共用 covariance matrix,這樣子呢,你就只需要比較少的 parameter,就可以來(lái) model 這一個(gè)模型了,這什么意思呢?
也就是說(shuō),現(xiàn)在我們有 79 只水系的寶可夢(mèng),我們假設(shè)它是從一個(gè) mean 是 μ 1 μ^1 μ1,covariance 是 Σ Σ Σ 的 Gaussian 所 generate 出來(lái)的,另外 61 只是屬于一般系的寶可夢(mèng),這邊給它編號(hào)從 80 到 140,我們假設(shè)這些寶可夢(mèng)他們的屬性的這個(gè)分布呢,是從另外一個(gè) Gaussian 所 generate 出來(lái)的,另外一個(gè) Gaussian,它的 mean 是 μ 2 μ^2 μ2,但是它的 covariance matrix,跟 generate 水屬性的寶可夢(mèng),他們用的 covariance matrix 是同一個(gè),這兩個(gè) class 他們 share 同一個(gè) covariance matrix,如果這樣子的話,你怎么計(jì)算 Likelihood 呢?
如果你現(xiàn)在要計(jì)算,某一組 μ 1 , μ 2 μ^1, μ^2 μ1,μ2 和 Σ Σ Σ,generate 這總共兩個(gè) case 合起來(lái),你就像下面這樣計(jì)算,那在這個(gè)式子里面,你要怎么算 μ 1 , μ 2 μ^1, μ^2 μ1,μ2 呢?你要怎么找一個(gè) μ 1 , μ 2 , Σ μ^1, μ^2, Σ μ1,μ2,Σ 讓這個(gè) Likelihood 的 function 最大呢?那 μ 1 , μ 2 μ^1, μ^2 μ1,μ2 的算法,跟我們之前沒(méi)有把 class 1 跟 class 2 的 covariance,tight 在一起的時(shí)候,那個(gè)算式是一模一樣的,你就只要把 class 1 里面的 x x x 平均起來(lái)就變 μ 1 μ^1 μ1,class 2 里面的 x x x 平均起來(lái)就變 μ 2 μ^2 μ2,唯一不一樣的是 Σ Σ Σ,因?yàn)槲覀儸F(xiàn)在 Σ Σ Σ 要同時(shí)考慮這兩個(gè) class,所以它當(dāng)然是不一樣的,那這個(gè) Σ Σ Σ 的式子應(yīng)該長(zhǎng)什么樣子呢?這個(gè) Σ Σ Σ 的式子,這個(gè)結(jié)果非常的直觀,如果你想要看它的推導(dǎo)的話,我這邊引用的就是 Bishop 這本教科書(shū),以后如果要引用的話,盡量引 Bishop,為什么呢?因?yàn)樗诰W(wǎng)路上,有 available 的版本。你就把原來(lái)我們根據(jù)這些 data 所算出來(lái)的 covariance matrix ( Σ 1 Σ^1 Σ1),跟根據(jù)這些 data 所算出來(lái)的 covariance matrix, Σ 2 Σ^2 Σ2,weighted by 他們 element 的數(shù)目,你這個(gè) class 1 有 79 個(gè),所以你就把 Σ 1 ? 79 Σ^1 * 79 Σ1?79,class 1 有 61 個(gè),所以你就把 Σ 2 ? 61 Σ^2 * 61 Σ2?61,再取平均,你就把原來(lái)這兩個(gè) Gaussian,各自算的 covariance matrix,加權(quán)平均,就會(huì)得到,如果你要求他們用共同的 Gaussian 的時(shí)候,所得到的 covariance matrix,那我們來(lái)看一下結(jié)果。
假設(shè)我們?nèi)匀皇怯脙蓚€(gè) feature,用 Defense 跟 SP Defense 的話,后來(lái)我發(fā)現(xiàn),我這兩個(gè) example 選的不是很好,因?yàn)槿绻憧?Defense 跟 SP Defense,你是沒(méi)有辦法把水系跟一般系的神奇寶貝分開(kāi),后來(lái)我研究了一下,我覺(jué)得,好像用一般攻擊力和一般防御力,合起來(lái)呢,就可以分的蠻開(kāi)的這樣子。
那如果我們今天共用 covariance matrix 會(huì)發(fā)生什么事?在沒(méi)有共用之前,class 1 跟 class 2 的 boundary,是這條,是這個(gè)曲線,如果我們今天共用同一個(gè) covariance matrix 的話,你會(huì)發(fā)現(xiàn)說(shuō),他們的 boundary,變成是一個(gè)直線,假設(shè)你把這兩個(gè)不同的 class,強(qiáng)迫他們的 covariance matrix 必須共用同一個(gè)的話,那你今天在分類的時(shí)候,你的 boundary 就會(huì)變成是一條直線,所以,像這樣子的 model,我們也稱之它為 linear 的 model,你可能會(huì)想說(shuō),Gaussian 什么的不是 linear 的啊,但是,它分兩個(gè) class 的 boundary 是 linear 的,所以,這樣的 model,我們也稱它為 linear 的 model,如果今天兩個(gè) class, 你用不同的 covariance matrix 的話呢,它們就不是 linear 的 model,如果,我們考慮所有的 feature 會(huì)怎么樣呢?如果我們考慮所有的 feature 的話,原來(lái)我們只得到 54% 正確率,但是,神奇的是,當(dāng)我們共用 covariance matrix 的時(shí)候,我們就得到 79% 的正確率了,顯然是有分對(duì)東西,那你說(shuō),為什么會(huì)做到這樣子呢,那這就很難分析了,因?yàn)?#xff0c;這個(gè)是在高維空間中發(fā)生的事情,是在 7 維空間中發(fā)生的事情,我們很難知道說(shuō),這個(gè) boundary 是怎么切的,但是,這個(gè)就是 machine learning fancy 的地方,就是,人沒(méi)有辦法知道怎么做,但是,machine 可以幫我們做出來(lái),如果今天 feature 很少,人一看就知道怎么做,那其實(shí)可以不用用上 machine learning,對(duì)不對(duì)?
我們來(lái)回顧一下,我們講得這個(gè)機(jī)率的模型,那我們講說(shuō) machine learning 就是 3 個(gè) step,那這個(gè)機(jī)率模型呢,它其實(shí)也是 3 個(gè) step,首先,你有一個(gè) model, 這個(gè) model 就是你的 function set,這個(gè) function set 里面的 function 都長(zhǎng)什么樣子呢?
這個(gè) function set 里面的 function 都長(zhǎng)下面這個(gè)樣子,input 一個(gè) x x x,我們有 class 1 的 required probability,class 2 的 required probability,class 1 產(chǎn)生 x 的 probability distribution,class 2 產(chǎn)生 x 的 probability distribution,這些 required probability 和 probability distribution,就是 model 的參數(shù),你選擇不同的 probability distribution,你就得到不同的 function,那你把這些不同的 probability distribution,就像 Gaussian 你選不同的 mean 跟不同的 covariance matrix,你就得到不同的 probability distribution,你把這些不同的 probability distribution 積分起來(lái),就是一個(gè) model,就是一個(gè) function set,那怎么決定是哪一個(gè) class 呢?如果 P ( x ∣ C 1 ) P(x|C_1) P(x∣C1?) 這個(gè) posterior probability > 0.5 的話呢,就 output class 1,反之呢,就 output class 2,這個(gè)是 function 的樣子,接下來(lái)呢,我們要找,evaluate function set 里面每一個(gè) function 的好壞,那怎么 evaluate 呢?
在這個(gè)機(jī)率模型里面,假設(shè)我們今天使用 Gaussian 的話,那我們要 evaluate 的對(duì)象, 其實(shí)就是 Gaussian 里面的參數(shù),也就是 mean 跟 covariance matrix,那今天呢,我們就是說(shuō),如果一個(gè) mean 跟一個(gè) covariance matrix,你用這些參數(shù)來(lái)定義你的 probability distribution,而它可以產(chǎn)生我們的 training data 的 likelihood,就是這組參數(shù)的好壞,所以,我們要做的事情就是,找一個(gè) probability distribution,它可以最大化產(chǎn)生這些 data 的 likelihood,這個(gè)是定義 function 的好壞,定義一組參數(shù)的好壞,最后,怎么找出一組最好的參數(shù)呢?你就看看前面的投影片,它的結(jié)果是很 trivial 的。
那有人就會(huì)問(wèn)說(shuō),為什么要用 Gaussian,為什么不選別的這樣子?簡(jiǎn)單的答案就是,如果我選了別的機(jī)率模型,你也會(huì)問(wèn)我同樣的問(wèn)題,其實(shí)你永遠(yuǎn)可以選一個(gè)你自己喜歡的,這個(gè) probability distribution,這個(gè)是你自己決定的,這個(gè)不是人工智慧,是你人的智慧,去決定說(shuō)你要選哪一個(gè)人的模型,是比較適合的,那你選擇比較簡(jiǎn)單的機(jī)率模型,參數(shù)比較少的,那你的 bias 就大、variance 就小,那你選擇復(fù)雜的,你 bias 就小、variance 就大,那你可能就要用 data set 決定一下,你要用怎么樣的機(jī)率模型,是比較好的。
那我們有另外一種常見(jiàn)的假設(shè)是這樣,假設(shè)我們的這個(gè) x x x,我們知道 x x x 是由一組 feature 來(lái)描述它的,那剛才在寶可夢(mèng)的例子里面, x x x 可以有 7 個(gè)數(shù)值,那我們假設(shè),每一個(gè) dimension,它從機(jī)率模型,產(chǎn)生出來(lái)的機(jī)率是 independent 的,所以,這個(gè) x x x 產(chǎn)生的機(jī)率,可以拆解成, x 1 x_1 x1? 產(chǎn)生的機(jī)率,乘上 x 2 x_2 x2? 產(chǎn)生的機(jī)率,乘上 x k x_k xk? 產(chǎn)生的機(jī)率,一直到乘上 x k x_k xk? 產(chǎn)生的機(jī)率,如果我們假設(shè),這些機(jī)率分布是 independent 的話,每一個(gè) dimension 分布是 independent 的話,我們可以做這樣子的假設(shè),那今天你可以說(shuō),每一個(gè)機(jī)率,就是 x 1 x_1 x1? 產(chǎn)生的機(jī)率、 x 2 x_2 x2? 產(chǎn)生的機(jī)率, x k x_k xk? 產(chǎn)生的機(jī)率,他們分別都是一維的 Gaussian。如果你這樣假設(shè)的話,等于是說(shuō),我們之前討論的都是 multi-variable 的 Gaussian 嘛,都是多維度的 Gaussian,如果你假設(shè)說(shuō),每一個(gè) dimension 分開(kāi)的 model,他們都是一維的 Gaussian 的話,意思就是說(shuō),原來(lái)那個(gè)高維度的 Gaussian,它的 covariance matrix 變成是 diagonal,在不是對(duì)角線的地方,值都是 0,只有對(duì)角線的地方,有值,這樣你就可以更減少你的參數(shù)量,你就可以得到一個(gè)更簡(jiǎn)單的模型,那如果試一下這個(gè),試一下這個(gè)結(jié)果是壞的,所以看來(lái)這個(gè)模型太簡(jiǎn)單了,model 不同的 feature 間的 covariance,我看也是必要的,我覺(jué)得,比如說(shuō),像是戰(zhàn)斗跟防御力是有正相關(guān)的,他們這個(gè) model 之間的 covariance,看來(lái)還是必要的,那你也不一定要用 Gaussian,有很多時(shí)候你憑直覺(jué)就知道應(yīng)該用 Gaussian,比如說(shuō),今天假設(shè)你有某個(gè) feature,它是 binary 的,有某個(gè) feature,它代表的是:是或不是,或是它的 output 就是 0 跟 1 這樣,比如說(shuō),有一只寶可夢(mèng),它是神獸還是不是神獸之類的,這個(gè)就是 binary 的 feature,如果是 binary 的 feature 的話,你說(shuō)它是用 Gaussian distribution 產(chǎn)生的,就太自欺欺人了,所以,它應(yīng)該不太可能是用 Gaussian 所產(chǎn)生的,這個(gè)時(shí)候,你就會(huì)假設(shè)別的 distribution,比如說(shuō),假設(shè)你的 feature 是 binary 的,它 output,要么是 0,要么是 1,這個(gè)時(shí)候,你可能就會(huì)選擇說(shuō), 它是一個(gè) Bernoulli distribution,而不是一個(gè) Gaussian distribution,如果我們今天假設(shè)所有的 feature,它都是 independent 產(chǎn)生的,我們不 model feature 和 feature 間 covariance 的關(guān)系,那我們用這種方法做分類的話,我們叫做用 Naive Bayes Classifier,它前面有一個(gè) Naive,因?yàn)樗娴暮?naive,它真的很簡(jiǎn)單,這樣,那你可能會(huì)常聽(tīng)到,有人說(shuō) Naive Bayes Classifier 很強(qiáng),其實(shí)它強(qiáng)不強(qiáng)是 depend on 你的假設(shè)是不是精準(zhǔn)的,如果你今天假設(shè)不同的 dimension 之間是 independent,這件事情是很切合實(shí)際的,那 Naive Bayes Classifier 確實(shí)可以給你提供很好的 performance,那如果這個(gè)假設(shè)是很不成立的話,那 Naive Bayes Classifier 它的 bias 就太大了,它就不是一個(gè)好的 Classifier。
接下來(lái)呢,我們要做的分析是,我們要分析這項(xiàng) Posterior Probability,我們?cè)谧鲆恍┱硪院?#xff0c;我們會(huì)發(fā)現(xiàn)一些有趣的現(xiàn)象,化簡(jiǎn)過(guò)程如上。那我們假設(shè),這一項(xiàng)啊,這一項(xiàng)取 natural log 以后,它等于 z z z,那我們就可以把這個(gè) Posterior Probability,把這個(gè) z z z 放進(jìn)去,乘負(fù)號(hào),就是上下顛倒,再取 exponential,把 exponential 跟 natural log 抵銷,你就得到這一項(xiàng),然后你就得到 Posterior Probability,這個(gè) function,它的 input 是 z z z,這個(gè) function,叫做 sigmoid function,如果你把它 output 對(duì) z z z 的關(guān)系作圖的話,你就會(huì)發(fā)現(xiàn)是這個(gè)樣子,也就是 z z z 趨近無(wú)窮大的時(shí)候,它的 output 就趨近于 1, z z z 趨近負(fù)無(wú)窮大的時(shí)候,它的 output 就趨近于 0。
接下來(lái),我們要做的事情是,我們要把這個(gè) z z z 算一下,它到底應(yīng)該長(zhǎng)什么樣子?我們把相乘的部分,取 ln,所以就變成相加,那 P ( C 1 ) / P ( C 2 ) P(C_1) / P(C_2) P(C1?)/P(C2?) 是什么呢?我們都知道說(shuō),這邊 N 1 N_1 N1? 代表 Class 1,它在 training data 里面出現(xiàn)的數(shù)目, N 2 N_2 N2? 代表 Class 2,它在 training data 里面出現(xiàn)的次數(shù),所以, P ( C 1 ) P(C_1) P(C1?) 就是 N 1 / ( N 1 + N 2 ) N_1 / (N_1 + N_2) N1?/(N1?+N2?), P ( C 2 ) P(C_2) P(C2?) 就是 N 2 / ( N 1 + N 2 ) N_2 / (N_1 + N_2) N2?/(N1?+N2?),分母的地方消掉,所以得到 N 1 / N 2 N_1/N_2 N1?/N2?,那 P ( x ∣ C 1 ) P(x|C_1) P(x∣C1?) 是什么呢?我們說(shuō)它是一個(gè) probability distribution,這個(gè) Gaussian 的 distribution, P ( x ∣ C 2 ) P(x|C_2) P(x∣C2?) 是另一個(gè) Gaussian 的 distribution,如果我們把它相除,再取 ln,會(huì)得到什么式子呢?
就得到這樣子,那這一項(xiàng)跟 distribution 是沒(méi)關(guān)系的,就把它消掉,然后,這一項(xiàng)把它提出來(lái),相乘變相加,然后這個(gè) exp 的部分呢,相除等于 exp 里面的相減,這個(gè),也沒(méi)什么特別的,得到這樣,那接下來(lái)呢?
接下來(lái)你就,做一些運(yùn)算,把它展開(kāi),你可能想要知道說(shuō) ( x ? μ 1 ) T ( Σ 1 ) ? 1 ( x ? μ 1 ) (x - μ^1)^T (Σ^1)^{-1} (x - μ^1) (x?μ1)T(Σ1)?1(x?μ1),它應(yīng)該長(zhǎng)什么樣子,把它展開(kāi),如圖所示。
但是,我們剛才有說(shuō)過(guò)呢,一般我們會(huì)假設(shè),covariance matrix 是共用的,所以, Σ 1 = Σ 2 = Σ Σ^1 = Σ^2 = Σ Σ1=Σ2=Σ,在這個(gè)情況下,我們就可以簡(jiǎn)化上面這個(gè)式子,我們就可以簡(jiǎn)化成上式。然后,你會(huì)發(fā)現(xiàn)說(shuō),只有其中兩項(xiàng),是跟 x x x 有關(guān)的,另外三項(xiàng),是跟 x x x 無(wú)關(guān)的,所以,先把這兩項(xiàng)集合起來(lái),把它的 x x x 提出來(lái), 就變成 ( μ 1 ? μ 2 ) T Σ ? 1 x (μ^1 - μ^2)^T Σ^{-1} x (μ1?μ2)TΣ?1x,剩下這三項(xiàng),就把它原封不動(dòng)地?cái)[在后面。
接下來(lái)呢,我們假設(shè)說(shuō),這個(gè)東西, ( μ 1 ? μ 2 ) T Σ ? 1 (μ^1 - μ^2)^T Σ^{-1} (μ1?μ2)TΣ?1,它合起來(lái)就是一個(gè) vector,假設(shè)你把 μ 1 μ^1 μ1 算出來(lái),把 μ 2 μ^2 μ2 算出來(lái),把 Σ Σ Σ 算出來(lái),那你再代到這個(gè)式子里面,把 Σ Σ Σ 做 inverse,把 ( μ 1 ? μ 2 ) (μ^1 - μ^2) (μ1?μ2) 做 transpose,那你就得到一個(gè) vector,把那個(gè) vector 叫做 W T W^T WT,后面這項(xiàng),你可覺(jué)得看起來(lái)很可怕,但它其實(shí)很簡(jiǎn)單,因?yàn)?#xff0c;我們從這邊開(kāi)始看,這是一個(gè) vector,這是一個(gè) matrix,這是一個(gè) vector,把他們?nèi)齻€(gè)乘起來(lái)以后,你得到的其實(shí)就是一個(gè) scalar,那它其實(shí)不是什么復(fù)雜的東西,它是一個(gè)數(shù)字,你把這一項(xiàng)乘這一項(xiàng)乘這一項(xiàng),你把 vector 的 transpose 乘上 matrix 的 inverse,再乘上一個(gè) vector,它也是一個(gè) scalar,那這個(gè) l n ( N 1 / N 2 ) ln (N_1/N_2) ln(N1?/N2?),它也是一個(gè) scalar,所以你只是把這 3 個(gè)數(shù)字加起來(lái)而已,它就是個(gè)數(shù)字,所以我們就拿 b b b 來(lái)代表這個(gè)看起來(lái)很復(fù)雜的數(shù)字,假設(shè)你知道 μ 1 , μ 2 , Σ μ^1, μ^2,Σ μ1,μ2,Σ,那這一項(xiàng)其實(shí)就是個(gè) vector,這一項(xiàng)其實(shí)就是個(gè) scalar,它就是一個(gè)數(shù)字而已,所以呢,我們知道說(shuō),我們可以把 posterior probability,這項(xiàng)機(jī)率呢,寫成 σ ( z ) σ(z) σ(z), z z z 呢,又可以寫成這樣子,所以,我們其實(shí)可以把這個(gè) posterior probability,就簡(jiǎn)單寫成 σ ( w ? x + b ) σ(w * x + b) σ(w?x+b), w w w 跟 x x x 的 inner product,再加上一個(gè)常數(shù) b b b,我們可以把 z z z 寫成 w w w 跟 x x x 的 inner product,再加上一個(gè)常數(shù) b b b,其實(shí)這個(gè) posterior probability,它根本就沒(méi)有這么復(fù)雜,它寫起來(lái)呢,就是這個(gè)樣子,所以,從這個(gè)式子,你就可以看出來(lái)說(shuō),為什么我們今天把 Σ 1 Σ^1 Σ1 跟 Σ 2 Σ^2 Σ2 共用的時(shí)候,假設(shè) Σ 1 Σ^1 Σ1 必須等于 Σ 2 Σ^2 Σ2 的時(shí)候,你的 class 1 跟 class 2 的 boundary 會(huì)是 linear,你從這個(gè)式子呢,就可以很明顯地看出這件事,那再 generative model 里面,我們做的事情是,我們用某些方法,去找出上面這個(gè)式子里面的, N 1 , N 2 , μ 1 , μ 2 , Σ N_1, N_2, μ_1, μ_2, Σ N1?,N2?,μ1?,μ2?,Σ,找出這些以后,你就算出 w w w,你就算出 b b b,你把它代進(jìn)這個(gè)式子,你就可以算機(jī)率,但是,如果你看到這個(gè)式子的話,你可能就可以有一個(gè)直覺(jué)的想法,為什么要這么麻煩呢?假設(shè)我們最終的目標(biāo),都是要找一個(gè) vector w w w,都是要找一個(gè) constant b b b,我們何必先去搞個(gè)機(jī)率,算出一些 μ , Σ μ, Σ μ,Σ 什么的,然后再把它搞起來(lái),再得到 w w w 跟 b b b,這不是舍近求遠(yuǎn)嗎?做一件你根本就不需要做的事,最后你只需要 w w w 跟 b b b 嘛,所以,我們能不能夠直接把 w w w 跟 b b b 找出來(lái),這個(gè)呢,就是我們下一份投影片要講的東西。
總結(jié)
以上是生活随笔為你收集整理的李宏毅 机器学习 2016 秋:5、Classification:Probabilistic Generative Model的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 软考-高项-论文-信息系统项目的质量管理
- 下一篇: 读书笔记《Effective C++》条