1. 程式人生 > >淺談支援向量機(Support Vector Machine)

淺談支援向量機(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一定不比線性核函式差,但是在實際應用中,卻面臨幾個重要超引數的調優問題。如果調的不好,可能比線性核函式還要差。所以實際應用中,能用線性核函式得到較好效果的都會選擇

機器學習實戰支援向量SVMSupport Vector Machine

目錄 0. 前言 1. 尋找最大間隔 2. 拉格朗日乘子法和KKT條件 3. 鬆弛變數 4. 帶鬆弛變數的拉格朗日乘子法和KKT條件 5. 序列最小優化SMO(Sequential Minimal Optimiz

機器學習與深度學習系列連載: 第一部分 機器學習支援向量2Support Vector Machine

另一種視角定義SVM:hinge Loss +kennel trick SVM 可以理解為就是hingle Loss和kernel 的組合 1. hinge Loss 還是讓我們回到二分類的問題,為了方便起見,我們y=1 看做是一類,y=-1 看做是另一類

機器學習——支援向量SVMSupport 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的原理、目標以及計算過程和演算法步驟。我們針對線性可分資