機器學習基礎---支持向量機SVM


到目前為止,你已經見過一系列不同的學習算法。在監督學習中,許多監督學習算法的性能都非常類似。因此,重要的不是你該選擇使用學習算法A還是學習算法B,而更重要的是,應用這些算法時,所使用的數據量。這就體現了你應用這些算法時的技巧。比如:你為學習算法所設計的特征量的選擇,以及如何選擇正則化參數,諸如此類的事。還有一個更加強大的算法廣泛的應用於工業界和學術界,它被稱為支持向量機(Support Vector Machine)。

與邏輯回歸和神經網絡相比,支持向量機,或者簡稱SVM,在學習復雜的非線性方程時提供了一種更為清晰,更加強大的方式。因此,接下來,會探討這一算法。在稍后的課程中,也會對不同的監督學習算法進行簡要的總結。

當然,僅僅是作簡要描述。但對於支持向量機,鑒於該算法的強大和受歡迎度,會花許多時間來學習它。它也是我們所介紹的最后一個監督學習算法。

一:優化目標(代價函數)

(一)邏輯回歸

為了描述支持向量機,事實上,我將會從邏輯回歸開始展示我們如何一點一點修改來得到本質上的支持向量機。

邏輯回歸代價函數如下:

如果你進一步觀察邏輯回歸的代價函數,你會發現每個樣本(x,y)都會為總代價函數,增加這里的一項。

因此,對於總代價函數通常會有對所有的訓練樣本求和,並且這里還有一個1/m項。

但是,在邏輯回歸中,這里的這一項就是表示一個訓練樣本所對應的表達式。

現在,如果我將完整定義的假設函數代入這里。那么,我們就會得到每一個訓練樣本都影響這一項。

現在,先忽略1/m這一項,但是這一項是影響整個總代價函數中的這一項的。

現在,一起來考慮兩種情況:

y=1:

y=0:

(二)引入支持向量機

1.y=1

我們會從這個代價函數開始,也就是

 

一點一點修改,讓我取這里的z=1點,我先畫出將要用的代價函數。

新的代價函數將會水平的從z=1這里到右邊之后都是平的,然后我再畫一條同邏輯回歸非常相似的直線,但是,在這里是一條直線,也就是我用紫紅色畫的直線。

那么,到了這里已經非常接近邏輯回歸中使用的代價函數了。只是這里是由兩條線段組成,即位於右邊的水平部分和位於左邊的直線部分,先別過多的考慮左邊直線部分的斜率,這並不是很重要。

但是,這里我們將使用的新的代價函數,是在y=1的前提下的。

你也許能想到,這應該能做同邏輯回歸中類似的事情。但事實上,這會使得支持向量機,擁有計算上的優勢,並使得之后的優化問題變得簡單。例如,更容易計算股票交易的問題等等。

2.y=0

目前,我們只是討論了y=1的情況,另外一種情況是當y=0時,此時如果你仔細觀察代價函數只留下了第二項,因為第一項被消除了。如果當y=0時,那么這一項也就是0了。所以上述表達式只留下了第二項。因此,這個樣本的代價或是代價函數的貢獻。將會由這一項表示。並且,如果你將這一項作為z的函數,那么,這里就會得到橫軸。現在,你完成了支持向量機中的部分內容,同樣地,我們要替代這一條藍色的線,用相似的方法。

3.總結y=1和y=0

現在讓我給這兩個方程(紫色)命名,左邊的函數,我稱之為cost_1(z),同時,右邊函數我稱它為cost_0(z)。這里的下標是指在代價函數中,對應的y=1y=0的情況,擁有了這些定義后,現在,我們就開始構建支持向量機。

(三)支持向量機代價函數

這是我們在邏輯回歸中使用代價函數J(θ)。也許這個方程看起來不是非常熟悉。這是因為之前有個負號在方程外面,但是,這里我所做的是,將負號移到了表達式的里面,這樣做使得方程看起來有些不同。

 

對於支持向量機而言,實質上我們要將這替換為cost_1(z),也就是cost_1(θTX),同樣地,我也將這一項替換為cost_0(z),也就是代價cost_0(θTX)因此,對於支持向量機,我們得到了這里的最小化問題,即:

現在,按照支持向量機的慣例,事實上,我們的書寫會稍微有些不同,代價函數的參數表示也會稍微有些不同:

1.首先我們去掉前面的常數項1/m,因為他並不影響我們的參數求解最優解。

2.令C=1/入,獲得支持向量機的一般形式:(總體優化目標)

(四)支持向量機假設函數

最后有別於邏輯回歸輸出的概率。在這里,我們的代價函數,當最小化代價函數,獲得參數θ時,支持向量機所做的是它來直接預測y的值等於1,還是等於0。因此,這個假設函數會預測1。當θTx大於或者等於0時,或者等於0時,所以學習參數θ就是支持向量機假設函數的形式。那么,這就是支持向量機數學上的定義。

注意:邏輯函數假設函數是這個:

他會在后面根據我們從代價函數中求得的θ參數值,獲取一個概率值。

這就是和支持向量機的不同之處。

二:支持向量機(大間距分類器)---假設函數理解

(一)如何使得代價函數變得更小:

1.正樣本y=1:則當z>=1時,代價函數cost_1(z)=0---θTX>=1

2.負樣本y=0,則當z<=-1時,代價函數cost_0(z)=0---θTX<=-1 

(二)對比邏輯回歸代價函數:

邏輯函數中我們只需要θTX>=0或者θTX<0就可以區分正負樣本。

而在支持向量機中,我們需要通過TX>=1和θTX<-1才能區分正負樣本,那么這中間就嵌入了一個額外的安全因子(安全的間距因子)

(三)支持向量機中的決策邊界

讓我們看一下,在支持向量機中,這個因子會導致什么結果。具體而言,我接下來會考慮一個特例。我們將這個常數C設置成一個非常大的值。比如我們假設C的值為100000或者其它非常大的數,然后來觀察支持向量機會給出什么結果?

如果C非常大,則最小化代價函數的時候,我們將會很希望找到一個使第一項為0的最優解。因此,讓我們嘗試在代價項的第一項為0的情形下理解該優化問題。比如我們可以把C設置成了非常大的常數,這將給我們一些關於支持向量機模型的直觀感受。

1.對於一個訓練樣本標簽為y=1,你想令第一項為0,你需要做的是找到一個θ,使得θTx>=1

2.對於一個訓練樣本標簽為y=0,為了使cost_0(z)函數的值為0,我們需要θTx<=-1

因此,現在考慮我們的優化問題。選擇參數,使得第一項等於0,就會導致下面的優化問題:

因為我們將選擇參數使第一項為0,因此這個函數的第一項為0,因此是C乘以0加上二分之一乘以第二項。這里第一項是乘以0,因此可以將其刪去,因為我知道它是0

根據上面信息,我們可以得到下面的優化函數:

這樣當你求解這個優化問題的時候,當你最小化這個關於變量θ的函數的時候,你會得到一個非常有趣的決策邊界。

 

具體而言,如果你考察這樣一個數據集,其中有正樣本,也有負樣本,可以看到這個數據集是線性可分的。我的意思是,存在一條直線把正負樣本分開。當然有多條不同的直線,可以把正樣本和負樣本完全分開。

這些決策邊界看起來都不是特別好的選擇,支持向量機將會選擇這個黑色的決策邊界,相較於之前我用粉色或者綠色畫的決策界。這條黑色的看起來好得多,黑線看起來是更穩健的決策界。在分離正樣本和負樣本上它顯得的更好。數學上來講,這是什么意思呢?這條黑線有更大的距離,這個距離叫做間距(margin)

當畫出這兩條額外的藍線,我們看到黑色的決策界和訓練樣本之間有更大的最短距離。然而粉線和藍線離訓練樣本就非常近,在分離樣本的時候就會比黑線表現差。因此,這個距離叫做支持向量機的間距,而這是支持向量機具有魯棒性的原因,因為它努力用一個最大間距來分離樣本。因此支持向量機有時被稱為大間距分類器,而這其實是求解上面優化問題的結果。

總之支持向量機模型的做法,就是努力將正樣本和負樣本用最大的間距分開。

也可以這樣理解:樣本點到超平面的最小距離l最大  (距離越大越容易分類)而這個能得到最小距離l的樣本點就叫做支持向量。 

(四)正則化常數C

我們將這個大間距分類器中的正則化因子常數C設置的非常大,將其設置為了100000,因此對這樣的一個數據集,也許我們將選擇這樣的決策界,從而最大間距地分離開正樣本和負樣本。

那么在讓代價函數最小化的過程中,我們希望找出在y=1和y=0兩種情況下都使得代價函數中左邊的這一項盡量為零的參數。

如果我們找到了這樣的參數,則我們的最小化問題便轉變成:

實上,支持向量機現在要比這個大間距分類器所體現得更成熟,尤其是當你使用大間距分類器的時候,你的學習算法會受異常點(outlier) 的影響。

比如我們加入一個額外的正樣本:

在這里,如果你加了這個樣本,為了將樣本用最大間距分開,也許我最終會得到一條類似粉色這樣的決策邊界。

僅僅基於一個異常值,僅僅基於一個樣本,就將我的決策界從這條黑線變到這條粉線,這實在是不明智的。

而如果正則化參數C,設置的非常大,那么SVM會將決策界,從黑線變到了粉線,但是如果C設置的小一點,如果你將C設置的不要太大,則你最終會得到這條黑線。

當然數據如果不是線性可分的,如果你在這里有一些正樣本或者你在這里有一些負樣本,則支持向量機也會將它們恰當分開。

因此,大間距分類器的描述,僅僅是從直觀上給出了正則化參數C非常大的情形,同時,要提醒你C的作用類似於1/入,入是我們之前使用過的正則化參數。這只是C非常大的情形,或者等價地入非常小的情形。你最終會得到類似粉線這樣的決策界,但是實際上應用支持向量機的時候,當C不是非常非常大的時候,它可以忽略掉一些異常點的影響,得到更好的決策界。甚至當你的數據不是線性可分的時候,支持向量機也可以給出好的結果。

回顧C=1/入,因此:

C較大時,相當於入較小(泛化能力不好),可能會導致過擬合,高方差。 C較小時,相當於入較大(平滑,泛化能力好),可能會導致欠擬合,高偏差。

三:大間隔分類器的數學原理

忽略掉截距,令θ_0=0,這樣更容易畫示意圖。我將特征數n置為2,因此我們僅有兩個特征x_1,x_2,現在我們來看一下目標函數,支持向量機的優化目標函數。

我們使用p^(i).||θ||代替θTX^(i),同時繼續使得θ_0=0,來看SVM會選擇什么樣的決策邊界。

1.反例講解

我們假設支持向量機會選擇這個綠色決策邊界。這不是一個非常好的選擇,因為它的間距很小(所以后面我們求得的p^(i)就是到這個決策邊界的舉例,會比較小。這個決策界離訓練樣本的距離很近。我們來看一下為什么支持向量機不會選擇它。

對於這樣選擇的參數θ,可以看到參數θ向量事實上是和決策界是90度正交的,(因為決策邊界這條線就是(theta')*X=0時候的,內積等於0所以垂直)因此這個綠色的決策界對應着一個參數向量θ這個方向,順便提一句θ_0的簡化僅僅意味着決策界必須通過原點(0,0)--當然我們可以設置θ_0不為0,但是講解不方便。現在讓我們看一下這對於優化目標函數意味着什么。

因為從上面可以知道:p^(i)是x^(i)在參數θ向量上的投影

所以,對於我們的每一個樣本x^(i),約束條件p^(i)||θ||在坐標軸表示如下:

我們會發現這些p^(i)將會是非常小的數,因此當我們考察優化目標函數的時候:

對於正樣本(×)而言,我們需要p^(1)||θ||>=1,但是如果p^(1)在這里非常小,那就意味着我們需要θ的范數非常大.因為如果p^(1)很小,而我們希望p^(1)||θ||>=1,令其實現的唯一的辦法就是這兩個數較大。如果p^(1)小,我們就希望θ的范數大。

對於負樣本(⚪)而言,我們需要p^(2)||θ||<=-1。我們已經在這個樣本中看到p^(2)會是一個非常小的數,因此唯一的辦法就是θ的范數變大。但是我們的目標函數是希望找到一個參數θ,它的范數是小的。

因此,這看起來不像是一個好的參數向量的選擇。

2.正例講解 

注意到現在p^(1)和p^(2)這些投影長度是變大許多的。

如果我們仍然要滿足這些約束,p^(i)||θ||>1,則因為p^(1)和p^(2)變大了,所以θ的范數就可以變小了。

因此這意味着通過選擇這里的決策界,而不是上面的那個,支持向量機可以使參數的范數變小很多。

因此,如果我們想令的范數變小,從而令范數的平方變小,就能讓支持向量機選擇這里的決策界。這就是支持向量機如何能有效地產生大間距分類的原因。

總之:

如果我們希望支持向量機最終可以找到一個較小的θ范數(這正是支持向量機中最小化目標函數的目的),

我們就應該讓正樣本和負樣本投影到θ的值足夠大。

要做到這一點的唯一方式就是選擇一個合適的決策邊界(比如上面正解中的綠線)。

這是大間距決策界來區分開正樣本和負樣本這個間距的值。

這個間距的值就是p^(1),p^(2),p^(3)等等的值。

通過讓間距變大,即通過這些等等的值,支持向量機最終可以找到一個較小的范數。

以上就是為什么支持向量機最終會找到大間距分類器的原因。

因為它試圖極大化這些p^(i)的范數,它們是訓練樣本到決策邊界的距離。

補充:

即便Θ_(0)不等於0,支持向量機要做的事情都是優化這個目標函數對應着C值非常大的情況,但是可以說明的是,即便θ_(0)不等於0,支持向量機仍然會找到正樣本和負樣本之間的大間距分隔。

四:核函數(1)---改造支持向量機算法來構造復雜的非線性分類器

(一)多項式模型引出核函數

回顧我們之前討論過可以使用高級數的多項式模型來解決無法用直線進行分隔的分類問題:

為了獲得上圖所示的判定邊界,我們的模型可能是:

為了和后面知識結合,我們用一系列的新的特征變量f來替換模型中的每一項。

得到新的假設函數:

然而,除了對原有的特征進行組合以外,有沒有更好的方法來構造f1、f2、f3、...、fn

我們可以利用核函數來計算出新的特征。

(二)案例講解---構造新特征f_1,f_2,f_3(實際中可以定義更多特征)

給定一個訓練實例x,我們利用x的各個特征與我們預先選定的地標(landmarks)l^(1),l^(2),l^(3)的近似程度來選取新的特征f_1,f_2,f_3。(這里我們只是定義了這3個新特征)

例如:將第一個特征f_1定義為一種相似度的度量,即度量訓練樣本X與第一個標記的相似度

 

這個我們用於相似度度量的這個特殊公式是上面這個:

其他的相似函數:

相似度函數就是核函數---上面的是高斯核函數

概括來說,這些不同的相似度函數就叫做核函數。我們可以有不同的相似度度量的函數。

我們更合規的寫法是:

(三)核函數做了什么?

為什么這些相似度函數/表達式是有意義的?

1.先來看第一個標記l^(1)

假設X與其中一個標記點非常接近:(一個訓練實例x與地標l^(1)之間的距離近似於0)

那么x與標記點之間的歐氏距離就會接近於0

那么f_1就是個簡單的特征:

如果X離標記點很遠:

所以:

這些特征就是衡量x到標記l的相似度。
如果x非常接近於標記,那么特征f非常接近於1。
如果x和標記l非常遠,那么特征f會接近於0。

對於上面我們定義的3個標記l_1,l_2,l_3。每一個標記都會定義一個新的特征,即f_1,f_2,f_3。

也就是說,給定一個訓練樣本x,我們可以計算3個新的特征f_1,f_2,f_3。這基於之前的3個標記

(四)圖像理解核函數---x和l、σ

圖中水平面的坐標為x_1,x_2而垂直坐標軸代表f。可以看出,只有當x與l^(1)重合時f才具有最大值。隨着x的改變f值改變的速率受到σ^2的控制。

從圖中我們可以看到,如果我們x遠離l^(1)點越遠,f_1的值就越接近0.這就是特征值f_1,他衡量了x到第一個標記有多近。這個值在0到1之間。

下面圖像顯示了σ對f值改變的速率影響:

可以看出,隨着σ的增大,下降速率明顯減小。

(五)獲得什么樣的預測函數

給定一個訓練樣本x,我們准備計算出3個特征變量f_1,f_2,f_3

如果滿足上面圖中,預測函數>=0,則預測函數的預測值將等於1。

假設我們獲得θ參數值如下:

我們選取的x點如下:

因為x點與l_1接近,所以f_1為1.其他l_2,l_3相差較遠,所以f_2,f_3=0

將參數帶入預測函數中:

因為預測函數的值>=0,所以我們預測的y值是1。

同樣,當我們選取的一點(藍色)如下:遠離所有標記 

此時,所有的f_1,f_2,f_3都是0,最終預測函數值為-0.5,所以預測的y值是0.

如果對大量的點,進行這樣的相應處理。應該可以確定,如果你有一個訓練樣本,它非常接近l^(2)這個標記點。那么通過這個點預測的y值就是1

實際上,最后的結果是:

根據我們的假設函數可以知道,當我們訓練樣本x接近於l^(1),l^(2)時,我們的預測值是1。對於遠離這個兩個標記點的點,預測結果是等於0的。

我們最終會得到這個預測函數的判別邊界:

在這個紅色的決策邊界里面,預測的y值等於1。在其外面預測的y值等於0

這就是我們如何定義標記點和核函數來訓練出非常復雜的非線性決策邊界的方法。

核函數---用於在支持向量機中定義新的特征變量

五:核函數(2)---標記點選取、其他核函數

如何得到這些標記點?如何選擇?其他的相似度方程是什么樣的?

SVM如何通過核函數來高效的學習復雜非線性函數?

(一)如何選擇標記點?

我們如何選取這些標記點?在實際應用中,我們也會需要更多的標記點,如何進行合理的選取?

假設我們有一個訓練集,包含一些正樣本和負樣本:

如何選取標記點?

我們通常是根據訓練集的數量選擇地標的數量,即如果訓練集中有m個實例,則我們選取m個地標,並且令:l^(1)=x^(1),l^(2)=x^(2),...,l^(m)=x^(m)

這樣做的好處在於:現在我們得到的新特征是在描述每一個樣本距離樣本集中其他樣本的距離(是建立在原有特征與訓練集中所有其他特征之間距離的基礎之上的),即:

所以:這個向量就是我們用於描述訓練樣本的特征向量。

(二)當給定核函數和相似度函數后,我們如何使用簡單的支持向量機

下面我們將核函數運用到支持向量機中,修改我們的支持向量機假設為:

給定x,計算新特征f,當θTf>=0時,預測y=1,否則反之。

參數向量是m+1維向量,這里m是標記點的個數(也是訓練集的大小)

以上就是當已知參數θ時,怎樣做出預測的過程。但是怎么得到參數θ?

當我們解決下面這個最小化問題時,就已經最小化了參數θ:

在C倍的該代價函數中,我們並沒有用原始特征X^(i),而是使用新的特征f^(i)來代替:

θ參數的變化:

在具體實施過程中(大多數支持向量機運算中),我們還需要對最后的正則化項進行些微調整,

在計算時,我們用θT代替θTθ,其中M是根據我們選擇的核函數來確定的一個矩陣。這樣做的原因是為了簡化計算。

我們用一種略有變化的距離度量來取代θ的模的平方。意味着我們最小化了一種類似的度量,這是參數向量θ的縮放版本,並且取決於核函數。這使得支持向量機可以更有效率的運行。並且這種修改可以使它應用於更大的訓練集。

例如:當你的訓練集有10000個樣本時,按照我們之前的說明,我們最終會有10000個對應的標記點。其中θ也會是10000維的向量。當m變得非常非常大的時候,那么求解這么多參數(50000或者100000),對於支持向量機的優化程序而言,這時求解這么多參數的最小化問題的代價會非常高。

理論上講,我們也可以在邏輯回歸中使用核函數,但是上面使用M來簡化計算的方法不適用與邏輯回歸,因此計算將非常耗費時間。

在此,我們不介紹最小化支持向量機的代價函數的方法,你可以使用現有的軟件包(如liblinear,libsvm等)。在使用這些軟件包最小化我們的代價函數之前,我們通常需要編寫核函數,並且如果我們使用高斯核函數,那么在使用之前進行特征縮放是非常必要的。

另外,支持向量機也可以不使用核函數,不使用核函數又稱為線性核函數(linear kernel),當我們不采用非常復雜的函數,或者我們的訓練集特征非常多而實例非常少的時候,可以采用這種不帶核函數的支持向量機。

(三)支持向量機的兩個參數C和σ的影響:

C較大時,相當於入較小,---不進行正則化,可能會導致過擬合,高方差;

C較小時,相當於入較大,可能會導致欠擬合,高偏差;

σ較大時---變化較為平滑,可能會導致低方差,高偏差;

 

σ較小時,可能會導致低偏差,高方差。

六:SVM的使用

目前為止,我們已經討論了SVM比較抽象的層面,在這里將要討論到為了運行或者運用SVM

不建議自己寫軟件來求解參數,我們只需要知道去調用庫函數來實現這些功能。

同樣的,用以解決SVM最優化問題的軟件很復雜,且已經有研究者做了很多年數值優化了。

因此只需要調用好的軟件庫和好的軟件包來實現這些功能。所以,強烈建議使用高度優化好的軟件庫中的一個,而不是嘗試自己去實現。

有許多好的軟件庫,用得最多的兩個是liblinearlibsvm,但是真的有很多軟件庫可以用來做這件事兒。你可以找到許多你可能會用來編寫學習算法的軟件庫。

(一)參數選擇、核函數選擇

盡管你不去寫你自己的SVM的優化軟件,但是你也需要做幾件事:

1、是提出參數C的選擇。---前面有提及C和σ的選擇分析

2、你也需要選擇內核參數或你想要使用的相似函數,其中一個選擇是:我們選擇不需要任何內核參數,沒有內核參數的理念,也叫線性核函數。因此,如果有人說他使用了線性核的SVM(支持向量機),這就意味這他使用了不帶有核函數的SVM(支持向量機)。

注意:這里對於線性核函數時,條件是θTx>=0,而對於核函數來說,滿足條件是θTf>=0。

我們可以把線性核函數看着另外一個版本的SVM,他只是提供給你一個標准的線性分類器

(二)核函數選取之后

如果決定使用高斯函數,那么接下來需要做的就是:

根據所使用的SVM軟件包要求,可能需要你實現一個核函數或者實現相似函數。

因此,如果你用octave或者Matlab來實現支持向量機的話,那么就需要你提供一個函數來計算核函數的特征值。

注意:第二個輸入參數是標記值

你所需要做的是寫一個可以將這些X1,X2進行輸入的相似函數

並用它們來計算,之后返回一個實數。

因此一些支持向量機的包所做的是期望你能提供一個核函數能夠輸入X1, X2 並返回一個實數。

從這里開始,它將自動地生成所有特征變量,自動利用特征變量X,並用你寫的函數對應到f1,f2 一直到f(m)

注意: 特征變量歸一化

 

一個實現函數的注意事項,如果你有大小很不一樣的特征變量(比如房價預測)。

在使用高斯函數之前,將這些特征變量的大小按比例歸一化

(三)其他核函數

在高斯核函數和線性核函數(主要還是這兩個使用的最多)之外我們還有其他一些選擇,如:

多項式核函數(Polynomial Kernel)

除了基本傳參之外,還要有一個常數項和一個指數項。

如果X和l相互之間很接近,那么這個內積就會很大。
這是一個有些不常用的核函數。

多項式核函數幾乎總是或者經常執行的效果都比較差。

通常它用在當X和l都是嚴格的非負數時,這樣以保證這些內積值永遠不會是負數。

這就可以得到,X和l之間非常相似,當它們之間的內積很大的時候。
它們也有其他的一些性質,但是人們通常用得不多。

字符串核函數(String kernel

卡方核函數( chi-square kernel

直方圖交集核函數(histogram intersection kernel

....

這些核函數的目標也都是根據訓練集和地標之間的距離來構建新特征,這些核函數需要滿足Mercer's定理,才能被支持向量機的優化軟件正確處理。

不是所有你可能提出來的相似函數,都是有效的核函數。

高斯核函數和線性核函數以及其你有時可能會用到的核函數,所有的這些函數都需要滿足一個技術條件,它叫作默塞爾定理。

需要滿足這個條件的原因是:

這個定理所做的是確保所有的SVM包,所有的SVM軟件包能夠用大類的優化方法並很快得到參數θ。 

(四)多類分類問題 

 

假設我們利用之前介紹的一對多方法來解決一個多類分類問題。如果一共有K個類,則我們需要K個模型,以及K個參數向量θ(邏輯回歸和神經網絡解決過多類分類問題)。

我們同樣也可以訓練K個支持向量機來解決多類分類問題。但是大多數支持向量機軟件包都有內置的多類分類功能,我們只要直接使用即可。

(五)邏輯回歸和SVM比較

假設n是一個特征變量,m是一個訓練樣本。那么我們什么時候用哪一個呢?

1.如果n相對於你的訓練數據集大小m較大的時候

比如說:
有一個文本分類的問題,在這里特征向量的維數有可能是1萬
而如果你的訓練集的大小有可能是10-1000范圍內
想象一下垃圾郵件的分類問題,在這個問題中
你有10,000個與10,000(1萬)個單詞對應的特征向量
但是你可能有10訓練樣本 也可能有多達 1000個訓練樣本

那么這種情況下,我們通常使用: 

邏輯回歸或者用不帶核函數的SVM(線性核函數)

因為,如果你有許多特征變量,而有相對較小的訓練集。
線性函數可能會工作得很好,而且你也沒有足夠的數據來擬合非常復雜的非線性函數

2.現在如果n較小,m大小適中

比如:在這里n可能是1-1000之間的任何數 ,訓練樣本的數量可能是從10到10,000中的任何一個數值也許多達(5萬)50,000個樣本。

如果m做夠大 如可能是(一萬)10,000 但是不是一百萬

因此如果m是一個大小合適的數值 ,那么通常使用高斯核函數的支持向量機。

3.如果n較小,而m較大

例如n1-1000之間,而m大於50000,甚至100w,則使用高斯函數支持向量機會非常慢,

解決方案是創造、增加更多的特征,然后使用邏輯回歸或不帶核函數的支持向量機。

邏輯回歸和線性核函數是非常相似的算法。

(六)和神經網絡比較

和神經網絡比較,SVM如果運用的好的話,比神經網絡快得多。

SVM具有的優化問題,是一種凸優化問題。因此,好的SVM優化軟件包總是會找到全局最小值,或者接近它的值。對於SVM你不需要擔心局部最優。

在實際應用中,局部最優不是神經網絡所需要解決的一個重大問題,所以這是你在使用SVM的時候不需要太去擔心的一個問題。根據你的問題,神經網絡可能會比SVM慢,尤其是在這樣一個體系中,至於這里給出的參考,看上去有些模糊,如果你在考慮一些問題,這些參考會有一些模糊,但是我仍然不能完全確定,我是該用這個算法還是改用那個算法,這個沒有太大關系,當我遇到機器學習問題的時候,有時它確實不清楚這是否是最好的算法,但是就如在之前的視頻中看到的算法確實很重要。但是通常更加重要的是:你有多少數據,你有多熟練是否擅長做誤差分析和排除學習算法,指出如何設定新的特征變量和找出其他能決定你學習算法的變量等方面,通常這些方面會比你使用邏輯回歸還是SVM這方面更加重要。但是,已經說過了,SVM仍然被廣泛認為是一種最強大的學習算法,這是一個體系,包含了什么時候一個有效的方法去學習復雜的非線性函數。因此,實際上與邏輯回歸、神經網絡、SVM一起使用這些方法來提高學習算法,我認為你會很好地建立很有技術的狀態。(編者注:當時GPU計算比較慢,神經網絡還不流行。)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM