支持向量机学习
與邏輯回歸和神經網絡相比,支持向量機,或者簡稱 SVM,在學習復雜的非線性 方程時 供了一種更為清晰,更加強大的方式
如果我們用一個新的代價函數來代替,即這條從 0 點開始的水平直線,然后是一條斜 線,像上圖。那么,現在讓我給這兩個方程命名,左邊的函數,我稱之為cost1(z) ,同時,
右邊函數我稱它為cost0(z)。這里的下標是指在代價函數中,對應的 y=1 和 y=0 的情況, 擁有了這些定義后,現在,我們就開始構建支持向量機。
這是我們在邏輯回歸中使用代價函數 J(θ)。也許這個方程看起來不是非常熟悉。這是因 為之前有個負號在方程外面,但是,這里我所做的是,將負號移到了表達式的里面,這樣做
使得方程看起來有些不同,為實現svm,我們對其進行了一系列變換。
最后有別于邏輯回歸輸出的概率。在這里,我們的代價函數,當最小化代價函數,獲得 參數 θ 時,支持向量機所做的是它來直接預測 y 的值等于 1,還是等于 0。因此,這個假設
函數會預測 1,當 θTx 大于或者等于 0 時.所以學習參數 θ 就是支持向量機
假設函數的形式。那么,這就是支持向量機數學上的定義。
大邊界的直觀理解
人們有時將支持向量機看作是大間距分類器。在這一部分,我將介紹其中的含義,這有 助于我們直觀理解 SVM 模型的假設是什么樣的。
這是支持向量機的一個有趣性質。事實上,如果你有一個正樣本 y 等
于 1,則其實我們僅僅要求θTx 大于等于 0,就能將該樣本恰當分出,這是因為如果θTx>0大的話,我們的模型代價函數值為 0,類似地,如果你有一個負樣本,則僅需要θTx>0就
會將負例正確分離,但是,支持向量機的要求更高,不僅僅要能正確分開輸入的樣本,即不 僅僅要求θTx>0,我們需要的是比 0 值大很多,比如大于等于 1,我也想這個比 0 小很多,
比如我希望它小于等于-1,這就相當于在支持向量機中嵌入了一個額外的安全因子。或者說 安全的間距因子。
當然,邏輯回歸做了類似的事情。但是讓我們看一下,在支持向量機中,這個因子會導 致什么結果。具體而言,我接下來會考慮一個特例。我們將這個常數 C 設置成一個非常大的值。比如我們假設 C 的值為 100000 或者其它非常大的數,然后來觀察支持向量機會給出什么結果?
如果 C 非常大,則最小化代價函數的時候,我們將會很希望找到一個使第一項為 0 的 最優解。因此,讓我們嘗試在代價項的第一項為 0 的情形下理解該優化問題。比如我們可以 把 C 設置成了非常大的常數,這將給我們一些關于支持向量機模型的直觀感受
這將遵從以下的約束: θTx(i)>=1,如果y(i)是等于1的, θTx(i)<=?1,如果樣本i是 一個負樣本,這樣當你求解這個優化問題的時候,當你最小化這個關于變量 θ 的函數的時
候,你會得到一個非常有趣的決策邊界。
具體而言,如果你考察這樣一個數據集,其中有正樣本,也有負樣本,可以看到這個數 據集是線性可分的。我的意思是,存在一條直線把正負樣本分開。當然有多條不同的直線, 可以把正樣本和負樣本完全分開。
比如,這就是一個決策邊界可以把正樣本和負樣本分開。但是多多少少這個看起來并不 是非常自然是么?
或者我們可以畫一條更差的決策界,這是另一條決策邊界,可以將正樣本和負樣本分開, 但僅僅是勉強分開,這些決策邊界看起來都不是特別好的選擇,支持向量機將會選擇這個黑 色的決策邊界,相較于之前我用粉色或者綠色畫的決策界。這條黑色的看起來好得多,黑線 看起來是更穩健的決策界。在分離正樣本和負樣本上它顯得的更好。數學上來講,這是什么 意思呢?這條黑線有更大的距離,這個距離叫做間距 (margin)。
當畫出這兩條額外的藍線,我們看到黑色的決策界和訓練樣本之間有更大的最短距離。 然而粉線和藍線離訓練樣本就非常近,在分離樣本的時候就會比黑線表現差。因此,這個距 離叫做支持向量機的間距,而這是支持向量機具有魯棒性的原因,因為它努力用一個最大間 距來分離樣本。因此支持向量機有時被稱為大間距分類器,而這其實是求解上一頁幻燈片上 優化問題的結果。
在本節課中關于大間距分類器,我想講最后一點:我們將這個大間距分類器中的正則化 因子常數 C 設置的非常大,我記得我將其設置為了 100000,因此對這樣的一個數據集,也 許我們將選擇這樣的決策界,從而最大間距地分離開正樣本和負樣本。那么在讓代價函數最
小化的過程中,我們希望找出在 y=1 和 y=0 兩種情況下都使得代價函數中左邊的這一項盡量為零的參數。如果我們找到了這 樣的參數,則我們的最小化問題便轉變成:
回顧 C=1/λ,因此:
C 較大時,相當于 λ 較小,可能會導致過擬合,高方差。
C 較小時,相當于 λ 較大,可能會導致低擬合,高偏差。
數學背后的大邊界分類
根據uTv=p●||u|| ,
因此支持向量機做的全部事情,就是極小化參數向量 θ 范數的平方,或者說長度 的平方,即使p變大,則可以取得最小值。
核函數
回顧我們之前討論過可以使用高級數的多項式模型來解決無法用直線進行分隔的分類問題,我們可以通過創建多項式模型來解決問題
這些地標的作用是什么?如果一個訓練實例 x 與地標 L 之間的距離近似于 0,則新特征
f 近似于 e?0=1,如果訓練實例 x 與地標 L 之間距離較遠,則 f 近似于 e?(一個較大的數)=0。 假設我們的訓練實例含有兩個特征[x1 x2],給定地標l(1)與不同的σ值,見下圖:
如何選擇地標?
我們通常是根據訓練集的數量選擇地標的數量,即如果訓練集中有 m 個實例,則我們 選取 m 個地標,并且令:l(1)=x(1),l(2)=x(2),...,l(m)=x(m)。這樣做的好處在于:現在我們得到的新特 征是建立在原有特征與訓練集中所有其他特征之間距離的基礎之上的,即
下面我們將核函數運用到支持向量機中,修改我們的支持向量機假設為:
? 給定 x,計算新特征 f,當 θTf>=0 時,預測 y=1,否則反之。 相應地修改代價函數 為:
在此,我們不介紹最小化支持向量機的代價函數的方法,你可以使用現有的軟件包(如 liblinear,libsvm 等)。在使用這些軟件包最小化我們的代價函數之前,我們通常需要編寫核 函數,并且如果我們使用高斯核函數,那么在使用之前進行特征縮放是非常必要的。
另外,支持向量機也可以不使用核函數,不使用核函數又稱為線性核函數(linear kernel), 當我們不采用非常復雜的函數,或者我們的訓練集特征非常多而實例非常少的時候,可以采 用這種不帶核函數的支持向量機。
下面是支持向量機的兩個參數 C 和 σ 的影響:
C 較大時,相當于 λ 較小,可能會導致過擬合,高方差;
C 較小時,相當于 λ 較大,可能會導致低擬合,高偏差;
σ 較大時,導致高方差;
σ 較小時,導致高偏差。
使用支持向量機
目前為止,我們已經討論了 SVM 比較抽象的層面,在這個視頻中我將要討論到為了運
行或者運用 SVM。不建議你自己寫軟件來求解參數 θ,有許多好的軟件庫,我正好用得最多的兩個是 liblinear 和 libsvm,但是真的有很 多軟件庫可以用來做這件事兒
在高斯核函數之外我們還有其他一些選擇,如:
多項式核函數(Polynomial Kernel)
字符串核函數(String kernel)
卡方核函數( chi-square kernel)
直方圖交集核函數(histogram intersection kernel)
等等… 這些核函數的目標也都是根據訓練集和地標之間的距離來構建新特征,這些核函數需要
滿足 Mercer’s 定理,才能被支持向量機的優化軟件正確處理
多類分類問題
假設我們利用之前介紹的一對多方法來解決一個多類分類問題。如果一共有 k 個類,則 我們需要 k 個模型,以及 k 個參數向量 θ。我們同樣也可以訓練 k 個支持向量機來解決多類 分類問題。但是大多數支持向量機軟件包都有內置的多類分類功能,我們只要直接使用即可。
盡管你不去寫你自己的 SVM(支持向量機)的優化軟件,但是你也需要做幾件事:
1、是 出參數 C 的選擇。我們在之前的視頻中討論過誤差/方差在這方面的性質。 2、你也需要選擇內核參數或你想要使用的相似函數,其中一個選擇是:我們選擇不需
要任何內核參數,沒有內核參數的理念,也叫線性核函數。因此,如果有人說他使用了線性
核的 SVM(支持向量機),這就意味這他使用了不帶有核函數的 SVM(支持向量機)
從邏輯回歸模型,我們得到了支持向量機模型,在兩者之間,我們應該如何選擇呢?
下面是一些普遍使用的準則:
n 為特征數,m 為訓練樣本數。
(1)如果相較于 m 而言,n 要大許多,即訓練集數據量不夠支持我們訓練一個復雜的非
線性模型,我們選用邏輯回歸模型或者不帶核函數的支持向量機。
(2)如果 n 較小,而且 m 大小中等,例如 n 在 1-1000 之間,而 m 在 10-10000 之間,
使用高斯核函數的支持向量機。
(3)如果 n 較小,而 m 較大,例如 n 在 1-1000 之間,而 m 大于 50000,則使用支持向量
機會非常慢,解決方案是創造、增加更多的特征,然后使用邏輯回歸或不帶核函數的支持向 量機。
總結
- 上一篇: 数据库设计方法
- 下一篇: 利用GAN原始框架生成手写数字