机器学习09支持向量机
支持向量機(jī)(Support Vector Machines)
在監(jiān)督學(xué)習(xí)中,許多學(xué)習(xí)算法的性能都非常類似,因此,重要的不是你該選擇使用學(xué)習(xí)算法 A 還是學(xué)習(xí)算法 B,而更重要的是,
應(yīng)用這些算法時(shí),所創(chuàng)建的大量數(shù)據(jù)在應(yīng)用這些算法時(shí),表現(xiàn)情況通常依賴于你的水平。
比如:你為學(xué)習(xí)算法所設(shè)計(jì)的特征量的選擇,以及如何選擇正則化參數(shù),諸如此類的事。
還有一個(gè)更加強(qiáng)大的算法廣泛的應(yīng)用于工業(yè)界和學(xué)術(shù)界,它被稱為支持向量機(jī)(Support Vector?Machine)。
與邏輯回歸和神經(jīng)網(wǎng)絡(luò)相比,支持向量機(jī),或者簡(jiǎn)稱 SVM,在學(xué)習(xí)復(fù)雜的非線性方程時(shí)提供了一種更為清晰,更加強(qiáng)大的方式。
與Logistics回歸成本函數(shù)的不同:
1、刪去常量?1/m ;
2、Logistic:A+λ×B,SVM:?C×A+B。如果給定λ一個(gè)非常大的值,意味著給予 B 更大的權(quán)重。而這里,就對(duì)應(yīng)于將 C 設(shè)定為非常小的值,那么,相應(yīng)的將會(huì)給 B 比給 A 更大的權(quán)重。因此,這只是一種不同的方式來(lái)控制這種權(quán)衡或者一種不同的方法, 即用參數(shù)來(lái)決定是更關(guān)心第一項(xiàng)的優(yōu)化, 還是更關(guān)心第二項(xiàng)的優(yōu)化。當(dāng)然你也可以把這里的參數(shù) C 考慮成 1/λ,同 1/λ 所扮演的角色相同。
3、Logistic輸出概率,SVM直接預(yù)測(cè)y的值為0還是1。
?成本函數(shù):
接下來(lái)會(huì)考慮一個(gè)特例:將常數(shù) C 設(shè)置成一個(gè)非常大的值。
比如假設(shè) C 的值為100000 或者其它非常大的數(shù),然后來(lái)觀察支持向量機(jī)會(huì)給出什么結(jié)果?
如果 C 非常大,則最小化代價(jià)函數(shù)的時(shí)候,我們將會(huì)很希望找到一個(gè)使第一項(xiàng)為 0 的最優(yōu)解。即不希望出現(xiàn)分錯(cuò)的點(diǎn),相當(dāng)于過(guò)擬合。
此時(shí),兩類點(diǎn)完全分類正確。黑線有更大的距離,這個(gè)距離叫做間距 (margin)。?
當(dāng)畫出這兩條額外的藍(lán)線,看到黑色的決策界和訓(xùn)練樣本之間有更大的最短距離。然而粉線和藍(lán)線離訓(xùn)練樣本就非常近,在分離樣本的時(shí)候就會(huì)比黑線表現(xiàn)差。因此,這個(gè)距離叫做支持向量機(jī)的間距, 而這是支持向量機(jī)具有魯棒性的原因, 因?yàn)樗τ靡粋€(gè)最大間距來(lái)分離樣本。 因此支持向量機(jī)有時(shí)被稱為大間距分類器,。
將這個(gè)大間距分類器中的正則化因子常數(shù) C 設(shè)置的非常大,我記得我將其設(shè)置為了 100000,因此對(duì)這樣的一個(gè)數(shù)據(jù)集,也許我們將選擇這樣的決策界,從而最大間距地分離開(kāi)正樣本和負(fù)樣本。 那么在讓代價(jià)函數(shù)最小化的過(guò)程中,我們希望找出在 y=1 和 y=0 兩種情況下都使得代價(jià)函數(shù)中左邊的這一項(xiàng)盡量為零的參數(shù)。如果我們找到了這 樣的參數(shù),則我們的最小化問(wèn)題便轉(zhuǎn)變成:?
事實(shí)上, 支持向量機(jī)現(xiàn)在要比這個(gè)大間距分類器所體現(xiàn)得更成熟。
?尤其是當(dāng)你使用大間距分類器的時(shí)候,你的學(xué)習(xí)算法會(huì)受異常點(diǎn) (outlier) 的影響。
在這里,如果你加了這個(gè)樣本,為了將樣本用最大間距分開(kāi),也許我最終會(huì)得到這條粉色的線,僅僅基于一個(gè)異常值就將決策界從這條黑線變到這條粉線,這實(shí)在是不明智的。而如果正則化參數(shù) C,設(shè)置的非常大,這事實(shí)上正是支持向量機(jī)將會(huì)做的。
但是如果 C?設(shè)置的小一點(diǎn),則你最終會(huì)得到這條黑線。
因此,大間距分類器的描述,僅僅是從直觀上給出了正則化參數(shù) C 非常大的情形,同時(shí),要提醒你 C 的作用類似于 1/λ,λ是我們之前使用過(guò)的正則化參數(shù)。這只是C 非常大的情形,或者等價(jià)地λ非常小的情形。你最終會(huì)得到類似粉線這樣的決策界,但是實(shí)際上應(yīng)用支持向量機(jī)的時(shí)候,當(dāng) C 不是非常非常大的時(shí)候,它可以忽略掉一些異常點(diǎn)的影響,得到更好的決策界。甚至當(dāng)你的數(shù)據(jù)不是線性可分的時(shí)候,支持向量機(jī)也可以給出好的結(jié)果。?
回顧 C=1/λ,因此:?
C 較大時(shí),相當(dāng)于 λ 較小,可能會(huì)導(dǎo)致過(guò)擬合,高方差。?
C 較小時(shí),相當(dāng)于 λ 較大,可能會(huì)導(dǎo)致低擬合,高偏差。?
這節(jié)課給出了一些關(guān)于為什么支持向量機(jī)被看做大間距分類器的直觀理解。它用最大間距將樣本區(qū)分開(kāi),盡管從技術(shù)上講,這只有當(dāng)參數(shù) C 是非常大的時(shí)候是真的,但是它對(duì)于理解支持向量機(jī)是有益的。?
—————————————————————————————————————————————————————————
?Mathematics Behind Large Margin Classification
—————————————————————————————————————————————————————————————————————————————
核函數(shù)
回顧我們之前討論過(guò)可以使用高級(jí)數(shù)的多項(xiàng)式模型來(lái)解決無(wú)法用直線進(jìn)行分隔的分類問(wèn)題:
為了獲得上圖所示的判定邊界,我們的模型可能是:
可以用一系列的新的特征 f 來(lái)替換模型中的每一項(xiàng)。例如令:
得到 hθ(x)=f1+f2+...+fn。
然而,除了對(duì)原有的特征進(jìn)行組合以外,有沒(méi)有更好的方法來(lái)構(gòu)造 f1,f2,f3?
可以利用核函數(shù)來(lái)計(jì)算出新的特征。
這里是一個(gè)高斯核函數(shù)(Gaussian?Kernel)。?
注:這個(gè)函數(shù)與正態(tài)分布沒(méi)什么實(shí)際上的關(guān)系,只是看上去像而已。
如果使用高斯核函數(shù),那么在使用之前進(jìn)行特征縮放是非常必要的。?
另外, 支持向量機(jī)也可以不使用核函數(shù), 不使用核函數(shù)又稱為線性核函數(shù) (linear kernel)。?
當(dāng)不采用非常復(fù)雜的函數(shù), 或者訓(xùn)練集特征非常多而實(shí)例非常少的時(shí)候, 可以采用這種不帶核函數(shù)的支持向量機(jī)。
?
支持向量機(jī)的兩個(gè)參數(shù) C 和 σ 的影響:?
C 較大時(shí),相當(dāng)于 λ 較小,可能會(huì)導(dǎo)致過(guò)擬合,高方差;?
C 較小時(shí),相當(dāng)于 λ 較大,可能會(huì)導(dǎo)致低擬合,高偏差;?
σ 較大時(shí),導(dǎo)致高方差;?
σ 較小時(shí),導(dǎo)致高偏差。
—————————————————————————————————————————————————————————
使用支持向量機(jī)
強(qiáng)烈建議使用高優(yōu)化軟件庫(kù)中的一個(gè), 而不是嘗試自己落實(shí)一些數(shù)據(jù)。
有許多好的軟件庫(kù),我正好用得最多的兩個(gè)是 liblinear 和 libsvm。
在高斯核函數(shù)之外我們還有其他一些選擇,如:?
多項(xiàng)式核函數(shù)(Polynomial Kernel)?
字符串核函數(shù)(String kernel)?
卡方核函數(shù)( chi-square kernel)?
直方圖交集核函數(shù)(histogram intersection kernel)?
等等... ?
這些核函數(shù)的目標(biāo)也都是根據(jù)訓(xùn)練集和地標(biāo)之間的距離來(lái)構(gòu)建新特征。
這些核函數(shù)需要滿足 Mercer's 定理,才能被支持向量機(jī)的優(yōu)化軟件正確處理。
多類分類問(wèn)題?
假設(shè)我們利用之前介紹的一對(duì)多方法來(lái)解決一個(gè)多類分類問(wèn)題。 如果一共有 k 個(gè)類, 則我們需要 k 個(gè)模型,以及 k 個(gè)參數(shù)向量 θ。我們同樣也可以訓(xùn)練 k 個(gè)支持向量機(jī)來(lái)解決多類分類問(wèn)題。 但是大多數(shù)支持向量機(jī)軟件包都有內(nèi)置的多類分類功能, 我們只要直接使用即可。 ?
盡管你不去寫你自己的 SVM(支持向量機(jī))的優(yōu)化軟件,但是你也需要做幾件事:?
1、是提出參數(shù) C 的選擇。即誤差/方差在這方面的性質(zhì)。?
2、你也需要選擇內(nèi)核參數(shù)或你想要使用的相似函數(shù),其中一個(gè)選擇是:選擇不需要任何內(nèi)核參數(shù),沒(méi)有內(nèi)核參數(shù)的理念,也叫線性核函數(shù)。因此,如果有人說(shuō)他使用了線性核的 SVM(支持向量機(jī)),這就意味這他使用了不帶有核函數(shù)的 SVM(支持向量機(jī))。?
Logistics和SVM該如何選擇:
下面是一些普遍使用的準(zhǔn)則:?
m 為訓(xùn)練樣本數(shù),n 為特征數(shù)。?
(1)如果相較于 m 而言,n 要大許多,即訓(xùn)練集數(shù)據(jù)量不夠支持我們訓(xùn)練一個(gè)復(fù)雜的非線性模型,我們選用邏輯回歸模型或者不帶核函數(shù)的支持向量機(jī)。?
(2)如果 n 較小,而且 m 大小中等,例如 n 在 1-1000 之間,而 m 在 10-10000 之間,使用高斯核函數(shù)的支持向量機(jī)。?
(3)如果 n 較小,而 m 較大,例如 n 在 1-1000 之間,而 m 大于 50000,則使用支持向量機(jī)會(huì)非常慢,解決方案是創(chuàng)造、增加更多的特征,然后使用邏輯回歸或不帶核函數(shù)的支持向量機(jī)。?
邏輯回歸和不帶核函數(shù)的支持向量機(jī)它們都是非常相似的算法, 不管是邏輯回歸還是不帶核函數(shù)的 SVM,通常都會(huì)做相似的事情,并給出相似的結(jié)果。
值得一提的是, 神經(jīng)網(wǎng)絡(luò)在以上三種情況下都可能會(huì)有較好的表現(xiàn), 但是訓(xùn)練神經(jīng)網(wǎng)絡(luò)可能非常慢,選擇支持向量機(jī)的原因主要在于它的代價(jià)函數(shù)是凸函數(shù),不存在局部最小值。 ?
通常更加重要的是:你有多少數(shù)據(jù),你有多熟練是否擅長(zhǎng)做誤差分析和排除學(xué)習(xí)算法, 指出如何設(shè)定新的特征變量和找出其他能決定你學(xué)習(xí)算法的變量等方面,通常這些方面會(huì)比你使用邏輯回歸還是 SVM 這方面更加重要。
總結(jié)
以上是生活随笔為你收集整理的机器学习09支持向量机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 机器学习08机器学习系统设计
- 下一篇: 机器学习10聚类