分類
x -> function -> Class n
分類問題就是要找到一個函數使得給定輸入能輸出它所屬的類別。
又以寶可夢爲例,寶可夢有十八種屬性:電、火等

比如輸入是皮卡丘輸出就是電。
如何分類
首先要收集訓練數據
在二元分類模型(只有兩個類別)中:
輸入x,g(x) > 0 則 class1 否則 class2
那麼損失函數可以這樣定義:
L(f)=n∑δ(f(xn)=y^n)
也就是它的錯誤次數,越小說明這個函數越好。
下面通過概率論的知識來解決找到最好的函數問題。

給定兩個盒子,從這兩個盒子中隨機抽一個球出來,它是藍色的。
那麼這藍色的球從盒子1和盒子2中抽出來的機率分別是多少?
假設從盒子1中抽球的概率
P(B1)=2/3,從盒子2中抽球的概率
P(B2)=1/3
並且盒子1裏面藍球的概率是
P(Blue∣B1)=4/5,綠球的概率是
P(Green∣B1)=1/5
盒子2中藍球的概率是
P(Blue∣B2)=2/5,綠球的概率是
P(Green∣B2)=3/5
那麼根據貝葉斯公式,可以計算出藍球從盒子1中抽出來的概率是:
P(B1∣Blue)=P(Blue∣B1)P(B1)+P(Blue∣B2)P(B2)P(Blue∣B1)P(B1)
現在把盒子換成類別的話:

假設有兩個類別Class1和Class2。
給定一個x,那麼它屬於哪個類別呢?
如果知道從Class1中抽x的概率
P(C1)和從Class2中抽x的概率
P(C2);
從Class1中抽到x的概率
P(x∣C1)以及從Class2中抽到x的概率
P(x∣C2)
那麼可以計算x屬於Class1的概率有多大:
P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1)
這就叫做生成模型(Generative Mode)。顧名思義,有了這個模型,這可以用來生成x。
可以計算某一個x出現的機率
P(x)=P(x∣C1)P(C1)+P(x∣C2)P(C2),就可以知道x的分佈,然後就可以用這個分佈來生成x。
假設我們考慮水系(Water)和一般系(Normal)的神奇寶貝。

在訓練數據中,共有79只水系的,61只一般系的。
那從Class1中取得一隻寶可夢的機率是
P(C1)=79/(79+61)=0.56;
那從Class2中取得一隻寶可夢的機率是
P(C1)=61/(79+61)=0.44=1−P(C1);

那麼從水系的神奇寶貝中挑出一隻是海龜的機率(
P(海龜∣Water))有多大?
也就是
P(x∣C1)=?
我們知道每個神奇寶貝都是用特徵(feature)向量來描述。
我們首先考慮防禦力(Defense)和特殊防禦力(SP Defense)這兩個特徵(因爲沒法畫出7個特徵的圖像出來…)

每個點都代表一隻寶可夢,如果給我們一個不在訓練數據中的新的神奇寶貝,比如海龜。

那麼從水系中挑出一隻神奇寶貝是海龜的機率是多少?
P(x∣Water)=?
可以想象這79只神奇寶貝是從某個高斯分佈(正態分佈)中取樣出來,那麼找到海龜代表的那個點的機率就不是0。
那給定這79個點,怎麼找到這個高斯分佈。
高斯分佈常見的形式是:
f(x;μ,σ)=2π
σ1exp−2σ2(x−μ)2
視頻中給出了另一個種形式:

可以把高斯分佈想成一個函數,這個函數的輸入就是向量x,代表某隻寶可夢的數值;
輸出就是這隻寶可夢從這個分佈中取樣出來的機率。
這個機率由均值
μ和協方差矩陣
Σ組成。
把不同的
μ和
Σ代入這個函數,就能得到不同的圖像,x的機率也不一樣。

同樣的
Σ不同的
μ得出來的圖形中機率分佈最高點的位置不一樣;

同樣的
μ和不同的
Σ的機率分佈最高點位置一樣,但是分佈發散的程度不一樣。
假設有一個高斯分佈存在,從這個分佈中取樣79次後,取出這79個點。
那麼這個高斯分佈到底是什麼樣的呢?
假設我們可以根據這個79個點估測出高斯分佈的
μ和
Σ。

接着給一個新的點x,它不在我們過去所見過的79個點裏面,我們已經知道了
μ和
Σ,我們就可以寫出高斯函數
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PGlK5jBU-1574262013387)(_v_images/20191119222340393_28360.png)]](http://static.javashuo.com/static/loading.gif)
然後把x代進去,就可以算出這個x從這個分佈出取樣出來的機率,如果x越接近中心點,那麼取樣出來的概率就越大。
那麼現在的問題就是如何找到這個
μ和
Σ,用的方法是極大似然。
極大似然
可以想象這個79個點能從任何
μ 和
Σ 的高斯分佈中生成出來。
從高斯分佈中生成能生成任何一個點,不過幾率有高低之別。

如上圖,左下角那個分佈生成這個79個點的可能性(Likelihood)比右上角的分佈要高。
所以給定
μ和
Σ,就可以算出生成這些點的可能性 就是取樣出每個點的機率之積:
L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)fμ,Σ(x3)⋯fμ,Σ(x79)
上面的
L不是代表損失函數,而是取Likelihood中的首字母。
所以,接下來要做的事情是找到生成這個79個點可能性最大(maximum likelihood)的高斯分佈(
(μ∗,Σ∗))。
μ∗,Σ∗=argμ,ΣmaxL(μ,Σ)
我們可以窮舉所有的
μ和
Σ,找到使上面式子結果最大。
平均就是
μ∗
μ∗=791n=1∑79xn
而
Σ∗是
Σ∗=791n=1∑79(xn−μ∗)(xn−μ∗)T
然後根據上面的公式算出來兩個類別的
μ和
Σ:

現在我們就可以進行分類了!
我們只要算出
P(C1∣x)的機率,根據下式:
P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1)
如果
P(C1∣x)>0.5,那麼x就屬於類別1(水系)。
我們已知了
P(C1)和
P(C2),然後代入
μ1和
Σ1得出
P(x∣C1)的值,同理可得出
P(x∣C2)的值,整個式子的結果就可以計算出來了。
那結果怎樣?

藍色的點是水系的神奇寶貝的分佈,紅點時一般系的分佈。

紅色區域機率大於0.5是類別1;藍色區間機率小於0.5,是類別2。
然後把這個模型用於測試數據,發現正確率只有47%,但此時我們只考慮了兩個特徵。
我們把所有特徵都考慮進來(共7個),結果準確率也只有54%。
上面得出的分類結果不太好,我們優化一下模型,讓兩個類別共用同一個
Σ。

假設水系79個神奇寶貝是從
μ1,Σ的高斯分佈生成出來的,同時另外61只(編號從80開始)神奇寶貝從
μ2,Σ的高斯分佈生成出來,這兩個分佈的協方差矩陣是同一個。
那該怎麼計算最大似然呢?
L(μ1,μ2,Σ)=fμ1,Σ(x1)fμ1,Σ(x2)fμ1,Σ(x3)⋯fμ1,Σ(x79)×fμ2,Σ(x80)fμ2,Σ(x81)fμ2,Σ(x82)⋯fμ2,Σ(x140)
用
μ1,Σ產生
x1到
x79,用
μ2,Σ產生
x80到
x140
μ1和
μ2的計算方法和前面的相同。
而
Σ的取值爲
Σ=14079Σ1+14061Σ2
然後再看一下結果,看有什麼改進沒

在考慮了所有特徵的情況下,準確率到了73%,右邊的模型也稱爲線性模型。
總結一下上面的步驟

如果所有特徵(維度)都是獨立的,那麼你可以嘗試使用樸素貝葉斯分類器。
Sigmoid 函數
P(C1∣x)=P(x∣C1)P(C1)+P(x∣C2)P(C2)P(x∣C1)P(C1)
我們來整理下這個式子,上下同除分子,得到:
1+P(x∣C1)P(C1)P(x∣C2)P(C2)1
令
z=lnP(x∣C2)P(C2)P(x∣C1)P(C1)
因爲
lnx1=lnx−1=−lnx 以及
elnx=x
所以就有上式等於:
1+e−z1=σ(z)
這個函數叫做Sigmoid函數,它的圖形爲:

接下來算一下
z應該是怎樣的
z=lnP(x∣C2)P(C2)P(x∣C1)P(C1)
P(C1∣x)=σ(z),z=lnP(x∣C2)P(C2)P(x∣C1)P(C1)
把相乘的部分變成相加得
z=lnP(x∣C2)P(x∣C1)+lnP(C2)P(C1)
而
P(C2)P(C1)=N1+N2N2N1+N2N1=N2N1
N1代表Class1在訓練數據集中出現的次數,
N2代表Class2在訓練集中出現的次數。
而
P(X∣C1)=(2π)D/21∣Σ1∣1/21exp{−21(x−μ1)T(Σ1)−1(x−μ1)}
P(X∣C2)=(2π)D/21∣Σ2∣1/21exp{−21(x−μ2)T(Σ2)−1(x−μ2)}
lnP(x∣C2)P(x∣C1)=ln(2π)D/21
∣Σ2∣1/21exp{−21(x−μ2)T(Σ2)−1(x−μ2)}(2π)D/21
∣Σ1∣1/21exp{−21(x−μ1)T(Σ1)−1(x−μ1)}=ln∣Σ1∣1/2∣Σ2∣1/2exp{−21[(x−μ1)T(Σ1)−1(x−μ1)−(x−μ2)T(Σ2)−1(x−μ2)]}=ln∣Σ1∣1/2∣Σ2∣1/2−21[(x−μ1)T(Σ1)−1(x−μ1)−(x−μ2)T(Σ2)−1(x−μ2)]
接下來把
(x−μ1)T(Σ1)−1(x−μ1)展開
(x−μ1)T(Σ1)−1(x−μ1)=xT(Σ1)−1x−xT(Σ1)μ1−(μ1)T(Σ1)−1x+(μ1)T(Σ1)−1μ1=xT(Σ1)−1x−2(μ1)T(Σ1)−1x+(μ1)T(Σ1)−1μ1
(x−μ2)T(Σ2)−1(x−μ2)展開:
(x−μ2)T(Σ2)−1(x−μ2)=xT(Σ2)−1x−2(μ2)T(Σ2)−1x+(μ2)T(Σ2)−1μ2
所以
z可以寫成:
z=ln∣Σ1∣1/2∣Σ2∣1/2−21xT(Σ1)−1x+(μ1)T(Σ1)−1x−21(μ1)T(Σ1)−1μ1+21xT(Σ2)−1x−(μ2)T(Σ2)−1x+21(μ2)T(Σ2)−1μ2+lnN2N1
而我們上面說過,如果共用
Σ的話,那麼就有
Σ1=Σ2=Σ
那麼上式有:
z=ln∣Σ1∣1/2∣Σ2∣1/2
−21xT(Σ1)−1x
+(μ1)T(Σ1)−1x−21(μ1)T(Σ1)−1μ1+21xT(Σ2)−1x
−(μ2)T(Σ2)−1x+21(μ2)T(Σ2)−1μ2+lnN2N1=(μ1−μ2)TΣ−121(μ2)T(Σ2)−1μ2+lnN2N1=(μ1−μ2)TΣ−1x−21(μ1)T(Σ1)−1+21(μ2)T(Σ2)−1μ2+lnN2N1<