淺談支援向量機(Support Vector Machine)
自從在學校安定下來後,小編的學習效率和時長提高了不少。在最近五天的時間裡,看了大約20節視訊並做了對應章節的程式設計練習。
上一篇文章介紹了欠擬合和過擬合的知識,這次給小夥伴們介紹下支援向量機的知識。
支援向量機和邏輯迴歸(Logistic Regression)很相像,從一方面看,支援向量機是邏輯迴歸的變化版。其重要的區別在於損失函式的不同。
(細線是邏輯迴歸的損失函式影象,粗線是支援向量機的損失函式影象)
如果資料是線性可分(能通過一條直線將不同類別區分開來),支援向量機看起來就是和邏輯迴歸使用了不同但很相似的損失函式,往往這兩個分類器的效果也差不多。
如果資料不是線性可分的,支援向量機就要藉助一個名叫“核函式”的東西來構造非線性邊界。核函式是用來衡量兩個向量的相似度,如果兩個向量的相似度越高,核函式的返回值越大。
常見的核函式有如下幾種:
1.線性核心:表示支援向量機不借助核函式來分類。
2.高斯核心:利用高斯公式 計算兩個向量的相似度。
3.多項式核心:利用 公式計算兩個向量的相似度。
下面小編分別用線性核心和高斯核心來實際操作下。
使用線性核心的支援向量機
只有資料集是線性可分的時候,使用線性核心的支援向量機才能夠取得較好的效果。資料集是由二維座標組成的,資料分佈圖如下。
利用Python的sklearn包,使用線性核心的支援向量機訓練資料集的程式碼如下。
linear_svm = svm.SVC(kernel='linear', C=100) #C越大越容易過擬合 linear_svm.fit(X_train, Y_train)
繪製的線性決策邊界如下圖所示。
這裡,我使用的引數C的值為100,較大,對訓練集的擬合效果足夠好了,可以看到已經把所有的資料正確的劃分開,但不一定代表這個模型就好,很有可能出現過擬合問題。
使用高斯核心的支援向量機
當我們的資料集不再線性可分,我們就要藉助"核函式"來構造一個非線性的決策邊界。比如資料集分佈如下。
利用高斯函式訓練並繪製決策邊界的Python程式碼如下。
#利用核函式為高斯函式的支援向量機訓練並繪製決策邊界 def plot_boundray(): X = [] X1 = 0 x2 = 0 for i in range(0,100,1): X1 = i/100 for j in range(40,100,1): X2 = j/100 X.append([X1, X2]) linear_svm = svm.SVC(kernel='rbf', gamma=50, C=100) linear_svm.fit(X_train, Y_train) Y = linear_svm.predict(X) print(linear_svm.score(X_train, Y_train)) X1_positive, X2_positive, X1_negative, X2_negative = divide_data_by_class(np.array(X), Y) plt.scatter(X1_negative, X2_negative, marker='*', color='green') X1_positive, X2_positive, X1_negative, X2_negative = divide_data_by_class(X_train, Y_train) plt.scatter(X1_positive, X2_positive, marker='+') plt.scatter(X1_negative, X2_negative, marker='.', color ='red') plt.show()
效果圖如下所示。
可以看到決策邊界基本將兩類資料分別開來,但這只是在訓練集上的擬合效果,同樣的可能存在過擬合問題。對於擬合問題的解決,可以利用上篇文章中的一些方法進行探究。
好了,本次分享就到這裡了,有什麼錯誤之處,敬請指正。
相關推薦
淺談支援向量機(Support Vector Machine)
自從在學校安定下來後,小編的學習效率和時長提高了不少。在最近五天的時間裡,看了大約20節視訊並做了對應章節的程式設計練習。上一篇文章介紹了欠擬合和過擬合的知識,這次給小夥伴們介紹下支援向量機的知識。支援向量機和邏輯迴歸(Logistic Regression)很相像,從一方面
支援向量機(support vector machine)(一):線性可分SVM
總結一下,不然過段時間就全忘了,加油~ 1、問題描述 假設,存在兩類資料A,B,如圖1所示,A中資料對應於圖中的實心點,B中資料對應圖中的空心點,現在我們需要得到一條直線,能夠將二者進行區分,這樣的線存在無數條,如圖1中的黑色直線所示,這些線都能夠
支援向量機(support vector machine)(二):線性SVM
通常情況下,存在以下兩種情況: 1、分類完全正確的超平面不一定是最好的; 2、樣本資料不是線性可分的; 如圖1所示,如果按照完全分對這個準則來劃分時,L1為最優分割超平面,但是實際情況如果按照L2來進行劃分,效果可能會更好,分類結果會更加魯棒。
[完]機器學習實戰 第六章 支援向量機(Support Vector Machine)
[參考] 機器學習實戰(Machine Learning in Action) 本章內容 支援向量機(Support Vector Machine)是最好的現成的分類器,“現成”指的是分類器不加修改即可直接使用。基本形式的SVM分類器就可得到低錯
支援向量機(Support Vector Machine,SVM)—— 線性SVM
支援向量機(Support Vector Machine,簡稱 SVM)於 1995 年正式發表,由於其在文字分類任務中的卓越效能,很快就成為機器學習的主流技術。儘管現在 Deep Learning 很流行,SVM 仍然是一種很有的機器學習演算法,在資料集小的情況下能比 Deep Learning 取得更
【機器學習實戰】第6章 支援向量機(Support Vector Machine / SVM)
第6章 支援向量機 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>
神經網路學習筆記-支援向量機(Support Vector Machine,SVM )
基於誤差反向傳播演算法的多層感知器 徑向基函式網路 支援向量機(SupportVector Machine , SVM ) 都是前饋神經網路 ,都用於解決模式分類與非線性對映問題 。 線性可分模
支援向量機(Support Vector machines)
本節主要是觀看Andrew Ng的斯坦福大學系列視訊CS299第6講、第7講等後,加上個人理解,對支援向量機部分做的一個筆記整理。 本文順序是: 綜述各個部分關係 最大間隔分類器 軟、硬間隔分類 核函式 2 最大間隔分類器 首先,我們應該知道求超
如何使用支援向量機(Support Vector Machine,SVM)思想解決迴歸問題
迴歸問題的本質其實就是找到一根直線也好曲線也好,能夠最佳程度擬合我們的資料點,在這裡,怎樣定義擬合其實就是迴歸演算法的關鍵。比如說我們之前學過的線性迴歸演算法定義擬合的方式,就是讓我們的資料點到我們預測的直線相應的MSE的值最小,而對於SVM演算法的思路來說,對擬
機器學習之支援向量機SVM Support Vector Machine (五) scikit-learn演算法庫
一、scikit-learn SVM演算法庫概述 scikit-learn中SVM的演算法庫分為兩類,一類是分類演算法庫,包括SVC、 NuSVC和LinearSVC三個類。另一類是迴歸演算法庫,包括SVR、NuSVR和LinearSVR三個類。相關的
機器學習之支援向量機SVM Support Vector Machine (六) 高斯核調參
在支援向量機(以下簡稱SVM)的核函式中,高斯核(以下簡稱RBF)是最常用的,理論上 RBF一定不比線性核函式差,但是在實際應用中,卻面臨幾個重要超引數的調優問題。如果調的不好,可能比線性核函式還要差。所以實際應用中,能用線性核函式得到較好效果的都會選擇
機器學習實戰(五)支援向量機SVM(Support Vector Machine)
目錄 0. 前言 1. 尋找最大間隔 2. 拉格朗日乘子法和KKT條件 3. 鬆弛變數 4. 帶鬆弛變數的拉格朗日乘子法和KKT條件 5. 序列最小優化SMO(Sequential Minimal Optimiz
機器學習與深度學習系列連載: 第一部分 機器學習(九)支援向量機2(Support Vector Machine)
另一種視角定義SVM:hinge Loss +kennel trick SVM 可以理解為就是hingle Loss和kernel 的組合 1. hinge Loss 還是讓我們回到二分類的問題,為了方便起見,我們y=1 看做是一類,y=-1 看做是另一類
機器學習——支援向量機SVM(Support Vector Machine)(下)
1、SVM演算法特徵 (1)訓練好的模型的演算法複雜度是由支援向量的個數決定的,而不是由資料的維度決定。所以,SVM不太容易產生overfitting。 (2)SVM訓練出來的模型完全依賴於支援向量(
Spark MLlib模型(一) 支持向量機【Support Vector Machine】
ssi p s ext edi sgd 訓練集 turn cati eight 目錄 支持向量機原理 支持向量機代碼(Spark Python) 支持向量機原理 待續... 返回目錄 支持向量機代碼(Spark Pytho
【機器學習實戰-python3】支援向量機(Support Vecrtor Machines SVM)
工具:PythonCharm 書中的程式碼是python2的,而我用的python3,結合實踐過程,這裡會標註實踐時遇到的問題和針對python3的修改。 實踐程式碼和訓練測試資料可以參考這裡 https://github.com/stonycat/ML
機器學習之支援向量機: Support Vector Machines (SVM)
機器學習之支援向量機: Support Vector Machines (SVM) 歡迎訪問人工智慧研究網 課程中心 理解支援向量機(Understanding SVM) 使用支援向量機(Using SVM) 使用高斯核(Gaussian Kern
機器學習總結(三):SVM支援向量機(面試必考)
基本思想:試圖尋找一個超平面來對樣本分割,把樣本中的正例和反例用超平面分開,並儘可能的使正例和反例之間的間隔最大。 演算法推導過程: (1)代價函式:假設正類樣本y =wTx+ b>=+1,負
支援向量機(Python實現)
這篇文章是《機器學習實戰》(Machine Learning in Action)第六章 支援向量機演算法的Python實現程式碼。 1 參考連結 (1)支援向量機通俗導論(理解SVM的三層境界) (2)支援向量機—SMO論文詳解(序列最小最優化演算法) 2 實現程式
機器學習之支援向量機(四)
引言: SVM是一種常見的分類器,在很長一段時間起到了統治地位。而目前來講SVM依然是一種非常好用的分類器,在處理少量資料的時候有非常出色的表現。SVM是一個非常常見的分類器,在真正瞭解他的原理之前我們多多少少都有接觸過他。本文將會詳細的介紹SVM的原理、目標以及計算過程和演算法步驟。我們針對線性可分資