簡介:
術語:支援向量機 (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點和其它靠近中間黑線的點可以看作為支援向量,它們可以決定分類器,也就是黑線的具體引數。線性分類 可以理解為在...