呂永強(qiáng)
(山東科技大學(xué)數(shù)學(xué)與系統(tǒng)科學(xué)學(xué)院 山東 青島 266590)
支持向量機(jī)的應(yīng)用
呂永強(qiáng)
(山東科技大學(xué)數(shù)學(xué)與系統(tǒng)科學(xué)學(xué)院 山東 青島 266590)
支持向量機(jī)算法是十大經(jīng)典算法之一,對于數(shù)據(jù)分類,數(shù)據(jù)回歸方便有著極好的應(yīng)用。在實(shí)際操作中,我們常用它來處理分類問題。但傳統(tǒng)的支持向量機(jī)存在噪聲太多,數(shù)據(jù)處理太慢和收斂過快的問題,可通過調(diào)整參數(shù)進(jìn)行改進(jìn)。本文將建立一個(gè)模型,實(shí)現(xiàn)對支持向量機(jī)的簡單應(yīng)用。
支持向量機(jī);分割超平面
在實(shí)際問題中。我們可以對分類化做數(shù)學(xué)描述,轉(zhuǎn)化數(shù)量和點(diǎn)的形式,然后對問題進(jìn)行數(shù)學(xué)描述,將問題應(yīng)用到支持向量機(jī)中,得到適合支持向量機(jī)的求解模型。我們需要得到支持向量機(jī)的原始提法。
現(xiàn)在給出分類問題的原始提法。設(shè)分類對象可以表示為
x=([x]1,…,[x]n)T,
分類對象有n個(gè)特征,[x]i特征i的指標(biāo)。找出若干個(gè)分類對象,構(gòu)建出原始訓(xùn)練集
T={(x1,y1),…,(xl,yl)},
(xi,yi),xi=([xi]1,…,[xi]n)T為第i個(gè)分類對象對應(yīng)的訓(xùn)練點(diǎn)的輸入,yi∈γ={-1,1}為第i個(gè)分類對象對應(yīng)的訓(xùn)練點(diǎn)的輸出。我們可以依此得出分類問題的原始提法,取實(shí)值函數(shù)g(x),g(x)∈Rn,用于決策函數(shù)f(x)=sgn(g(x))
推斷給出輸入x相對應(yīng)的y值。接下來進(jìn)行特征選擇,再進(jìn)行特征提取,完成構(gòu)建。
支持向量機(jī)實(shí)質(zhì)是一個(gè)判別分類器,通過分類超平面進(jìn)行判別。支持向量機(jī)可以將不同類別的樣本進(jìn)行空間分隔。工作機(jī)理也,把一些標(biāo)記(label)好的訓(xùn)練樣本(監(jiān)督式學(xué)習(xí)),通過SVM算法,輸出一個(gè)最優(yōu)化的分隔超平面,使平面上的所有點(diǎn)到平面的距離之和最大。
假定在空間中標(biāo)定了一堆分屬于二類用顏色分類的二維點(diǎn)假設(shè)在空間存在兩類用顏色分類的二維點(diǎn),位置信息就是它的數(shù)據(jù)。SVM算法的實(shí)質(zhì)是找出一個(gè)能夠?qū)⒛硞€(gè)值最大化的超平面,這個(gè)值就是超平面離所有訓(xùn)練樣本的最小距離。這個(gè)最小距離用SVM術(shù)語來說叫做間隔(margin)。得到的最優(yōu)分割超平面噪聲低,敏感性高。
通過SVM最優(yōu)分割超平面,得到分割特征和分割程序。輸入新的數(shù)據(jù),通過特征提取,得到位置信息,就可以找出它應(yīng)該是哪一種顏色(類別)了。
通過目前已有的點(diǎn)的信息,訓(xùn)練SVM得到一個(gè)所有參數(shù)都適用的分區(qū)模型。然后 for 循環(huán)根據(jù)已經(jīng)訓(xùn)練好的模型,根據(jù)新輸入的值,輸出預(yù)測新值以及所這個(gè)點(diǎn)所對應(yīng)的類別。本文通過SVM 進(jìn)行樣本訓(xùn)練,通過其判別能力,將整個(gè)空間依據(jù)SVM分類的結(jié)果劃分,并顯示支持向量。
(一)建立訓(xùn)練樣本
本文中的訓(xùn)練樣本分為兩類,程序如下:
float labels[4]= {1.0,-1.0,-1.0,-1.0};
float trainingData[4][2]= { {501,10},{255,10},{501,255},{10,501} };
函數(shù) CvSVM::train 訓(xùn)練數(shù)據(jù)儲(chǔ)存儲(chǔ)存類型為float儲(chǔ)存在其 Mat 結(jié)構(gòu)中。
Mat labelsMat(3,1,CV_32FC1,labels);
Mat trainingDataMat(3,2,CV_32FC1,trainingData);
(二)SVM參數(shù)設(shè)定
這些參數(shù)保存在類 CvSVMParams 中。
SVM類型,這里我們選擇了 CvSVM::C_SVC 類型,該類型可以用于n-類分類問題(n-2)。這個(gè)參數(shù)定義在 CvSVMParams.svm_type 屬性中。
SVM核類型,核函數(shù)是一個(gè)映射函數(shù),通過映射,使訓(xùn)練后的樣本更容易線性分割,映射后樣本的維度增加。此處我們選擇的核函數(shù)類型是CvSVM::LINEAR 表示不需要進(jìn)行映射。
算法終止條件.SVM訓(xùn)練的過程是一個(gè)通過迭代解決約束下的二次優(yōu)化問題,我們給出一個(gè)最大迭代次數(shù)和容許誤差,作為算法的終止準(zhǔn)則。
(三)訓(xùn)練支持向量機(jī)
調(diào)用函數(shù) CvSVM::train 來建立SVM模型
CvSVM SVM;
SVM.train(trainingDataMat,labelsMat,Mat(),Mat(),params);
(四)SVM區(qū)域分割
函數(shù) CvSVM::predict 重建訓(xùn)練完畢的支持向量機(jī)來將輸入的樣本分類。 使用這個(gè)函數(shù)給對向量空間進(jìn)行著色,我們將圖中的所有的像素作為卡迪爾平面上的點(diǎn),每一點(diǎn)的著由于SVM分類類別決定:綠色為標(biāo)記為1的點(diǎn),藍(lán)色為標(biāo)記為-1的點(diǎn)。
(五)支持向量
這里用了幾個(gè)函數(shù)來獲取支持向量的信息。函數(shù) CvSVM::get_support_vector_count 輸出支持向量的數(shù)量,函數(shù) CvSVM::get_support_vector 根據(jù)輸入支持向量的索引來獲取指定位置的支持向量。 通過這一方法我們找到訓(xùn)練樣本的支持向量并突出顯示它們。
程序得到了一個(gè)二分類圖像,通過訓(xùn)練得到SVM,將圖像按照像素分類。分類將圖像分為兩部分。
圖1 最優(yōu)分割超平面
最后支持向量通過灰色邊框加重顯示。
圖2 支持向量
呂永強(qiáng)(1992-),男,漢族,山東濰坊人,在讀研究生,山東科技大學(xué)數(shù)學(xué)與系統(tǒng)科學(xué)學(xué)院,研究方向:系統(tǒng)分析與集成。