- Python機器學習(原書第3版)
- (美)塞巴斯蒂安·拉施卡 瓦希德·米爾賈利利
- 1315字
- 2021-06-11 16:13:42
3.5 用核支持向量機求解非線性問題
支持向量機在機器學習領域享有較高知名度的另一個原因是,它可以很容易使用“核技巧”來解決非線性分類問題。在討論核支持向量機的原理之前,讓我們先創建一個樣本數據集來認識一下所謂的非線性分類問題到底是什么。
3.5.1 處理線性不可分數據的核方法
執行下述代碼,調用NumPy的logical_or
函數創建一個經過“異或”操作的數據集,其中有100個樣本的分類標簽為1
,100個樣本的分類標簽為-1
:

執行上述代碼后會產生具有隨機噪聲的“異或”數據集,如圖3-12所示。

圖 3-12
顯然,我們使用前面章節中討論過的線性邏輯回歸或線性支持向量機模型,并將線性超平面作為決策邊界,無法將樣本正確地劃分為正類和負類。
核方法的基本思想是針對線性不可分數據,建立非線性組合,通過映射函數?把原始特征投影到一個高維空間,使特征在該空間變得線性可分。如圖3-13所示,可以將一個二維數據集轉換為一個新的三維特征空間,這樣就可以通過下述投影使得樣本可分:

通過線性超平面,我們可以把圖中所示的兩個類分開,如果再把它投影回原始特征空間上,就會形成非線性的決策邊界,如圖3-13所示。

圖 3-13
3.5.2 利用核技巧發現高維空間的分離超平面
為了使用SVM解決非線性問題,需要調用映射函數?將訓練數據變換到高維特征空間,然后訓練線性SVM模型對新特征空間里的數據進行分類。可以用相同的映射函數?對未知新數據進行變換,用線性支持向量機模型進行分類。
然而,這種映射方法的問題是構建新特征的計算成本太高,特別是在處理高維數據時。這就是所謂的核技巧可以發揮作用的地方。
雖然我們沒有詳細研究如何通過解決二次規劃任務來訓練支持向量機,但實際上只需要用?(x(i))T?(x(j))替換點乘x(i)Tx(j)。為顯著降低計算兩點間點乘的昂貴計算成本,定義所謂的核函數如下:
κ(x(i)x(j))=?(x(i))T?(x(j))
其中使用最為廣泛的核函數是徑向基函數(RBF)核或簡稱為高斯核:

該公式常被簡化為:
κ(x(i),x(j))=exp(-γ║x(i)-x(j)║2)
這里,是要優化的自由參數。
簡而言之,術語“核”可以理解為一對樣本之間的相似函數。公式中的負號把距離轉換為相似性得分,而指數運算把由此產生的相似性得分值控制在1(完全相似)和0(非常不同)之間。
在了解了使用核技巧的重點之后,我們現在看看是否能訓練一個核支持向量機,使之可以通過一個非線性決策邊界來對“異或”數據進行分類。這里只需要用到先前導入的scikit-learn庫中的SVC
類,以參數kernel='rbf'
替換kernel='linear'
:

從圖3-14中,我們可以看到核SVM相對較好地對“異或”數據進行了區分。

圖 3-14
參數γ的值設置為gamma=0.1
,我們可以把這理解為高斯球的截止參數。如果增大γ值,將加大訓練樣本的影響范圍,從而導致決策邊界緊縮和波動。為了能夠更好地理解γ,我們把RBF核支持向量機應用于鳶尾花數據集:

由于選擇了相對較小的γ值,得到的RBF核SVM模型的決策邊界相對偏松,如圖3-15所示。

圖 3-15
現在來觀察加大γ值對決策邊界的影響:

從圖3-16中,我們可以看到,采用較大的γ值,類0和1周圍的決策邊界更為緊密。

圖 3-16
雖然模型對訓練數據集的擬合非常好,但是這種分類器對未知數據可能會有一個很高的泛化誤差。這說明當算法對訓練數據集中的波動過于敏感時,參數γ在控制過擬合或方差方面也起著重要的作用。
- Mastering Concurrency Programming with Java 8
- 深入淺出Java虛擬機:JVM原理與實戰
- iOS開發實戰:從零基礎到App Store上架
- Learning Python Design Patterns(Second Edition)
- Python數據可視化之Matplotlib與Pyecharts實戰
- Kinect for Windows SDK Programming Guide
- C#實踐教程(第2版)
- 詳解MATLAB圖形繪制技術
- Essential C++(中文版)
- 深度探索Go語言:對象模型與runtime的原理特性及應用
- Practical Predictive Analytics
- 虛擬現實建模與編程(SketchUp+OSG開發技術)
- Koa與Node.js開發實戰
- PHP程序設計高級教程
- Web應用程序設計:ASP