支援向量機(SVM)

2021-06-15 11:03:34 字數 2393 閱讀 8366

簡介:

術語:支援向量機 (svm)是乙個類分類器,正式的定義是乙個能夠將不同類樣本在樣本空間分隔的超平面。 換句話說,給定一些標記(label)好的訓練樣本(監督式學習), svm演算法輸出乙個最優化的分隔超平面。

首先我們假定有乙個未知的欲分類的集合,可以進行分割,但是我們不知道分割的函式(超平面,也叫真實模型)。於是我們通過已知的樣本集合進行訓練,得到近視模型。然後我們用這個近視模型對未知的欲分類的點進行分割。

這裡存在乙個問題,即近似模型和真實模型之間存在誤差。(svm和普通分類有什麼區別呢?)

這裡要說兩個誤差,乙個是經驗誤差,乙個是置信誤差。

經驗誤差,就是樣本訓練中樣本本身的誤差,一般解決辦法是提高樣本量,可以減少經驗誤差。

置信誤差,就是訓練後的近似模型與真實模型之間的誤差。

普通的分類函式一般都是減少經驗誤差,但是對於置信誤差,卻沒有處理也沒有好的辦法來處理,這就導致了分類函式對於樣本幾乎100%正確分類,對於樣本外的,效果有時候差強人意。

而svm則是結構誤差最小,即結構誤差=經驗誤差 + 置信誤差。

svm減少置信誤差的方法是樣本集合到達近似模型距離最小,此時的近似模型被認為最接近於真實模型。

所以,svm得到的近似模型更加接近於真實模型,

下面來說說svm的簡單步驟,

1:準備好樣本集合和欲分類的集合。

2:設定svm引數,其中有乙個是核函式,其作用是將不能線性分割的集合對映到更高維度的空間(可以進行線性分割的空間)。所以這個函式比較重要。

3:建立svm物件,利用上述樣本集合和設定好的引數開始訓練。

4:利用訓練好的svm,對欲分類的集合進行分割。

大概步驟如上。說明一下,有時候我們需要不斷的迭代運算才能不斷的逼近真實模型,雖然每一次運算都能更加進一步逼近真實模型,但限於時間與運算量限制,所以我們一般加上最大迭代次數限制和最大誤差限制。

下面給出opencv2.x的svm簡要示例**:

#include "stdafx.h"

#include

#include

#include

using namespace cv;

int main()

;mat labelsmat(3, 1, cv_32fc1, labels);

float trainingdata[4][2] = , , , };

mat trainingdatamat(3, 2, cv_32fc1, trainingdata);

// 設定svm的引數

cvsvmparams params;

params.svm_type    = cvsvm::c_svc;

params.kernel_type = cvsvm::linear;

params.term_crit   = cvtermcriteria(cv_termcrit_iter, 100, 1e-6);

// 訓練svm

cvsvm svm;

svm.train(trainingdatamat, labelsmat, mat(), mat(), params);

vec3b green(0,255,0), blue (255,0,0);

// 顯示svm對於給定的欲分類的樣本點的分類結果(將顯示在影象上面)

for (int i = 0; i < image.rows; ++i)

for (int j = 0; j < image.cols; ++j)

// 顯示訓練資料

int thickness = -1;

int linetype = 8;

circle( image, point(500,  10), 5, scalar(  0,   0,   0), thickness, linetype);

circle( image, point(200,  10), 5, scalar(255, 255, 255), thickness, linetype);

circle( image, point(500, 200), 5, scalar(255, 255, 255), thickness, linetype);

circle( image, point( 10, 500), 5, scalar(255, 255, 255), thickness, linetype);

// 顯示支援向量

thickness = 2;

linetype  = 8;

int c     = svm.get_support_vector_count();

for (int i = 0; i < c; ++i)

imwrite("result.png", image);        // 儲存

imshow("svm ****** example", image); // 給使用者顯示

waitkey(0);

}

支援向量機SVM

支援向量機svm support vector machine 是機器學習領域的乙個有監督的學習模型。一 簡介 支援向量機建立在統計學習理論的基礎之上。統計學習理論 statistical learning theory簡稱slt 是一種處理小樣本的統計理論 為研究有限樣本情況下的統計模式識別和更廣...

SVM支援向量機

在機器學習領域,很多時候會用到分類的一些演算法,例如knn,貝葉斯。我們可以把分類的樣本簡單除暴的分為兩種型別。線性可分和非線性可分。可以使用乙個非常簡單的例子來解釋什麼是線性可分,什麼是線性不可分。a 線性可分的2類樣本 b 非線性可分的2類樣 已知乙個線性可分的資料集,其中x表示乙個n維向量,當...

支援向量機(SVM)

支援向量機,其含義是通過支援向量運算的分類器。支援向量機是乙個二類分類器。在求解的過程中,會發現只根據部分資料就可以確定分類器,這些資料稱為支援向量。見下圖,在乙個二維環境中,其中點r,s,g點和其它靠近中間黑線的點可以看作為支援向量,它們可以決定分類器,也就是黑線的具體引數。線性分類 可以理解為在...