1. 程式人生 > >支援向量機(svm)新手入門篇

支援向量機(svm)新手入門篇

SVM叫做支援向量機( Support Vector Machines)是由Vanpik領導的AT&TBell實驗室研究小組 在1963年提出的一種新的非常有潛力的分類技術, SVM是一種基於統計學習理論的模式識別方法,主要應用於模式識別領域.由於當時這些研究尚不十分完善,在解決模式識別問題中往往趨於保守,且數學上比較艱澀,因此這些研究一直沒有得到充的重視.直到90年代,一個較完善的理論體系—統計學習理論 ( StatisticalLearningTheory,簡稱SLT) 的實現和由於神經網路等較新興的機器學習方法的研究遇到一些重要的困難,比如如何確定網路結構的問題、過學習與欠學習問題、區域性極小點問題等,使得SVM迅速發展和完善,在解決小樣本 、非線性及高維模式識別問題中表現出許多特有的優勢,並能夠推廣應用到函式擬合等其他機器學習問題中.從此迅速的發展起來,現在已經在許多領域(生物資訊學,文字和手寫識別等)都取得了成功的應用。

1.        準備工作

1)       確立分類器個數

一般都事先確定分類器的個數,當然,如有必要,可在訓練過程中增加分類器的個數。分類器指的是將樣本中分幾個型別,比如我們從樣本中需要識別出:車輛、行人、非車並非人,則分類器的個數是3。

分類器的個數用k

2)       影象庫建立

SVM方法需要建立一個比較大的樣本集,也就是影象庫,這個樣本集不僅僅包括正樣本,還需要有一定數量的負樣本。通常樣本越多越好,但不是絕對的。

設樣本數為S

3)       ROI提取

對所有樣本中的可能包含目標的區域(比如車輛區域)手動或自動提取出來,此時包括正樣本中的目標區域,也包括負樣本中類似車輛特徵的區域或者說干擾區域。

4)       ROI預處理

包括背景去除,影象濾波,或者是邊緣增強,二值化等預處理。預處理的方法視特徵的選取而定。

5)       特徵向量確定

描述一個目標,打算用什麼特徵,用幾個特徵,給出每個特徵的標示方法以及總的特徵數,也就是常說的特徵向量的維數。

對於車輛識別,可用的特徵如:車輛區域的灰度均值、灰度方差、對稱性、資訊熵、傅立葉描述子等等。

設特徵向量的維數是L。

6)       特徵提取

確定採取的特徵向量之後,對樣本集中所有經過預處理之後的ROI區域進行特徵提取,也就是說計算每個ROI區域的所有特徵值,並將其儲存。

7)       特徵向量的歸一化

常用的歸一化方法是:先對相同的特徵(每個特徵向量分別歸一化)進行排序,然後根據特徵的最大值和最小值重新計算特徵值。

8)       核的選定

SVM的構造主要依賴於核函式的選擇,由於不適當的核函式可能會導致很差的分類結果,並且目前尚沒有有效的學習使用何種核函式比較好,只能通過實驗結果確定採用哪種核函式比較好。訓練的目標不同,核函式也會不同。

核函式其實就是採用什麼樣的模型描述樣本中目標特徵向量之間的關係。如常用的核函式:Gauss函式

對樣本的訓練就是計算p矩陣,然後得出描述目標的模板和代表元。

2.        訓練

訓練就是根據選定的核函式對樣本集的所有特徵向量進行計算,構造一個使樣本可分的特徵空間。

其訓練步驟如下:

1)       用分類器將所有樣本集的特徵分類

2)       根據選定的核函式分別計算每個分類器中每個特徵向量的有關值

3)       根據這些特徵相關值計算協方差矩陣空間

4)       對這個協方差矩陣空間進行Householder變換,也就是說將一個向量變換為由一個超平面反射的映象,是一種線性變換。超平面的法向量被稱作Householder向量。因為SVM就是在特徵空間中構造最優超平面。

具體變換方法可參照相關文章。裡面涉及大量的矩陣運算。

5)       計算特徵係數

得到協方差矩陣以及其對應的超平面矩陣,根據這兩個矩陣分別計算每個特徵的特徵係數,並將特徵係數對協方差矩陣進行縮放。

6)       獲得模型引數paramInvSigma,paramLogSigma

對縮放後的協方差矩陣paramSigma求逆後,計算模型引數。其計算方法參照程式:

for (i=0; i<numClass; i++)

       {

              for(j=0; j<size; j++)

              {

                     sigma.pdata[j]= this->paramSigma[i*size+j];

              }

              sigma.inv(invSigma);

              for(j=0; j<size; j++)

              {

                     this->paramInvSigma[i*size+j]= invSigma.pdata[j];

              }

              this-> paramLogSigma[i] = log(sigma.det())-2*log(((DOUBLE)classSample[i])/((DOUBLE)totalSample));

       }

3.        比較測試

    比較測試是SVM方法的最後一步,也就是說通過訓練得到訓練模型引數之後,就可根據模型引數對一個ROI區域進行計算,判斷其歸類。

   比較測試首先是對測試影象進行預處理,然後提取特徵,將這些特徵引數與訓練結果的模型引數進行比對,比對方法可參照文獻中介紹的:

得到對應的類別標誌:

4.        總結

SVM方法最主要的工作是樣本訓練,獲得訓練模型引數。

由於時間關係,暫時只對SVM有這些瞭解,只能算對SVM有一個初步的認識。並且上述總結都是在閱讀文獻之後的認識,難免有不少錯誤和不足,所以本文只能作為一個小參考。在對SVM有個初步的認識之後,需要仔細閱讀其原理,分析其中的矩陣運算及思想。SVM中涉及大量的矩陣運算和推導,需要弄清楚,這樣才能明白模型引數的含義,以便於判斷當前選定的核函式是否合適。

相關推薦

支援向量svm新手入門

SVM叫做支援向量機( Support Vector Machines)是由Vanpik領導的AT&TBell實驗室研究小組 在1963年提出的一種新的非常有潛力的分類技術, SVM是一種基於統計學習理論的模式識別方法,主要應用於模式識別領域.由於當時這些研究尚

支援向量SVM入門到放棄再到掌握

前言 朋友,你通過各種不同的途經初次接觸支援向量機(SVM)的時候,是不是會覺得這個東西耳熟能詳,感覺大家都會,卻唯獨自己很難理解? 每一次你的老闆或者同仁讓你講解SVM的時候,你覺得你看過這麼多資料,使用過這麼多次,講解應該沒有問題,但偏偏在分享的時候結結巴巴,漏洞百出? 每一

4.支援向量SVM演算法(下

1.SVM演算法的特點  1.1 訓練好的模型的演算法複雜度是由支援向量的個數決定的,而不是由資料的維度決定的。 所有SVM不太容易產生overfitting 1.2 SVM訓練出來的模型完全依賴於支援向量(Support Vectors),即使訓練集裡面所有非支援向量的點都

3.支援向量SVM演算法(上

SVM 1.基本概念 支援向量機(Support Vector Machine, SVM)的基本模型是在特徵空間上找到最佳的分離超平面使得訓練集上正負樣本間隔最大。SVM是用來解決二分類問題的有監督學習演算法,在引入了核方法之後SVM也可以用來解決非線性問題。  一般SVM有下面三

1. 支援向量SVM原理

1. 前言 在我沒有學習接觸機器學習之前,我就已經聽說了SVM這個機器學習的方法。SVM自它誕生以來就以優秀的分類效能牢牢佔據了霸主地位。 2. SVM原理 支援向量機(Support Vector Machine, SVM)的基本模型是在特徵空間上找到最佳的分離超平面使得訓練集上正負樣本間隔最大。SV

3. 支援向量SVM核函式

1. 前言 之前介紹了SVM的原理和SVM的軟間隔,它們已經可以很好的解決有異常點的線性迴歸問題,但是如果本身是非線性的問題,目前來看SVM還是無法很好的解決的。所以本文介紹SVM的核函式技術,能夠順利的解決非線性的問題。 2. 多項式迴歸 在線性迴歸一節中我們有介紹線性迴歸解決非線性的一個方法就是多項

邏輯迴歸LR支援向量SVM的區別和聯絡

1. 前言 在機器學習的分類問題領域中,有兩個平分秋色的演算法,就是邏輯迴歸和支援向量機,這兩個演算法個有千秋,在不同的問題中有不同的表現效果,下面我們就對它們的區別和聯絡做一個簡單的總結。 2. LR和SVM的聯絡 都是監督的分類演算法。 都是線性分類方法 (不考慮核函式時)。 都是判別

支援向量SVM實現MNIST手寫體數字識別

一、SVM演算法簡述 支援向量機即Support Vector Machine,簡稱SVM。一聽這個名字,就有眩暈的感覺。支援(Support)、向量(Vector)、機器(Machine),這三個毫無關聯的詞,硬生生地湊在了一起。從修辭的角度,這個合成詞最終落腳到”Machine”上,還以

第七章 支援向量SVM

1.1 支援向量機 1.1.1 定義 支援向量機(support vector machine)是一種二分類模型,它的基本模型是定義在特徵空間上的間隔最大的線性分類器間隔最大使它有別於感知機。支援向量機的學習策略是間隔最大化,支援向量機的學習演算法是求解凸二次規劃的最優化演算法。 

支援向量SVM | 文末有福利,絕不是標題黨

1、什麼是SVM 支援向量機(SVM)是一個有監督的機器學習演算法,它可用於分類和迴歸分析,最主要是用在分類問題中。 在這個演算法中,根據特徵值,構建一個n維空間(其中n即使特徵數量)把每個資料點投影到此空間內。 2、資料如何分類 通過查詢一個超平面,把資料區分成兩類。換句話說,演算法

python opencv3.x中支援向量svm模型儲存與載入問題

親自驗證,可以解決svm的模型載入問題:     import numpy as np     from sklearn import datasets         &nb

支援向量SVM和python實現

6. python實現 根據前面的一步步推導獲得的結果,我們就可以使用python來實現SVM了 這裡我們使用iris資料集進行驗證,由於該資料集有4維,不容易在二維平面上表示,我們先使用LDA對其進行降維,又因為該資料集有3類樣本,我們編寫的SVM是二分類的,所以我們將

支援向量SVM和邏輯迴歸(LR)

開篇 為什麼把這兩個機器模型放在一起呢,主要是因為它們經常會在面試中同時出現,這邊把它們放在一起,解析一下它們之間的聯絡和區別。我們先看一下問題 經典演算法問題 LR 與 SVM 的相同和不同? 講一下其中的LR、SVM,以及區別和聯絡(2018京東演算

簡單粗暴理解支援向量SVM及其MATLAB例項

目錄 SVM概述 QP求解 SVM概述 SVM已經是非常流行、大家都有所耳聞的技術了。網路上也有很多相關的部落格,講解得都非常詳細。如果你要從零開始推導一個SVM,細緻摳它全程的數學原理,我建議可以閱讀此篇文章:Zhang Hao的《從零構建支援向

[譯] 支援向量SVM教程

原文地址:Support Vector Machine (SVM) Tutorial 原文作者:Abhishek Ghose 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold-m… 譯者:zhmhhu 校對者:TrWestdoor, 1

機器學習-支援向量SVM演算法學習筆記

假設有訓練集D={(x1, y1), (x2, y2), ..., (xm, ym)},yi{-1, 1},分類學習最基本的想法就是基於訓練集D在樣本空間中找到一個劃分超平面,將不同類別的樣本分開。

機器學習筆記支援向量SVM

支援向量機是目前機器學習的眾多演算法中使用得最為廣泛的演算法之一,本文主要介紹支援向量機的概念與原理。 目錄 什麼是支援向量機 硬間隔線性支援向量機 軟間隔線性支援向量機 非線性支援向量機     一、什麼是支援向量機 &nbs

時間序列arima+支援向量svm+優化=組合預測

看見大家想學習組合預測,我今晚就準備加班,給大家上一個arima+svm的組合預測,有什麼不足的請指出了,時間序列是一個大類,我今天主要是給大家展示的是最常用的arima. 這裡原理就不介紹了,只講應用,你可以自己搜尋網上原理或者關注我後面論文,我會專門寫一個

TensorFlow深度學習框架學習:TensorFlow實現線性支援向量SVM

SVM的原理可以參考李航的《統計學習方法》 具體程式碼如下,程式碼都有註釋的 #1、匯入必要的庫 import matplotlib.pyplot as plt import numpy as np import tensorflow as tf fro

機器學習——支援向量SVM

本文主要參考吳恩達《機器學習》課程,以及網上各個大牛們的博文。 支援向量機,是一種對線性和非線性資料進行分類的方法。它按以下方法工作:使用一種非線性對映,把原訓練資料對映到較高的維上,在新的維上,它搜尋最佳分離超平面。使用到足夠高維上的、合適的非線性對映,兩個類的資料總可以