一步步教你輕鬆學支援向量機SVM演算法之理論篇1
ofollow,noindex">一步步教你輕鬆學支援向量機SVM演算法之理論篇1
(白寧超 2018年10月22日10:03:35)
摘要:支援向量機即SVM(Support Vector Machine) ,是一種監督學習演算法,屬於分類的範疇。首先,支援向量機不是一種機器,而是一種機器學習演算法。在資料探勘的應用中,與無監督學習的聚類相對應和區別。廣泛應用於機器學習,計算機視覺和資料探勘當中。(本文原創,轉載必須註明出處.)
目錄
1 機器學習:一步步教你輕鬆學KNN模型演算法
2 機器學習:一步步教你輕鬆學決策樹演算法
3 機器學習:一步步教你輕鬆學樸素貝葉斯模型演算法理論篇1
4 機器學習:一步步教你輕鬆學樸素貝葉斯模型實現篇2
5 機器學習:一步步教你輕鬆學樸素貝葉斯模型演算法Sklearn深度篇3
6 機器學習:一步步教你輕鬆學邏輯迴歸模型演算法
7 機器學習:一步步教你輕鬆學K-means聚類演算法
8 機器學習:一步步教你輕鬆學關聯規則Apriori演算法
9 機器學習: 一步步教你輕鬆學支援向量機SVM演算法之理論篇1
10 機器學習: 一步步教你輕鬆學支援向量機SVM演算法之案例篇2
11 機器學習: 一步步教你輕鬆學主成分分析PCA降維演算法
12 機器學習: 一步步教你輕鬆學支援向量機SVM降維演算法
更多文章請點選這裡>>
相關概念
- 支援向量就是
資料集中的某些點
,位置比較特殊。比如 x+y-2=0 這條直線,直線上面區域 x+y-2>0 的全是 A 類,下面的 x+y-2<0 的全是 B 類,我們找這條直線的時候,一般就看聚集在一起的兩類資料,他們各自的最邊緣
位置的點,也就是最靠近劃分直線的那幾個點,而其他點對這條直線的最終位置的確定起不了作用,所以我姑且叫這些點叫 “支援點”(意思就是有用的點). - 在最大間隔上的這些點就叫 “支援向量”,因為最後的 classification machine (分類器)的表示式裡只含有這些 “支援向量” 的資訊,而與其他資料點無關,藉助圖形理解(支援向量就是圖中用紫色框框圈出來的點)如下:
-
線性可分(linearly separable)
: 如上圖中的兩組資料,它們之間已經分的足夠開了,因此很容易就可以在圖中畫出一條直線將兩組資料點分開。在這種情況下,這組資料就被稱為線性可分資料
。 -
分隔超平面(separating hyperplane)
: 上述將資料集分隔開來的直線稱為分隔超平面
。 -
超平面(hyperplane)
: 在上面給出的例子中,由於資料點都在二維平面上,所以此時分隔超平面就只是一條直線。但是,如果所給的資料集是三維的,那麼此時用來分隔資料的就是一個平面。顯而易見,更高緯度的情況可以依此類推。如果資料是 1024 維的,那麼就需要一個 1023 維的某某物件來對資料進行分隔。這個 1023 維的某某物件到底應該叫什麼呢? N-1 維呢?該物件被稱為超平面
,也就是分類的決策邊界
。分佈在超平面一側的所有資料都屬於某個類別,而分佈在另一側的所有資料則屬於另一個類別。 -
間隔(margin)
: 我們希望能通過上述的方式來構建分類器,即如果資料點離決策邊界越遠,那麼其最後的預測結果也就越可信。既然這樣,我們希望找到離分隔超平面最近的點,確保它們離分隔面的距離儘可能遠。這裡所說的點到分隔面的距離就是間隔
。我們希望間隔儘可能地大,這是因為如果我們犯錯或者在有限資料上訓練分類器的話,我們希望分類器儘可能健壯。 -
支援向量(support vector)
: 就是上面所說的離分隔超平面最近的那些點。 -
分類器
: 分類器就是給定一個樣本的資料,判定這個樣本屬於哪個類別的演算法。例如在股票漲跌預測中,我們認為前一天的交易量和收盤價對於第二天的漲跌是有影響的,那麼分類器就是通過樣本的交易量和收盤價預測第二天的漲跌情況的演算法。 -
特徵
: 在分類問題中,輸入到分類器中的資料叫做特徵。以上面的股票漲跌預測問題為例,特徵就是前一天的交易量和收盤價。 -
線性分類器
: 線性分類器是分類器中的一種,就是判定分類結果的根據是通過特徵的線性組合得到的,不能通過特徵的非線性運算結果作為判定根據。還以上面的股票漲跌預測問題為例,判斷的依據只能是前一天的交易量和收盤價的線性組合,不能將交易量和收盤價進行開方,平方等運算。
SVM 原理
直觀理解
我們在桌子上放置一些不同顏色的球,讓小明用一根棍分開它們?要求:儘量在放更多球之後,仍然適用。
於是小明這樣放,看起來還不錯?
然後我們又在桌上放了更多的球,似乎有一個球站錯了陣營。
SVM 就是試圖把棍放在最佳位置,好讓在棍的兩邊有儘可能大的間隙。
現在即使我們放了更多的球,棍仍然是一個好的分界線。
然後,在 SVM 工具箱中有另一個更加重要的 trick。 我們看到小明已經學會了一個 trick ,於是我們給了小明一個新的挑戰。
現在,小明沒有棍可以很好幫他分開兩種球了,現在怎麼辦呢?當然像所有武俠片中一樣大俠桌子一拍,球飛到空中。然後,憑藉大俠的輕功,大俠抓起一張紙,插到了兩種球的中間。
現在,從我們的角度看這些球,這些球看起來像是被一條曲線分開了。
我們把這些球叫做 「data」
,把棍子叫做 「classifier」
, 最大間隙 trick 叫做 「optimization」
, 拍桌子叫做 「kernelling」
, 那張紙叫做 「hyperplane」
。到這裡,大家對支援向量機有個更加直觀的感受了吧,以上引用網路案例。
支援向量機分類
先考慮最簡單的情況,豌豆和米粒,用晒子很快可以分開,小顆粒漏下去,大顆粒保留。用一個函式來表示就是當直徑 d 大於某個值 D ,就判定為豌豆,小於某個值就是米粒。
- d>D, 豌豆
- d<D,米粒
在數軸上就是在d左邊就是米粒,右邊就是綠豆,這是一維的情況。但是實際問題沒這麼簡單,考慮的問題不單單是尺寸,一個花的兩個品種,怎麼分類?
假設決定他們分類的有兩個屬性,花瓣尺寸和顏色。單獨用一個屬性來分類,像剛才分米粒那樣,就不行了。這個時候我們設定兩個值 尺寸 x 和顏色 y.我們把所有的資料都丟到 x-y 平面上作為點,按道理如果只有這兩個屬性決定了兩個品種,資料肯定會按兩類聚集在這個二維平面上。我們只要找到一條直線,把這兩類劃分開來,分類就很容易了,以後遇到一個數據,就丟進這個平面,看在直線的哪一邊,就是哪一類。比如 x+y-2=0 這條直線,我們把資料 (x,y) 代入,只要認為 x+y-2>0 的就是 A 類, x+y-2<0 的就是 B 類。以此類推,還有三維的,四維的,N維的 屬性的分類,這樣構造的也許就不是直線,而是平面,超平面。
一個三維的函式分類 :x+y+z-2=0,這就是個分類的平面了。有時候,分類的那條線不一定是直線,還有可能是曲線,我們通過某些函式來轉換,就可以轉化成剛才的哪種多維的分類問題,這個就是核函式的思想。例如:分類的函式是個圓形 x^2+y^2-4=0 。這個時候令 x^2=a ; y^2=b ,還不就變成了a+b-4=0 這種直線問題了。這就是支援向量機的思想。
SVM 工作原理
原理
對於上述的蘋果和香蕉,我們想象為2種水果型別的炸彈。(保證距離最近的炸彈,距離它們最遠)
- 尋找最大分類間距
- 轉而通過拉格朗日函式求優化的問題
- 資料可以通過畫一條直線就可以將它們完全分開,這組資料叫
線性可分(linearly separable)
資料,而這條分隔直線稱為分隔超平面(separating hyperplane)
。 - 如果資料集上升到1024維呢?那麼需要1023維來分隔資料集,也就說需要N-1維的物件來分隔,這個物件叫做
超平面(hyperlane)
,也就是分類的決策邊界。
SVM學習方法的選擇
- 當訓練資料線性可分時,通過
硬間隔最大化
學習一個線性分類器,即線性可分支援向量機
又稱為硬間隔支援向量機
。 - 當訓練資料近似線性可分時,通過
軟間隔最大化
學習一個線性分類器,即線性可分支援向量機
又稱為軟間隔支援向量機
。 - 當訓練資料線性不可分時,通過
核函式及軟間隔最大化
學習一個非線性支援向量機
。
更多內容參考如下資料:
https://www.zhihu.com/question/21094489 http://docs.opencv.org/2.4/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html https://zhuanlan.zhihu.com/p/26891427?utm_medium=social&utm_source=qq https://zhuanlan.zhihu.com/p/21308801?utm_medium=social&utm_source=qq http://blog.csdn.net/v_july_v/article/details/7624837
理解和應用
資料探勘(DataMining)
做資料探勘應用的一種重要演算法,也是效果最好的分類演算法之一。舉個例子,就是儘量把樣本中的從更高緯度看起來在一起的樣本合在一起,比如在一維(直線)空間裡的樣本從二維平面上可以分成不同類別,而在二維平面上分散的樣本如果從第三維空間上來看就可以對他們做分類。支援向量機演算法目的是找出最優超平面,使分類間隔最大,要求不但正確分開,而且使分類間隔最大,在兩類樣本中離分類平面最近且位於平行於最優超平面的超平面上的點就是支援向量,為找到最優超平面只要找到所有支援向量即可。對於非線性支援向量機,通常做法是把線性不可分轉化成線性可分,通過一個非線性對映將輸入到低維空間中的資料特性對映到高維線性特徵空間中,在高維空間中求線性最優分類超平面。
scikit(scikit-learn)
SVM 的基本原理基本上已經說的差不多了,下面咱們就來看看 SVM 在實際應用該如何使用了。幸運的是,sklearn 提供了一個非常好用的機器學習演算法,我們呼叫相關的包就好啦。
參考文獻
- scikit中文社群: http://sklearn.apachecn.org/cn/0.19.0/
- ApacheCN
- GitHub: https://github.com/BaiNingchao/MachineLearning-1
- 圖書:《機器學習實戰》
- 圖書:《自然語言處理理論與實戰》
完整程式碼下載
原始碼請進【機器學習和自然語言QQ群:436303759】檔案下載:
作者宣告
本文版權歸作者所有,旨在技術交流使用。未經作者同意禁止轉載,轉載後需在文章頁面明顯位置給出原文連線,否則相關責任自行承擔。