哈尔滨工业大学计算机学院-模式识别-课程总结(三)-线性判别函数
1. 線性判別函數(shù)
本章介紹的線性判別函數(shù)都?xì)w屬于判別式模型,即對(duì)于分類問題,根據(jù)判別函數(shù)(g(x))的取值進(jìn)行判斷,比如正數(shù)歸為第一類,負(fù)數(shù)與零歸為第二類。關(guān)于判別式模版與生成式模型的區(qū)別可以閱讀我以前的博客,最典型的生成式模型是貝葉斯分類器,這個(gè)在之前的博客中也有介紹。
在介紹具體算法之前,先了解一下線性判別函數(shù)的基本概念。
1.2 線性判別函數(shù)基本概念
對(duì)于線性可分情況,線性判別函數(shù)(g(x))與判別界面(H)如下圖所示:
對(duì)于線性不可分情況:
線性判別函數(shù)的形式化形式為:
[g ( mathbf { x } ) = mathbf { w } ^ { t } mathbf { x } + w _ { 0 }
]
(mathbf { x } = left( x _ { 1 } , x _ { 2 } , ldots , x _ { d } ight) ^ { t }),是特征矢量,(d)是特征維度的大小。
(mathbf { w } = left( w _ { 1 } , W _ { 2 } , dots , W _ { d } ight) ^ { t }),是權(quán)矢量。
(W _ { 0 }) 是偏置。
線性判別函數(shù)的增廣形式(便于書寫,便于設(shè)計(jì)目標(biāo)函數(shù)):
[g ( mathbf { y } ) = mathbf { a } ^ { t } mathbf { y }
]
(mathbf { y } = left( 1 , x _ { 1 } , x _ { 2 } , ldots , x _ { d } ight) ^ { t }),是增廣的特征矢量,在原始向量前插(1)即可。
(mathbf { a } = left( w _ { 0 } , w _ { 1 } , W _ { 2 } dots , W _ { d } ight) ^ { t }),是增廣的權(quán)矢量。
在學(xué)習(xí)該增廣形式的時(shí)候,我曾思考過,既然可以將將線性函數(shù)轉(zhuǎn)化為兩個(gè)向量的點(diǎn)乘,那在深度學(xué)習(xí)中(以pytorch為例),設(shè)計(jì)線性層(nn.Linear)時(shí)為什么還要令參數(shù)bias=True,直接不需要偏置,在輸入向量中拼接一個(gè)維度(值為1)豈不是更加方便。答案當(dāng)然是否定,我仔細(xì)思考后發(fā)現(xiàn),如果這么做的話,對(duì)于每一個(gè)輸入對(duì)會(huì)有一個(gè)獨(dú)立的bias,因?yàn)樾缕唇拥摹?”值會(huì)隨著反向傳播進(jìn)行迭代更新(每個(gè)輸入的更新結(jié)果不同),此時(shí)bias便失去了意義,不再是與線性函數(shù)函數(shù)綁定,而是變成了輸入的一個(gè)特征。
兩類問題的線性判別準(zhǔn)則:
[g ( mathbf { x } ) = mathbf { w } ^ { t } mathbf { x } + w _ { 0 } left{ egin{array} { l l } { > 0 , } & { mathbf { x } in omega _ { 1 } } \ { < 0 , } & { mathbf { x } in omega _ { 2 } } \ { = 0 } & {拒識(shí) } end{array} ight.
]
線性分類器的分類界面三維空間可視化:
該界面有幾個(gè)特點(diǎn):
1.線性分類界面(H)是(d)維空間中的一個(gè)超平面;
2.分類界面將(d)維空間分成兩部分,(R_1),(R_2)分別屬于兩個(gè)類別;
3.判別函數(shù)的權(quán)矢量(w)是一個(gè)垂直于分類界面(H)的矢量,其方向指向區(qū)域(R_1) ;
4.偏置(w_0)與原點(diǎn)到分類界面(H)的距離(r_0)有關(guān):[r _ { 0 } = frac { w _ { 0 } } { | mathbf { w } | }
]
1.3 線性判別函數(shù)的學(xué)習(xí)
以下內(nèi)容全部采用增廣形式的寫法進(jìn)行介紹。
線性判別函數(shù)的學(xué)習(xí)目的,其實(shí)就是想通過(n)個(gè)訓(xùn)練樣本(mathbf { y } _ { 1 } , mathbf { y } _ { 2 } , dots , mathbf { y } _ { n }),來確定一個(gè)判別函數(shù)(g ( mathbf { y } ) = mathbf { a } ^ { t } mathbf { y })的權(quán)矢量(a)。其中n個(gè)樣本集合來源于兩個(gè)不同類別。
在線性可分的情況下,希望得到的判別函數(shù)能夠?qū)⑺械挠?xùn)練樣本正確分類。
線性不可分的情況下,判別函數(shù)產(chǎn)生錯(cuò)誤的概率最小。
判別函數(shù)的非規(guī)范化形式:
[left{ egin{array} { l l } { mathbf { a } ^ { t } mathbf { y } _ { i } > 0 , } & { mathbf { y } _ { i } in omega _ { 1 } } \ { mathbf { a } ^ { t } mathbf { y } _ { i } < 0 , } & { mathbf { y } _ { i } in omega _ { 2 } } end{array} ight.
]
判別函數(shù)的規(guī)范化i形式:
[left{ egin{array} { c l } { mathbf { a } ^ { t } mathbf { y } _ { i } > 0 , } & { mathbf { y } _ { i } in omega _ { 1 } } \ { - mathbf { a } ^ { t } mathbf { y } _ { i } > 0 , } & { mathbf { y } _ { i } in omega _ { 2 } } end{array} ight.
]
在之后的感知器算法、 LMSE中,均依據(jù)規(guī)范化的形式進(jìn)行介紹,規(guī)范化后會(huì)使得目標(biāo)函數(shù)形式比較簡(jiǎn)單。
規(guī)范化是在輸入數(shù)據(jù)上進(jìn)行,將屬于第二個(gè)類別的數(shù)據(jù)乘上(-1)即可。
需要注意,因?yàn)楸竟?jié)內(nèi)容是在函數(shù)的增廣形式下進(jìn)行介紹,因此在規(guī)范化之前需要對(duì)于每個(gè)類別的數(shù)據(jù)都拼接一個(gè)特征“1”。
2. 二分類問題
這里介紹常用的線性分類函數(shù),感知器、LMSE和SVM,其中SVM本身是線性分類器,但當(dāng)其加入核函數(shù)之后可以達(dá)到非線性分類器的效果,實(shí)踐中我們經(jīng)常使用的也是非線性SVM,關(guān)于核函數(shù)的概念會(huì)在后續(xù)博客中介紹。
2.1 感知器算法Perception
在介紹感知器算法之前,先了解一下什么是感知器準(zhǔn)則。
2.1.1 感知器準(zhǔn)則
顯然對(duì)于分類問題,最直觀的準(zhǔn)則函數(shù)定義是最少錯(cuò)分樣本數(shù)準(zhǔn)則:
[J _ { N } ( mathbf { a } ) =樣本集合中被錯(cuò)誤分類的樣本數(shù)
]
其函數(shù)可視化形式如下:
由于該函數(shù)是分段常數(shù)函數(shù),不便于采用梯度下降的學(xué)習(xí)策略進(jìn)行學(xué)習(xí),因此該準(zhǔn)則不是一個(gè)好的選擇。
更好的感知器準(zhǔn)則函數(shù)定義如下所示(著名的感知器準(zhǔn)則):
[J _ { P } ( mathbf { a } ) = sum _ { mathbf { y } in mathcal { Y } } left( - mathbf { a } ^ { t } mathbf { y } ight)
]
[
abla J _ { P } = sum _ { mathbf { y } in mathcal { Y } } ( - mathbf { y } )
]
其函數(shù)可視化形式如下:
個(gè)人認(rèn)為該準(zhǔn)則最大的好處是梯度函數(shù)比較直觀,而且容易計(jì)算,適用于梯度下降學(xué)習(xí)策略。
更加細(xì)節(jié)的感知器訓(xùn)練方式,會(huì)在后續(xù)的實(shí)驗(yàn)中進(jìn)行詳細(xì)介紹,并開源實(shí)驗(yàn)代碼。
2.1.2 感知器算法的特點(diǎn)
感知器算法的特點(diǎn)如下:
當(dāng)樣本線性可分情況下,學(xué)習(xí)率合適時(shí),算法具有收斂性。
收斂速度較慢。
當(dāng)樣本線性不可分情況下,算法不收斂,且無法判斷樣本是否線性可分。
2.2 最小平方誤差算法LMSE
如2.1所說,感知器算法對(duì)于線性可分問題能夠得到很好的結(jié)果,但是對(duì)于線性不可分問題往往不能收斂。按照正常人的思考,即使是對(duì)于一個(gè)線性不可分問題,我們也希望線性判別函數(shù)能夠得到一個(gè)“錯(cuò)誤最小”的解,而不應(yīng)該是算法無法收斂的程度。
基于這種思想,我們得到了一個(gè)在線性可分和線性不可分條件下都有很好性能的折衷算法LMSE。
LMSE將求解線性不等式組的問題轉(zhuǎn)化為求解線性方程組。所謂線性不等式組便是1.3中介紹的規(guī)范化后判別函數(shù)不等式組。我們希望每個(gè)不等式都是大于0的,既然這樣,LMSE設(shè)定了任意的正常數(shù)(b),將不等式轉(zhuǎn)化為等式,只要等式成立,那左邊的多項(xiàng)式一定是大于0的。
LMSE的函數(shù)形式如下所示:
[left( egin{array} { c c c c } { y _ { 10 } } & { y _ { 11 } } & { cdots } & { y _ { 1 d } } \ { y _ { 20 } } & { y _ { 21 } } & { cdots } & { y _ { 2 d } } \ { vdots } & { vdots } & { ddots } & { vdots } \ { y _ { n 0 } } & { y _ { n 2 } } & { cdots } & { y _ { n d } } end{array} ight) left( egin{array} { c } { a _ { 0 } } \ { a _ { 1 } } \ { vdots } \ { a _ { d } } end{array} ight) = left( egin{array} { c } { b _ { 1 } } \ { b _ { 2 } } \ { vdots } \ { b _ { n } } end{array} ight)
]
可簡(jiǎn)化寫為:
[mathbf { Y } mathbf { a } = mathbf { b } , quad mathbf { b } > 0
]
2.2.1 LMSE的準(zhǔn)則函數(shù)
定義誤差矢量(e),用(e)長(zhǎng)度的平方作為準(zhǔn)則函數(shù):
[egin{array} { c } { mathbf { e } = mathbf { Y } mathbf { a } - mathbf { b } } \ { J _ { S } ( mathbf { a } ) = | mathbf { Y } mathbf { a } - mathbf { b } | ^ { 2 } } end{array}
]
我們想該準(zhǔn)則函數(shù)越小越好,這樣不等式的值就越接近于正常數(shù)(b)的值,也就達(dá)到了不等式組恒為正的目的。
2.2.2 LMSE的求解過程
LMSE求解的目的是得到符合要求的權(quán)矢量(a)。
求解方法分為兩種:偽逆求解法與迭代求解法。
偽逆求解法:
LMSE準(zhǔn)則其實(shí)就是誤差平方和最小問題,屬于經(jīng)典的數(shù)學(xué)問題。偽逆求解法其實(shí)是令準(zhǔn)則函數(shù)(J _ { S } ( mathbf { a } ))梯度值為0,從而計(jì)算得到一個(gè)必要條件。
利用數(shù)學(xué)公式推導(dǎo),得到權(quán)矢量的解析解。
[egin{array} { c } {
abla J _ { S } ( mathbf { a } ) = 2 mathbf { Y } ^ { t } ( mathbf { Y } mathbf { a } - mathbf { b } ) = mathbf { 0 } } \ { mathbf { Y } ^ { t } mathbf { Y } mathbf { a } = mathbf { Y } ^ { t } mathbf { b } } \ { mathbf { a } = left( mathbf { Y } ^ { t } mathbf { Y } ight) ^ { - 1 } mathbf { Y } ^ { t } mathbf { b } = mathbf { Y } ^ { + } mathbf { b } } end{array}
]
(mathbf { Y } ^ { + } = left( mathbf { Y } ^ { t } mathbf { Y } ight) ^ { - 1 } mathbf { Y } ^ { t })稱為偽逆矩陣。
之所以這么做是因?yàn)檩斎刖仃?Y)往往是奇異矩陣,也就是不可逆的,因此采用上述的偽逆求解方式。
需要注意的是,(mathbf { Y } ^ { t } mathbf { Y })當(dāng)樣本數(shù)多的時(shí)候一般是可逆的,當(dāng)特征數(shù)大于樣本數(shù)時(shí),基本是不可逆的,也就不能采用這種偽逆求解法。
迭代求解法:
對(duì)于準(zhǔn)則函數(shù)(J _ { S } ( mathbf { a } ))的進(jìn)一步計(jì)算為:
[J _ { s } ( mathbf { a } ) = | mathbf { Y } mathbf { a } - mathbf { b } | ^ { 2 } = sum _ { i = 1 } ^ { n } left( mathbf { a } ^ { prime } mathbf { y } _ { i } - b _ { i } ight) ^ { 2 }
]
準(zhǔn)則函數(shù)的梯度為:
[oldsymbol {
abla } J _ { s } = sum _ { i = 1 } ^ { n } 2 left( mathbf { a } ^ { prime } mathbf { y } _ { i } - b _ { i } ight) mathbf { y } _ { i }
]
迭代求解法就是采用梯度下降的方式進(jìn)行實(shí)現(xiàn),具體學(xué)習(xí)過程在后學(xué)的實(shí)驗(yàn)博客中進(jìn)行介紹。
迭代求解過程中往往省略掉梯度中的系數(shù)(2),因?yàn)樵摂?shù)值可以整合進(jìn)學(xué)習(xí)率中。
實(shí)踐過程中,偽逆求解法的效果不如迭代求解法效果好
2.2.3 LMSE算法的特點(diǎn)
算法的收斂程度依賴于學(xué)習(xí)率的衰減。
算法對(duì)于線性不可分的訓(xùn)練樣本也能夠收斂于一個(gè)均方誤差最小解。
取(b=1)時(shí),當(dāng)樣本數(shù)趨于無窮多時(shí),算法的解以最小均方誤差逼近貝葉斯判別函數(shù)。
當(dāng)訓(xùn)練樣本線性可分的情況下,算法未必收斂于一個(gè)分類超平面。
LMSE在線性可分的問題中,得到的效果不是很好,舉例如下:
2.3 支持向量機(jī)SVM
這里是只是簡(jiǎn)單介紹SVM的基本概念,并解釋其為什么是最優(yōu)線性分類器,具體數(shù)學(xué)推導(dǎo)比較復(fù)雜,不做介紹。
首先思考這樣一個(gè)問題,為什么要引入支持向量機(jī),他與傳統(tǒng)線性分類器之間的區(qū)別是什么?
從這張圖中,可以看見(H_1), (H_2)都是對(duì)于現(xiàn)有訓(xùn)練數(shù)據(jù)中的最優(yōu)分類超平面。
但是對(duì)于未來要預(yù)測(cè)的不存在與馴良樣本集合中的數(shù)據(jù),顯然(H_1)的效果會(huì)更好。因?yàn)樗嚯x各個(gè)類別的“距離最遠(yuǎn)”,魯棒性肯定更強(qiáng)。而(H_2)離紅色樣本太近了,如果某一待預(yù)測(cè)紅色樣本的輸入特征稍微“向左”偏移一點(diǎn),(H_2)分類界面便認(rèn)為其屬于藍(lán)色樣本,分類錯(cuò)誤。
SVM便是出于這種"距離最遠(yuǎn)"的想法,希望能夠得到(H_1)類型的分類界面。
2.3.1 SVM數(shù)學(xué)概念
SVM采用幾何間隔,來描述“距離”這一概念,而幾何間隔的計(jì)算需要引入函數(shù)間隔。
函數(shù)間隔:樣本(x_I)到分類界面(g(x)=0)的函數(shù)間隔(b_i),定義為:
[b _ { i } = left| g left( mathbf { x } _ { i } ight) ight| = left| mathbf { w } ^ { t } mathbf { x } _ { i } + w _ { 0 } ight|
]
幾何間隔;
[gamma _ { i } = frac { b _ { i } } { | mathbf { w } | }
]
如圖所示:
2.3.2 為什么是最優(yōu)線性分類器
樣本集與分類界面之間的幾何間隔$gamma $定義為樣本與分類界面之間幾何間隔的最小值。
最優(yōu)分類界面:給定線性可分樣本集,能夠?qū)颖痉珠_的最大間隔超平面。
SVM就是按照這種思想,希望得到與每個(gè)類別的支持矢量距離最大的分類平面。
距離最優(yōu)分類界面最近的這些訓(xùn)練樣本稱為支持矢量。
最優(yōu)分類界面完全由支持矢量決定,然而支持矢量的尋找比較困難。
SVM作為最優(yōu)線性分類器的介紹如圖所示:
3. 多類問題
本章介紹如何將線性判別函數(shù)應(yīng)用于多類問題。
3.1 處理方式
最常用的處理方式是one versus all的思想,每個(gè)類別與其他所有類別進(jìn)行分類,在sklearn中用“ovr”表示,c類問題變?yōu)閏個(gè)兩類問題,需要c個(gè)線性分類界面。
陰影為拒識(shí)區(qū)域,以下同理。
還有一種方式是one versus one的思想,分別對(duì)每?jī)蓚€(gè)類別進(jìn)行分類,在sklearn中用“ovo”表示,c類問題變?yōu)?c(c-1)/2)個(gè)兩類問題。
最后一種是采用票箱的方式,用c個(gè)線性判別函數(shù)處理c類問題,這種做法不存在拒識(shí)區(qū)域,在實(shí)際的數(shù)學(xué)推導(dǎo)過程中中,這c個(gè)票箱其實(shí)相當(dāng)于(c(c-1)/2)個(gè)判別函數(shù),因?yàn)槭沁x擇c個(gè)票箱中的最大值,也就是需要每個(gè)兩個(gè)票箱進(jìn)行相減計(jì)算,即c(c-1)/2$個(gè)判別函數(shù),在排列組合中表示c個(gè)里取兩個(gè)。
對(duì)于感知器算法,可以用Kesler構(gòu)造法進(jìn)行設(shè)計(jì),也可以稱作擴(kuò)展的感知器算法。
總結(jié)
以上是生活随笔為你收集整理的哈尔滨工业大学计算机学院-模式识别-课程总结(三)-线性判别函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言编程序输出SCHAR_MAX的,运
- 下一篇: Win7能用快捷方式让电脑快速休眠吗