該系列文章為,觀看“吳恩達機器學(xué)習(xí)”系列視頻的學(xué)習(xí)筆記。雖然每個視頻都很簡單,但不得不說每一句都非常的簡潔扼要,淺顯易懂。非常適合我這樣的小白入門。
本章含蓋
- 13.1 優(yōu)化目標(biāo)
- 13.2 直觀上對大間隔的理解
- 13.3 大間隔分類器的數(shù)學(xué)原理
- 13.4 核函數(shù)1
- 13.5 核函數(shù)2
- 13.6 使用SVM
到目前為止,你已經(jīng)見過一系列不同的學(xué)習(xí)算法。在監(jiān)督學(xué)習(xí)中,許多學(xué)習(xí)算法的性能都非常類似,因此,重要的不是你該選擇使用學(xué)習(xí)算法A還是學(xué)習(xí)算法B,而更重要的是,應(yīng)用這些算法時,所使用的數(shù)據(jù)量。這就體現(xiàn)你使用這些算法時的技巧了,比如:你為學(xué)習(xí)算法所設(shè)計的特征量的選擇,以及如何選擇正則化參數(shù),諸如此類的事。
還有一個更加強大的算法廣泛的應(yīng)用于工業(yè)界和學(xué)術(shù)界,它被稱為支持向量機(Support Vector Machine)。與邏輯回歸和神經(jīng)網(wǎng)絡(luò)相比,支持向量機,或者簡稱SVM,在學(xué)習(xí)復(fù)雜的非線性方程時提供了一種更為清晰,更加強大的方式。
為了描述支持向量機,事實上,我將會從邏輯回歸開始展示我們?nèi)绾巫鲆稽c點修改來得到一個支持向量機。


因此對于總的代價函數(shù),我們通常會對所有的訓(xùn)練樣本從第1項到第m項進行求和
-
y = 1 的時候
新的代價函數(shù),從 z = 1 開始,右邊都是平的(紫色的線),然后再畫一條和logistic回歸幅度相似的一條直線,但是它是一條直線。
不要太在意左邊這條線的斜率,這并不是很重要。這就是當(dāng) y = 1 時,我們要使用的新的代價函數(shù)。新的代價函數(shù)會使支持向量機有計算上的優(yōu)勢,并使得之后的優(yōu)化問題變得簡單。
新的函數(shù)叫 cost_1(z)。這個下標(biāo) 1 表示,y = 1. -
當(dāng) y = 0 時,我們?nèi)?z = -1 開始,左邊都是平的
新的函數(shù)叫 cost_0(z)。這個下標(biāo) 0 表示,y = 0.

按照慣例,對于支持向量機來說,一些東西的寫法略有不同。比如,代價函數(shù)的參數(shù)會稍微有些不同。
首先,我們要除去1/m這一項。這是因為,在使用‘支持向量機’和‘logistic回歸’的時候,人們遵循的慣例略有不同。我的意思是,我們僅僅是去除 1/m 這一項,這樣同樣能得到 θ 的最優(yōu)值。因為 1/m 只是一個常數(shù)項,因此在解決這個最小化問題的時候,前面無論是否有 1/m 這一項,我最后都能得到相同的 θ 最優(yōu)值。
第二個符號上的變化,同樣只是相比于logistic回歸,這樣的表達在SVM中更常用。
在logistic回歸中,我們的目標(biāo)函數(shù)有兩項。

b)正則化項

因此,對于邏輯回歸,在目標(biāo)函數(shù)中,我們有兩項:第一個是訓(xùn)練樣本的代價,第二個是我們的正則化項,我們不得不去用這一項來平衡。這就相當(dāng)于我們想要最小化A加上正則化參數(shù)λ,然后乘以其他項B對吧?這里的A表示這里的第一項,同時我用B表示第二項,但不包括λ,我們不是優(yōu)化這里的A+λ×B。我們所做的是通過設(shè)置不同正則參數(shù)λ達到優(yōu)化目的。這樣,我們就能夠權(quán)衡對應(yīng)的項,以使得訓(xùn)練樣本擬合的更好,即最小化A。還是保證正則參數(shù)足夠小,也即更多的關(guān)注B項。
對于SVM而言,按照慣例,我們會用一個不同的參數(shù),我們不再用這里的 λ 來控制第一項與第二項的相對權(quán)重。而是用一個不同的參數(shù) C,同時改為優(yōu)化目標(biāo)為:C×A+B。
在邏輯回歸中,如果給定 λ,一個非常大的值,意味著給予B更大的權(quán)重。而這里,就對應(yīng)于將 C 設(shè)定為非常小的值,那么,相應(yīng)的將會給B比給A更大的權(quán)重。因此,這只是一種不同的方式來控制這種權(quán)衡或者一種不同的方法,即用參數(shù)來決定是更關(guān)心第一項的優(yōu)化,還是更關(guān)心第二項的優(yōu)化。
當(dāng)然你也可以把這里的參數(shù)C 想象成是 1/λ。但并不是說,??這兩個表達式是相等的。不是說 C = 1/λ,并不是這樣。而是說明,如果 C = 1/λ,那么這兩個優(yōu)化目標(biāo)應(yīng)該得到相同的值,也就是相同的最優(yōu)值 θ。


所以,如果 θ 的轉(zhuǎn)置乘以 X 大于等于 0,那么假設(shè)函數(shù)就會輸出1。反之,輸出 0 。
13.2 直觀上對大間隔的理解
有時候,“支持向量機”又被稱為“大間距分類器”

事實上,如果你有一個正樣本y=1,則其實我們僅僅要求 θ^T * X 大于等于0,就能將該樣本恰當(dāng)分出,這是因為如果 θ^T * X>0 大的話,我們的模型代價函數(shù)值為0,類似地,如果你有一個負(fù)樣本,則僅需要 θ^T * X<=0 就會將負(fù)例正確分離,但是,支持向量機的要求更高,不僅僅要能正確分開輸入的樣本,即不僅僅要求 θ^T * X>0,我們需要的是比0值大很多,比如大于等于1,我也想這個比0小很多,比如我希望它小于等于-1,這就相當(dāng)于在支持向量機中嵌入了一個額外的安全因子,或者說安全的間距因子。
當(dāng)然,邏輯回歸做了類似的事情。但是讓我們看一下,在支持向量機中,這個因子會導(dǎo)致什么結(jié)果。具體而言,我接下來會考慮一個特例。我們將這個常數(shù)C設(shè)置成一個非常大的值。比如我們假設(shè)C的值為100000或者其它非常大的數(shù),然后來觀察支持向量機會給出什么結(jié)果?


如果 C非常大,則最小化代價函數(shù)的時候,我們迫切希望能找到一個值,使得第一項等于 0。讓我們試著在這種情況下,理解優(yōu)化問題。也就是,要怎么做才能使第一項等于0,當(dāng)我們把C的值設(shè)置成非常大的常數(shù)。這個例子能夠更直觀的讓我們感受到,支持向量機模型的直觀地理解支持向量機學(xué)習(xí)得到的假設(shè)模型是什么樣的。
因此,讓我們嘗試在代價項的第一項為0的情形下理解該優(yōu)化問題。

它的限制條件為:
當(dāng) y^(i) = 1 時,Θ^T * x^(i) >= 1
當(dāng) y^(i) = 0 時,Θ^T * x^(i) <= -1
這樣當(dāng)你求解這個優(yōu)化問題的時候,當(dāng)你最小化這個關(guān)于變量θ的函數(shù)的時候,你會得到一個非常有趣的決策邊界。

或者我們可以畫一條更差的決策界,這是另一條決策邊界(粉色),可以將正樣本和負(fù)樣本分開,但僅僅是勉強分開,這些決策邊界看起來都不是特別好的選擇,支持向量機將會選擇這個黑色的決策邊界,相較于之前我用粉色或者綠色畫的決策界。這條黑色的看起來好得多,黑線看起來是更穩(wěn)健的決策界。在分離正樣本和負(fù)樣本上它顯得的更好。

然而粉線和藍線離訓(xùn)練樣本就非常近,在分離樣本的時候就會比黑線表現(xiàn)差。因此,這個距離叫做支持向量機的間距,而這是支持向量機具有魯棒性的原因,因為它努力用一個最大間距來分離樣本。因此支持向量機有時被稱為大間距分類器,而這其實是求解上一頁幻燈片上優(yōu)化問題的結(jié)果。
下一節(jié)視頻會講到,為什么??這樣的優(yōu)化能得到這條更大間距的黑線。

在本節(jié)課中關(guān)于大間距分類器,我想講最后一點:我們將這個大間距分類器中的正則化因子常數(shù)C設(shè)置的非常大,我記得我將其設(shè)置為了100000,因此對這樣的一個數(shù)據(jù)集,也許我們將選擇這樣的決策界,從而最大間距地分離開正樣本和負(fù)樣本。

事實上,支持向量機現(xiàn)在要比這個大間距分類器所體現(xiàn)得更加復(fù)雜,尤其是當(dāng)你使用大間距分類器的時候,你的學(xué)習(xí)算法會受異常點(outlier) 的影響。比如我們加入一個額外的正樣本。(粉色線)
在這里,如果你加了這個樣本,為了將樣本用最大間距分開,也許我最終會得到一條類似這樣的決策界,對么?就是這條粉色的線,僅僅基于一個異常值,僅僅基于一個樣本,就將我的決策界從這條黑線變到這條粉線,這實在是不明智的。而如果正則化參數(shù)C,設(shè)置的非常大,那么SVM就會將決策邊界從黑線變成這條紫紅線。

但如果,你不把C設(shè)得那么大,那么最后你得到的還是這條黑線。

當(dāng)然數(shù)據(jù)如果不是線性可分的,則支持向量機也會將它們恰當(dāng)分開。
因此,大間距分類器的描述,只有在正則化參數(shù)C非常大的情形,才能讓你直觀的理解。大間距分類器的作用,同時也提醒你C的作用類似于1/λ,λ是我們之前使用過的正則化參數(shù)。這只是C非常大的情形,或者等價地 λ 非常小的情形。你最終會得到類似粉線這樣的決策界,但是實際上應(yīng)用支持向量機的時候,當(dāng)C不是非常非常大的時候,它可以忽略掉一些異常點的影響,得到更好的決策界。甚至當(dāng)你的數(shù)據(jù)不是線性可分的時候,支持向量機也可以給出好的結(jié)果。
回顧 C=1/λ,因此:
C 較大時,相當(dāng)于 λ 較小,可能會導(dǎo)致過擬合,高方差。
C 較小時,相當(dāng)于 λ 較大,可能會導(dǎo)致低擬合,高偏差。
13.3 大間隔分類器的數(shù)學(xué)原理
復(fù)習(xí):向量內(nèi)積的性質(zhì)

『 ||u|| 』:u的范數(shù),或長度(即,這個向量的長度):


因此可以將u^T * v=p?||u||,或者說u的長度。這是計算內(nèi)積的一種方法。

u^T * v = u_1×v_1+u_2×v_2
u^T * v :將 v 投影到 u 上。
v^T * u :將 u 投影到 v 上。
得到的結(jié)果是一樣的。
申明一點,在這個等式中u的范數(shù)是一個實數(shù),p也是一個實數(shù),因此u^T v就是兩個實數(shù)正常相乘。

最后一點,需要注意的就是p值,p事實上是有符號的,即它可能是正值,也可能是負(fù)值。
u和v之間的夾角大于90度,則如果將v投影到u上,會得到??這樣的一個投影,這是p的長度,在這個情形下我們?nèi)匀挥衭^T v是等于p乘以u的范數(shù)。唯一一點不同的是p在這里是負(fù)的。
在內(nèi)積計算中,如果u和v之間的夾角小于90度,那么那條紅線的長度p是正值。然而如果這個夾角大于90度,則p將會是負(fù)的。
我們接下來將會使用這些關(guān)于向量內(nèi)積的性質(zhì)試圖來理解支持向量機中的目標(biāo)函數(shù)。


為了講解方便,我做一點簡化,令θ_0=0;將特征數(shù)n置為2,因此我們僅有兩個特征x_1,x_2。

我們只有兩個參數(shù)θ_1,θ_2。你可能注意到括號里面的這一項是向量θ的范數(shù),或者說是向量θ的長度。
當(dāng)然你可以將其寫作θ_0,θ_1,θ_2,如果θ_0=0,那就是θ_1,θ_2的長度。在這里我將忽略θ_0,這樣來寫θ的范數(shù),它僅僅和θ_1,θ_2有關(guān)。但是,數(shù)學(xué)上不管你是否包含,其實并沒有差別,因此在我們接下來的推導(dǎo)中去掉θ_0不會有影響這意味著我們的目標(biāo)函數(shù)是等于 1/2 * ||θ||^2。因此支持向量機做的全部事情,就是極小化參數(shù)向量θ范數(shù)的平方,或者說長度的平方。

我們考察一個單一的訓(xùn)練樣本,我有一個正樣本在這里,用一個叉來表示這個樣本x^(i), 意思是在水平軸上取值為x_1^(i), 在豎直軸上取值為x_2^(i)。
我將它稱為p^(i)用來表示這是第 i 個訓(xùn)練樣本在參數(shù)向量θ上的投影。

這里表達的意思是:這個 θ^T * x^(i) >= 1 或者 θ^T * x^(i) <= -1 的,約束是可以被 p^(i) * x >= 1 這個約束所代替的。因為 θ^T * x^(i) = p^(i) * ||θ||

需要提醒一點,我們之前曾講過這個優(yōu)化目標(biāo)函數(shù)可以被寫成等于 1/2 * ||θ||^2

對于??這樣選擇的參數(shù)θ,可以看到參數(shù)向量θ事實上是和決策界是90度正交的。
因為:夾角大于90度時,內(nèi)積為整數(shù);夾角小于于90度時,內(nèi)積為負(fù)數(shù);那么,夾角等于90度時,內(nèi)積為0。這樣,代價函數(shù)也會為0。
順便提一句θ_0=0的簡化僅僅意味著決策界必須通過原點(0,0)。

我們假設(shè)它是我的第一個樣本x^(1), 如果我考察這個樣本到參數(shù)θ的投影,投影是這個短的紅線段,就等于p^(1), 它非常短。類似地,這個樣本如果它恰好是x^(2), 我的第二個訓(xùn)練樣本,則它到θ的投影在這里。我將它畫成粉色,這個短的粉色線段是p^(2), 即第二個樣本到我的參數(shù)向量θ的投影。因此,這個投影非常短。p^(2) 事實上是一個負(fù)值,p^(2) 是在相反的方向,這個向量和參數(shù)向量θ的夾角大于90度,p^(2)的值小于0。
我們會發(fā)現(xiàn)這些p^(i)將會是非常小的數(shù),因此當(dāng)我們考察優(yōu)化目標(biāo)函數(shù)的時候,對于正樣本而言,我們需要 p^(i) * ||θ|| >=1 ,但是如果 p^(i)在這里非常小,那就意味著我們需要θ的范數(shù)非常大。類似地,對于負(fù)樣本而言我們需要 p^(i) * ||θ|| <= -1 ,p^(2)會是一個非常小的數(shù),因此唯一的辦法就是θ的范數(shù)變大。
但是我們的目標(biāo)函數(shù)是希望找到一個參數(shù)θ,它的范數(shù)是小的。因此,這看起來不像是一個好的參數(shù)向量θ的選擇。
相反的,來看一個不同的決策邊界。比如說,支持向量機選擇了這個決策界,現(xiàn)在狀況會有很大不同。

現(xiàn)在如果你考察你的數(shù)據(jù)在橫軸x上的投影,你會注意到現(xiàn)在p^(1) 和p^(2)這些投影長度是長多了。如果我們?nèi)匀灰獫M足這些約束, p^(i) * ||θ|| >=1 ,則因為p^(1)變大了,θ的范數(shù)就可以變小了。因此這意味著通過選擇這個的決策界,而不是前面的那個,支持向量機可以使參數(shù)θ的范數(shù)變小很多。
因此,如果我們想令θ的范數(shù)變小,從而令θ范數(shù)的平方變小,就能讓支持向量機選擇右邊的決策界。這就是支持向量機如何能有效地產(chǎn)生大間距分類的原因。

總結(jié)一下,看這條綠線,這個綠色的決策界。我們希望正樣本和負(fù)樣本投影到θ的值足夠大。要做到這一點的唯一方式,就是使這條綠線周圍保持大間距(這是正樣本和負(fù)樣本之間的間隔)。這個間隔的值就是p^(1), p^(2), p^(3) 等等的值。因此,通過讓間距變大,使p^(1), p^(2), p^(3) 的值變大。支持向量機最終可以找到一個較小的θ范數(shù)。這正是支持向量機中最小化目標(biāo)函數(shù)的目的。這也就是為什么支持向量機最終會找到大間距分類器的原因。因為它試圖極大化這些p^(i)的范數(shù),它們是訓(xùn)練樣本到?jīng)Q策邊界的距離。 最后一點,我們的推導(dǎo)自始至終使用了這個簡化假設(shè),就是參數(shù)θ_0=0。

就像我之前提到的。這個的作用是:θ_0=0的意思是我們讓決策界通過原點。如果你令θ_0不是0的話,含義就是你希望決策界不通過原點。我將不會做全部的推導(dǎo)。實際上,支持向量機產(chǎn)生大間距分類器的結(jié)論,會被證明同樣成立,證明方式是非常類似的,是我們剛剛做的證明的推廣。
之前視頻中說過,即便θ_0不等于0,支持向量機要做的事情都是優(yōu)化這個目標(biāo)函數(shù)對應(yīng)著C值非常大的情況,但是可以說明的是,即便θ_0不等于0,支持向量機仍然會找到正樣本和負(fù)樣本之間的大間距分隔。
當(dāng)C非常大的情況下,為了最小化 SVM 的目標(biāo)函數(shù):
我們假設(shè),第一項為0,則,需要的限制條件就是:
當(dāng) y^(i) = 1 時,Θ^T * x^(i) >= 1
當(dāng) y^(i) = 0 時,Θ^T * x^(i) <= -1

13.4 核函數(shù)1
概述:
改造支持向量機方法,來構(gòu)造復(fù)雜的非線性分類器。主要的技術(shù)就是稱之為核的東西。
非線性分界問題:

另一種方式:我們可以用一系列的新的特征 f 來替換模型中的每一項。例如令: f_1=x_1,f_2=x_2,f_3=x_1 x_2,f_4=x_12,f_5=x_22
...得到h_θ (x)=f_1+f_2+...+f_n。一種方法:使用高級數(shù)的多項式模型。
另一種方式:我們可以用一系列的新的特征 f 來替換模型中的每一項。例如令: f_1=x_1,f_2=x_2,f_3=x_1 x_2,f_4=x_12,f_5=x_22
...得到h_θ (x)=f_1+f_2+...+f_n。
然而,除了對原有的特征進行組合以外,有沒有更好的方法來構(gòu)造f_1,f_2,f_3?我們可以利用核函數(shù)來計算出新的特征。
我們之前看到的這些高階項是一種得到更多特征的方式。但問題是,我們可以有很多不同的特征選擇,或者可能存在比這些高階多項式更好的特征。因為,我們并不完全清楚這些高階多項式,是不是我們真正需要的。所以,是否有更好的或不同的特征選擇可以放到假設(shè)函數(shù)中了?
有一個可以構(gòu)造新特征f_1,f_2,f_3的方法:

給定一個訓(xùn)練實例x,將 f_1 定義為一種相似度的度量,即,度量訓(xùn)練樣本 x 與 第一個標(biāo)志位 l^(1) 的相似度:

『 ||x - l^(i) ||^2 』:點 x 與標(biāo)記 l^(i) 之間的歐式距離。
相似度函數(shù)就是,用數(shù)學(xué)家的術(shù)語來說就是,一個核函數(shù)。這里用的核函數(shù),實際上是高斯核函數(shù)。
PS:我們是可以有不同的相識度度量函數(shù)的。
然后,我們一般不這么寫 ?? similarity(x,l(1))。而是用這個記號表示核函數(shù):k(x, l(i))
我們看下核函數(shù)到底做了什么?

如果一個訓(xùn)練實例x與地標(biāo)L之間的距離近似于0,則新特征 f 近似于??^(?0)=1;即,f 近似于 1.
如果訓(xùn)練實例??與地標(biāo)??之間距離較遠(yuǎn),則??近似于???(一個較大的數(shù))=0。即,f 近似于 0.
因此,這些特征做的是衡量 x 到標(biāo)記 l 的相似度。如果 x 非常接近于標(biāo)記,那么特征 f 非常接近于 1;如果 x 離標(biāo)記非常遠(yuǎn),那么特征 f 非常接近于 0。
我們利用x的各個特征與我們預(yù)先選定的地標(biāo)(landmarks) l(1),l(2),l^(3)的近似程度來選取新的特征f_1,f_2,f_3。
假設(shè),我們有兩個特征變量 x_1 和 x_2,σ^2 = 1
f_1 是圖中的縱坐標(biāo)。給定一個特定的樣本 x(紅色)。在這個高度上可以看到f_1相應(yīng)的值。即 x 到 l^(1) 的距離。
l^(1) 即,圖中的峰值。
??的3D曲線圖,即為 給定樣本 x 到 l^(1) 的距離。因此,當(dāng) x =[3;5]的時候,它就處于峰值,縱坐標(biāo)的值就為1,即,f_1 = 1
當(dāng)它離 [3;5] 越遠(yuǎn)時,值也就約解決 0。即,f_1 = 0.

這就是特征 f_1 : 它衡量了 x 到第一個標(biāo)記有多近。這個值在 0 到 1 之間。
我們還要講的內(nèi)容是:我們可以看到改變 σ^2 的值能產(chǎn)生多大的影響。
σ^2 是高斯函數(shù)的參數(shù)。當(dāng)你改變它,你會得到略微不同的結(jié)果。
假設(shè),σ^2 = 0.5 ,你會發(fā)現(xiàn) 曲線圖還是類似的,只是這個突起的寬度變窄了。因此,當(dāng) σ^2 變小時,我們從峰值開始往周圍移動,特征 f_1 下降到 0 的速度會變得更快;與此相反,當(dāng)你增大 σ^2 的值的時候,那么我們從 峰值 開始往周圍移動,特征 f_1 下降到 0 的速度會變慢。
因此,講完特征的定義,我們看看,能得到什么樣的預(yù)測函數(shù)。
給出一個樣本 x ,我們準(zhǔn)備計算出三個特征變量。同時假設(shè),我們已經(jīng)知道 θ 參數(shù)的值。

紫紅色 樣本 得到的 預(yù)測結(jié)果是 1;藍色 樣本 得到的 預(yù)測結(jié)果是 0
實際上,如果你觀察這個決策邊界,我們會發(fā)現(xiàn),對于接近 l^(1) 和 l^(2) 的點,我們的預(yù)測值是1,反之為0.
最終,我們會得到這個預(yù)測函數(shù)的判別邊界(紅線)。這就是我們?nèi)绾味x 標(biāo)記點 和 核函數(shù),來訓(xùn)練出非常復(fù)雜的非線性決策邊界的方法。(我們通過 標(biāo)記點 和 核函數(shù) 來定義新的特征變量,從而訓(xùn)練復(fù)雜的非線性邊界),我們可以將通過此得到的新的特征變量 f 用在支持向量機中。
13.5 核函數(shù)2
選擇標(biāo)記點:
在實際應(yīng)用時,在給定學(xué)習(xí)問題中,怎么選取標(biāo)記點?
我們的數(shù)據(jù)集中,有一些正樣本和一些負(fù)樣本。我們通常是根據(jù)訓(xùn)練集的數(shù)量選擇地標(biāo)的數(shù)量,即如果訓(xùn)練集中有m個實例,則我們選取m個地標(biāo),并且令:l^(1) = x^(1), l^(2) = x^(2), ....., l^(m) = x^(m)。這樣做的好處在于:這說明特征函數(shù)基本上是在描述每一個樣本距離到樣本集中其他樣本的距離。

給定樣本 x ,可以屬于 交叉驗證集 或者屬于 測試集。

那么 f 向量,就是用于描述訓(xùn)練樣本的特征向量。
每個 特征 f 都是一個向量,向量維度就是 m + 1。

f ∈ R^(m+1) : f 是 m+1 維向量。因為,我們有 m 個樣本,再加上一個 f_0.
Θ ∈ R^(m+1) : 參數(shù)向量為 m+1維。是因為,我們有 m 個 特征變量變量 f。
以上就是,已知參數(shù) θ 時,怎么做出預(yù)測的過程。
但是,怎么得到參數(shù) θ 了?
當(dāng)你使用 SVM 學(xué)習(xí)算法,尤其是,當(dāng)你解決??這個最小化問題的時候,你已經(jīng)最小化了參數(shù) θ 。在 C 倍的該代價函數(shù)中。

如果,f 并不是新特征變量,那么 n = m + 1。 這個 +1 來自于 截距。同時,正則化項,并不對 θ_0 進行懲罰,因為 θ_0 始終為 1 。所以,j 從 1 開始。 但是,在支持向量機算法上,我們做??這樣的 修改:

,如果我們忽略 θ_0 的話。
同時,大多數(shù)支持向量機在實現(xiàn)的時候,我們使用 θ^T * M * θ 替換 θ^T * θ,其中M是根據(jù)我們選擇的核函數(shù)而不同的一個矩陣。這樣做的原因是為了簡化計算。
θ^T * M * θ :這其實是另一種略有區(qū)別的距離度量方法。
我們使用這個略有區(qū)別的度量方法來取代 θ 模的平方( θ^T * θ = || θ ||^2 )。
這意味著,我們最小化了一種類似的度量,這個參數(shù) θ 的縮放版本,并取決于核函數(shù)。
??這個數(shù)學(xué)細(xì)節(jié)(即,θ^T * M * θ ),使得支持向量機能夠更有效率的運行。
那,為什么支持向量機做這種修改,可以使它應(yīng)用更大的訓(xùn)練集?
因為,比如,當(dāng)你的訓(xùn)練集有 10000 個樣本時,那么我們將會有 10000 個標(biāo)記點。θ 也就是 10000 維向量?;蛟S,這時這么做還行,但是,當(dāng) m 非常非常非常大時,那么求解這么多參數(shù),對于支持向量機的優(yōu)化程序而言。這時求解這些參數(shù)的最小化問題的代價會非常高。而 “M*θ” ,實際上細(xì)微改變了最后一項,使得最終的優(yōu)化目標(biāo) 與 直接最小化 θ模的平方 略有區(qū)別。
你可以認(rèn)為,這個具體的實現(xiàn)細(xì)節(jié)盡管略微的改變了優(yōu)化目標(biāo),但它主要是為了計算效率
btw,你可能會想為什么我們不將核函數(shù)的這個想法應(yīng)用到其他算法,比如邏輯回歸上。事實證明,如果你愿意的話,確實可以將核函數(shù)這個想法應(yīng)用于定義特征向量,將標(biāo)記點之類的技術(shù)用于邏輯回歸算法。
但是用于支持向量機的計算技巧不能較好的推廣到其他算法,諸如邏輯回歸上。
所以,將核函數(shù)應(yīng)用于邏輯回歸時會變得非常慢。相比之下,這些計算技巧(比如,具體化技術(shù) θ^T * M * θ 對這些細(xì)節(jié)的修改以及支持向量軟件的實現(xiàn)細(xì)節(jié),使得支持向量機可以和核函數(shù)相得益彰。而邏輯回歸和核函數(shù)則運行得十分緩慢。更何況它們還不穩(wěn)定,使用那些高級優(yōu)化技巧,因為這些技巧是人們專門為使用核函數(shù)的支持向量機開發(fā)的。
如,前面所說,我不建議自己寫矩陣求逆函數(shù),或者平方根函數(shù),以及最小化代價函數(shù)的代碼。而應(yīng)該使用人們開發(fā)的成熟的軟件包。

C 較大時,相當(dāng)于λ較小,可能會導(dǎo)致過擬合,高方差;
C 較小時,相當(dāng)于λ較大,可能會導(dǎo)致低擬合,高偏差;

σ較大時,可能會導(dǎo)致低方差,高偏差; (曲線更平滑)
σ較小時,可能會導(dǎo)致低偏差,高方差。 (曲線更陡)
13.6 使用SVM
推薦的高優(yōu)化軟件庫:liblinear 和 libsvm
盡管你不去寫你自己的SVM的優(yōu)化軟件,但是你也需要做幾件事:
1、參數(shù)C的選擇。我們在之前的視頻中討論過誤差/方差在這方面的性質(zhì)。
2、你也需要選擇內(nèi)核參數(shù)(如果使用核函數(shù)的話)或你想要使用的相似函數(shù)(核函數(shù)),其中一個選擇是:我們選擇不需要任何內(nèi)核參數(shù),沒有內(nèi)核參數(shù)的理念,也叫線性核函數(shù)。因此,如果有人說他使用了線性核的SVM(支持向量機),這就意味這他使用了不帶有核函數(shù)的SVM(支持向量機)。
如果相較于m而言,n要大許多,即訓(xùn)練集數(shù)據(jù)量不夠支持我們訓(xùn)練一個復(fù)雜的非線性模型,我們選用邏輯回歸模型或者不帶核函數(shù)的支持向量機。


比如,特征1(x_1)是房屋價格,特征2(x_2)是房間數(shù)。如果,你直接這么使用的話,那么在這個式子中 || x-l ||^2 的距離將幾乎都是由房子的大小來決定的,從而忽略了臥室的數(shù)量。
因為,為了避免這個情況,就需要進一步的縮放比例。這將會保證SVM能考慮到所有不同的特征變量。

目前,“高斯核函數(shù)”和“線性核函數(shù)”是兩個最常用的核函數(shù)。這里有一個警告,不是所有你可能提出來的相似函數(shù)都是有效的核函數(shù)。高斯函數(shù)和線性核函數(shù),以及你有時可能會用到的核函數(shù)。這些函數(shù)都需要滿足一個技術(shù)條件,它叫作“Mercer”定理,需要滿足這個條件的原因是:因為支持向量機算法或者SVM的實現(xiàn)函數(shù)有許多熟練的數(shù)值優(yōu)化技巧。為了有效地求解參數(shù) θ,在最初的設(shè)想里,這些決策都用以將我們的注意力僅僅限制在可以滿足“Mercer”定理的核函數(shù)上。這個定理所做的是,確保所有的SVM包,所有的SVM軟件包能夠用大類的優(yōu)化方法并從而迅速得到參數(shù) θ 。因此,大部分人要做的就是用線性核函數(shù)或者高斯核函數(shù)。但是也有其他的幾個核函數(shù)也是滿足“Mercer”定理。
在高斯核函數(shù)之外我們還有其他一些選擇,如:
多項式核函數(shù)(Polynomial Kernel) :
k(x, l) = ( x ^T * l)^2
?? 這是多項式核函數(shù)的一種形式;上面是 x 與 l 的相識度的估量。如果,x 和 l 相互之間很接近,那么這個內(nèi)積會很大。
k(x, l) = ( x ^T * l)^3
k(x, l) = ( x ^T * l + 1)^3
k(x, l) = ( x ^T * l + 5)^4
?? 這是多項式核函數(shù)的其他形式;
多項式內(nèi)核函數(shù)實際上有2個參數(shù)。
一個是 “+”的參數(shù);一個是 “次方數(shù)”
它的一般形式:k(x, l) = ( x ^T * l + constant)^degree
"多項式核函數(shù)”通常情況下效果都比較差,與高斯核函數(shù)相比,使用的不多。它通常用在,當(dāng)數(shù)據(jù) x 和 l 都是嚴(yán)格的非負(fù)數(shù)時。這樣以保證,內(nèi)積永遠(yuǎn)不會是負(fù)數(shù)
字符串核函數(shù)(String kernel)
卡方核函數(shù)( chi-square kernel)
直方圖交集核函數(shù)(histogram intersection kernel)
等等...
這些核函數(shù)的目標(biāo)也都是根據(jù)訓(xùn)練集和地標(biāo)之間的距離來構(gòu)建新特征,這些核函數(shù)需要滿足Mercer's定理,才能被支持向量機的優(yōu)化軟件正確處理。
多類分類問題

假設(shè)我們利用之前介紹的一對多方法來解決一個多類分類問題。如果一共有k個類,則我們需要k個模型,以及k個參數(shù)向量θ。我們同樣也可以訓(xùn)練k個支持向量機來解決多類分類問題。但是大多數(shù)支持向量機軟件包都有內(nèi)置的多類分類功能,我們只要直接使用即可。
盡管你不去寫你自己的SVM的優(yōu)化軟件,但是你也需要做幾件事:
1、參數(shù)C的選擇。我們在之前的視頻中討論過誤差/方差在這方面的性質(zhì)。
2、你也需要選擇內(nèi)核參數(shù)(如果使用核函數(shù)的話)或你想要使用的相似函數(shù)(核函數(shù)),其中一個選擇是:我們選擇不需要任何內(nèi)核參數(shù),沒有內(nèi)核參數(shù)的理念,也叫線性核函數(shù)。因此,如果有人說他使用了線性核的SVM(支持向量機),這就意味這他使用了不帶有核函數(shù)的SVM(支持向量機)。
邏輯回歸 vs SVM

下面是一些普遍使用的準(zhǔn)則:
n為特征數(shù),m為訓(xùn)練樣本數(shù)。
(1)如果相較于m而言,n要大許多,即訓(xùn)練集數(shù)據(jù)量不夠支持我們訓(xùn)練一個復(fù)雜的非線性模型,我們選用邏輯回歸模型或者不帶核函數(shù)的支持向量機。
(2)如果n較小,而且m大小中等,例如n在 1-1000 之間,而m在10-10000之間,使用高斯核函數(shù)的支持向量機。
(3)如果n較小,而m較大,例如n在1-1000之間,而m大于50000,則使用支持向量機會非常慢,解決方案是創(chuàng)造、增加更多的特征,然后使用邏輯回歸或不帶核函數(shù)的支持向量機。
值得一提的是,神經(jīng)網(wǎng)絡(luò)在以上三種情況下都可能會有較好的表現(xiàn),但是訓(xùn)練神經(jīng)網(wǎng)絡(luò)可能非常慢,選擇支持向量機的原因主要在于它的代價函數(shù)是凸函數(shù),不存在局部最小值。
今天的SVM包會工作得很好,但是它們?nèi)匀粫幸恍┞.?dāng)你有非常非常大的訓(xùn)練集,特別是在使用高斯核函數(shù)是在這種情況下。因此,我經(jīng)常會做的是嘗試手動地創(chuàng)建,擁有更多的特征變量,然后用邏輯回歸或者不帶核函數(shù)的支持向量機。如果你看到這個幻燈片,看到了邏輯回歸,或者不帶核函數(shù)的支持向量機。在這個兩個地方,我把它們放在一起是有原因的。原因是:邏輯回歸和不帶核函數(shù)的支持向量機它們都是非常相似的算法,不管是邏輯回歸還是不帶核函數(shù)的SVM,通常都會做相似的事情,并給出相似的結(jié)果。但是根據(jù)你實現(xiàn)的情況,其中一個可能會比另一個更加有效。但是在其中一個算法應(yīng)用的地方,邏輯回歸或不帶核函數(shù)的SVM另一個也很有可能很有效。但是隨著SVM的復(fù)雜度增加,當(dāng)你使用不同的內(nèi)核函數(shù)來學(xué)習(xí)復(fù)雜的非線性函數(shù)時,這個體系,你知道的,當(dāng)你有多達1萬(10,000)的樣本時,也可能是5萬(50,000),你的特征變量的數(shù)量這是相當(dāng)大的。那是一個非常常見的體系,也許在這個體系里,不帶核函數(shù)的支持向量機就會表現(xiàn)得相當(dāng)突出。你可以做比這困難得多需要邏輯回歸的事情。
最后,神經(jīng)網(wǎng)絡(luò)使用于什么時候呢? 對于所有的這些問題,對于所有的這些不同體系一個設(shè)計得很好的神經(jīng)網(wǎng)絡(luò)也很有可能會非常有效。有一個缺點是,或者說是有時可能不會使用神經(jīng)網(wǎng)絡(luò)的原因是:對于許多這樣的問題,神經(jīng)網(wǎng)絡(luò)訓(xùn)練起來可能會特別慢,但是如果你有一個非常好的SVM實現(xiàn)包,它可能會運行得比較快比神經(jīng)網(wǎng)絡(luò)快很多,盡管我們在此之前沒有展示,但是事實證明,SVM具有的優(yōu)化問題,是一種凸優(yōu)化問題。因此,好的SVM優(yōu)化軟件包總是會找到全局最小值,或者接近它的值。對于SVM你不需要擔(dān)心局部最優(yōu)。在實際應(yīng)用中,局部最優(yōu)不是神經(jīng)網(wǎng)絡(luò)所需要解決的一個重大問題,所以這是你在使用SVM的時候不需要太去擔(dān)心的一個問題。根據(jù)你的問題,神經(jīng)網(wǎng)絡(luò)可能會比SVM慢,尤其是在這樣一個體系中,至于這里給出的參考,看上去有些模糊,如果你在考慮一些問題,這些參考會有一些模糊,但是我仍然不能完全確定,我是該用這個算法還是改用那個算法,這個沒有太大關(guān)系,當(dāng)我遇到機器學(xué)習(xí)問題的時候,有時它確實不清楚這是否是最好的算法,但是就如在之前的視頻中看到的算法確實很重要。但是通常更加重要的是:你有多少數(shù)據(jù),你有多熟練是否擅長做誤差分析和排除學(xué)習(xí)算法,指出如何設(shè)定新的特征變量和找出其他能決定你學(xué)習(xí)算法的變量等方面,通常這些方面會比你使用邏輯回歸還是SVM這方面更加重要。但是,已經(jīng)說過了,SVM仍然被廣泛認(rèn)為是一種最強大的學(xué)習(xí)算法,這是一個體系,包含了什么時候一個有效的方法去學(xué)習(xí)復(fù)雜的非線性函數(shù)。因此,實際上與邏輯回歸、神經(jīng)網(wǎng)絡(luò)、SVM一起使用這些方法來提高學(xué)習(xí)算法,我認(rèn)為你會很好地建立很有技術(shù)的狀態(tài)。(編者注:當(dāng)時GPU計算比較慢,神經(jīng)網(wǎng)絡(luò)還不流行。)

