[資料分析&機器學習] 第3.4講:支援向量機(Support Vector Machine)介紹

Yeh James
JamesLearningNote
Published in
5 min readNov 3, 2017

支援向量機(Support Vector Machine)簡稱SVM這個名字光看字面三個字的意思都懂,但合起來就完全看不懂了。不過SVM概念很簡單,先聽我說個故事

有一天上帝給了你一個考驗,要你用一個棍子將這兩顆不同顏色的球分開

於是你使用在3.2講所提到的Perceptron或是3.3講的Logistic Regression順利找個一個放棍子的方法將這兩種不同顏色的球分開,

於是上帝又創造一些球出來,你發現原先棍子擺放位子很容易造成未來產生的球的分類錯誤

因此你發現應該要將棍子調整成這樣才能夠在更準確分類在未來產生的球(這就是SVM最主要的核心概念)

上帝發現你已經成長了不少了,簡單的問題難不了你,因此又出一道考題給你,要如何正確分類以下的球

觀察一下後你發現紅球、藍球的質量不太一樣,這時你靈機一動,深呼吸一口氣,將你的查克拉聚集在手上,大力一拍桌子,讓這些球飛到空中,你再拿一張白紙將將些球分開

從正上方的視角來看這藍球跟紅球就像是被一條虛擬的線分開了

動畫

到這邊我們可以大概了解SVM是一個很強大的演算法,除了能得到一條很好的線之外,還可以做非線性的分類!

那SVM是怎麼得到那條很好的線呢?以直線來說,首先紅色的線會創造兩條黑色平行於紅色線的虛線,並讓黑線平移碰到最近的一個點,紅線到黑線的距離稱為Margin,而SVM就是透過去找Margin最大的那個紅線,來找最好的線

那要怎麼讓Margin最大呢?

假設紅線是w*x = 0 在紅線上方的區域就是w*x >0 紅線下方的區域就是w*x <0。

同理類推來看在左邊虛線上方的區域是w*x<-k 在右邊虛線下方的區域是w*x>k,虛線中間不會有資料點。

虛線上的點X1,X2 其實就是所謂的支援向量(Support vector),我們主要是利用支援向量來算出Margin,並最大化Margin。那要怎麼計算margin呢? 利用高中數學的知識將X1向量-X2向量得到的向量投影到W就可以了!接下來就是在Y*(W*X) ≥k 的條件下(虛線中間沒有點),來最大化margin 。

關於SVM的數學概念我們就先講到這邊,想了解更深入的課程可參考Python機器學習書籍,吳恩達在Coursera上的機器學習課程,或是下方的參考閱讀。

接下來要教大家如何使用SkLearn套用SVM的model來預測Iris資料集

載入Iris資料集

將資料分為Train以及Test並將特徵標準化

載入SVM中的SVC,並將kernel設為線性(SVM的Kernel可以換成非線性),並將Probability設為True

SVC是SVM用C++語言實作的版本,背後用的是台灣大學林智仁教授所開發的libsvm

以test data來檢驗預測結果也都是100%全對

可以明顯看到SVM所切出來的線漂亮許多

SVM優點:

  1. 切出來的線很漂亮,擁有最大margin的特性
  2. 可以很容易透過更換Kernel,做出非線性的線(非線性的決策邊界)

SVM缺點:

  1. 效能較不佳,由於時間複雜度為O(n²)當有超過一萬筆資料時,運算速度會慢上許多

程式碼

感謝你閱讀完這篇文章,如果你覺得這些文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)。

[Python資料分析&機器學習]這系列文章是我在Hahow上面所開設課程的講義,如果你是新手想著看影片一步一步學習,可以參考這門課:https://hahow.in/cr/pydataml

如果你對什麼主題的文章有興趣的話,歡迎透過這個連結告訴我:https://yehjames.typeform.com/to/XIIVQC
有任何問題也歡迎在底下留言或是來信告訴我: yehjames23@gmail.com

參考閱讀

  1. 我所理解的 SVM(支持向量机)- 1
  2. 支持向量机(SVM)是什么意思?

--

--