- 綠色版查看
- 綠色版查看
- 綠色版查看
使用方法
1.首先從主頁(yè)上下載libsvm、Python2.5.2和gnuplot 三個(gè)軟件。
2.準(zhǔn)備好數(shù)據(jù),首先要把數(shù)據(jù)轉(zhuǎn)換成Libsvm軟件包要求的數(shù)據(jù)格式為:
label index1:value1 index2:value2 ...
其中對(duì)于分類(lèi)來(lái)說(shuō)label為類(lèi)標(biāo)識(shí),指定數(shù)據(jù)的種類(lèi) ;對(duì)于回歸來(lái)說(shuō)label為目標(biāo)值。(我主要要用到回歸)
Index是從1開(kāi)始的自然數(shù),value是每一維的特征值。
該過(guò)程可以自己使用excel或者編寫(xiě)程序來(lái)完成,也可以使用網(wǎng)絡(luò)上的FormatDataLibsvm.xls來(lái)完成。
FormatDataLibsvm.xls使用說(shuō)明:
先將數(shù)據(jù)按照下列格式存放(注意label放最后面):
value1 value2 ?? label
value1 value2 ?? label
??
然后將以上數(shù)據(jù)粘貼到FormatDataLibsvm.xls中的最左上角單元格,接著工具->宏執(zhí)行行FormatDataToLibsvm宏。就可以得到libsvm要求的數(shù)據(jù)格式。將該數(shù)據(jù)存放到文本文件中進(jìn)行下一步的處理。
3.對(duì)數(shù)據(jù)進(jìn)行歸一化。
該過(guò)程要用到libsvm軟件包中的svm-scale.exe
Svm-scale用法:
用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值: lower = -1,upper = 1,沒(méi)有對(duì)y進(jìn)行縮放) 其中, -l:數(shù)據(jù)下限標(biāo)記;lower:縮放后數(shù)據(jù)下限; -u:數(shù)據(jù)上限標(biāo)記;upper:縮放后數(shù)據(jù)上限; -y:是否對(duì)目標(biāo)值同時(shí)進(jìn)行縮放;y_lower為下限值,y_upper為上限值;(回歸需要對(duì)目標(biāo)進(jìn)行縮放,因此該參數(shù)可以設(shè)定為 –y -1 1 ) -s save_filename:表示將縮放的規(guī)則保存為文件save_filename; -r restore_filename:表示將縮放規(guī)則文件restore_filename載入后按此縮放; filename:待縮放的數(shù)據(jù)文件(要求滿足前面所述的格式)。
縮放規(guī)則文件可以用文本瀏覽器打開(kāi),看到其格式為:
y
lower upper min max x
lower upper
index1 min1 max1
index2 min2 max2
?? 其中的lower 與upper 與使用時(shí)所設(shè)置的lower 與upper 含義相同;index 表 示特征序號(hào);min 轉(zhuǎn)換前該特征的最小值;max 轉(zhuǎn)換前該特征的最大值。數(shù)據(jù)集的縮放結(jié)果在此情況下通過(guò)DOS窗口輸出,當(dāng)然也可以通過(guò)DOS的文件重定向符號(hào)“>”將結(jié)果另存為指定的文件。該文 件中的參數(shù)可用于最后面對(duì)目標(biāo)值的反歸一化。反歸一化的公式為:
(Value-lower)*(max-min)/(upper - lower)+lower
其中value為歸一化后的值,其他參數(shù)與前面介紹的相同。
建議將訓(xùn)練數(shù)據(jù)集與測(cè)試數(shù)據(jù)集放在同一個(gè)文本文件中一起歸一化,然后再將歸一化結(jié)果分成訓(xùn)練集和測(cè)試集。
4.訓(xùn)練數(shù)據(jù),生成模型。
用法: svmtrain [options] training_set_file [model_file]
其中, options(操作參數(shù)):可用的選項(xiàng)即表示的涵義如下所示 -s svm類(lèi)型:設(shè)置SVM 類(lèi)型,默認(rèn)值為0,可選類(lèi)型有(對(duì)于回歸只能選3或4):
0 -- C- SVC 1 -- n - SVC 2 -- one-class-SVM 3 -- e - SVR 4 -- n - SVR -t 核函數(shù)類(lèi)型:設(shè)置核函數(shù)類(lèi)型,默認(rèn)值為2,可選類(lèi)型有: 0 -- 線性核:u'*v 1 -- 多項(xiàng)式核: (g*u'*v+ coef 0)deg ree 2 -- RBF 核:e( u v 2) g - 3 -- sigmoid 核:tanh(g*u'*v+ coef 0) -d degree:核函數(shù)中的degree設(shè)置,默認(rèn)值為3;
-g g :設(shè)置核函數(shù)中的g ,默認(rèn)值為1/ k ; -r coef 0:設(shè)置核函數(shù)中的coef 0,默認(rèn)值為0; -c cost:設(shè)置C- SVC、e - SVR、n - SVR中從懲罰系數(shù)C,默認(rèn)值為1; -n n :設(shè)置n - SVC、one-class-SVM 與n - SVR 中參數(shù)n ,默認(rèn)值0.5; -p e :設(shè)置n - SVR的損失函數(shù)中的e ,默認(rèn)值為0.1; -m cachesize:設(shè)置cache內(nèi)存大小,以MB為單位,默認(rèn)值為40; -e e :設(shè)置終止準(zhǔn)則中的可容忍偏差,默認(rèn)值為0.001; -h shrinking:是否使用啟發(fā)式,可選值為0 或1,默認(rèn)值為1; -b 概率估計(jì):是否計(jì)算SVC或SVR的概率估計(jì),可選值0 或1,默認(rèn)0; -wi weight:對(duì)各類(lèi)樣本的懲罰系數(shù)C加權(quán),默認(rèn)值為1; -v n:n折交叉驗(yàn)證模式。
其中-g選項(xiàng)中的k是指輸入數(shù)據(jù)中的屬性數(shù)。操作參數(shù) -v 隨機(jī)地將數(shù)據(jù)剖分為n 部分并計(jì)算交叉檢驗(yàn)準(zhǔn)確度和均方根誤差。以上這些參數(shù)設(shè)置可以按照SVM 的類(lèi)型和核函數(shù)所支持的參數(shù)進(jìn)行任意組合,如果設(shè)置的參數(shù)在函數(shù)或SVM 類(lèi)型中沒(méi)有也不會(huì)產(chǎn)生影響,程序不會(huì)接受該參數(shù);如果應(yīng)有的參數(shù)設(shè)置不正確,參數(shù)將采用默認(rèn)值。training_set_file是要進(jìn)行訓(xùn)練的數(shù)據(jù) 集;model_file是訓(xùn)練結(jié)束后產(chǎn)生的模型文件,該參數(shù)如果不設(shè)置將采用默認(rèn)的文件名,也可以設(shè)置成自己慣用的文件名。
本實(shí)驗(yàn)中的參數(shù)-s取3,-t取2(默認(rèn))還需確定的參數(shù)是-c,-g,-p
另, 實(shí)驗(yàn)中所需調(diào)整的重要參數(shù)是-c 和 –g,-c和-g的調(diào)整除了自己根據(jù)經(jīng)驗(yàn)試之外,還可以使用gridregression.py對(duì)這兩個(gè)參數(shù)進(jìn)行優(yōu)化。(需要補(bǔ)充)
該優(yōu)化過(guò)程需要用到Python(2.5),Gnuplot(4.2),gridregression.py(該文件需要修改路徑)。
然后在命令行下面運(yùn)行:
python.exe gridregression.py -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -s 3 –t 2 -v 5 -svmtrain E:libsvmlibsvm-2.86windowssvm-train.exe -gnuplot E:libsvmlibsvm-2.86gnuplotbinpgnuplot.exe E:libsvmlibsvm-2.86windowstrain.txt > gridregression_feature.parameter
以上三個(gè)路徑根據(jù)實(shí)際安裝情況進(jìn)行修改。
-log2c是給出參數(shù)c的范圍和步長(zhǎng) -log2g是給出參數(shù)g的范圍和步長(zhǎng) -log2p是給出參數(shù)p的范圍和步長(zhǎng)上面三個(gè)參數(shù)可以用默認(rèn)范圍和步長(zhǎng) -s選擇SVM類(lèi)型,也是只能選3或者4 -t是選擇核函數(shù) -v 10 將訓(xùn)練數(shù)據(jù)分成10份做交叉驗(yàn)證。默認(rèn)為5
為了方便將gridregression.py是存放在python.exe安裝目錄下
trian.txt為訓(xùn)練數(shù)據(jù),參數(shù)存放在gridregression_feature.parameter中,可以自己命名。
搜索結(jié)束后可以在gridregression_feature.parameter中最后一行看到最優(yōu)參數(shù)。
其中,最后一行的第一個(gè)參數(shù)即為-c,第二個(gè)為-g,第三個(gè)為-p,最后一個(gè)參數(shù)為均方誤差。前三個(gè)參數(shù)可以直接用于模型的訓(xùn)練。
然后,根據(jù)搜索得到的參數(shù),重新訓(xùn)練,得到模型。
5.測(cè)試
用法:svmpredict [options] test_file model_file output_file options(操作參數(shù)): -b probability_estimates:是否需要進(jìn)行概率估計(jì)預(yù)測(cè),可選值為0 或者1,默認(rèn)值為0。 model_file 是由svmtrain 產(chǎn)生的模型文件;
test_file 是要進(jìn)行預(yù)測(cè)的數(shù)據(jù)文件;
output_file 是svmpredict 的輸出文件,表示預(yù)測(cè)的結(jié)果值。
輸出結(jié)果包括均方誤差(Mean squared error)和相關(guān)系數(shù)(Squared correlation coefficient)。
用LIBSVM做回歸和預(yù)測(cè)的步驟(請(qǐng)指點(diǎn))
用LIBSVM做回歸和預(yù)測(cè)的步驟(請(qǐng)指點(diǎn))
首先說(shuō)明,我學(xué)習(xí)SVM才幾天,對(duì)基本理論還不了解,只是想利用這一工具做自己想做的事情。摸索著做了幾個(gè)實(shí)驗(yàn),試著把過(guò)程寫(xiě)下來(lái),請(qǐng)大家指點(diǎn)。
<1> 下載Libsvm、Python和Gnuplot。我用的版本分別是:Libsvm(2.8.1),Python(2.4),Gnuplot(3.7.3)。注意:Gnuplot一定要用3.7.3版,3.7.1版的有bug.
<2> 修改訓(xùn)練和測(cè)試數(shù)據(jù)的格式(可以自己用perl編個(gè)小程序):
目標(biāo)值 第一維特征編號(hào):第一維特征值 第二維特征編號(hào):第二維特征值 …
…
例如:
2.3 1:5.6 2:3.2
表示訓(xùn)練用的特征有兩維,第一維是5.6,第二維是3.2,目標(biāo)值是2.3
注意:訓(xùn)練和測(cè)試數(shù)據(jù)的格式必須相同,都如上所示。測(cè)試數(shù)據(jù)中的目標(biāo)值是為了計(jì)算誤差用
<3> 分別使用Libsvm中的Windows版本的工具svmscale.exe進(jìn)行訓(xùn)練和測(cè)試數(shù)據(jù)的歸一化,svmtrain.exe進(jìn)行模型訓(xùn)練,svmpredict.exe進(jìn)行預(yù)測(cè)
(1)svmscale.exe的用法:svmscale.exe feature.txt feature.scaled
默認(rèn)的歸一化范圍是[-1,1],可以用參數(shù)-l和-u分別調(diào)整上界和下屆,feature.txt是輸入特征文件名
輸出的歸一化特征名為feature.scaled
(2)svmtrtrain.exe訓(xùn)練模型
我習(xí)慣寫(xiě)個(gè)批處理小程序,處理起來(lái)比較方便。例如svm_train.bat中訓(xùn)練語(yǔ)句為:
svmtrain.exe -s 3 -p 0.0001 -t 2 -g 32 -c 0.53125 -n 0.99 feature.scaled
訓(xùn)練得到的模型為feature.scaled.model
具體的參數(shù)含義可以參考幫助文檔。這里-s是選擇SVM的類(lèi)型。對(duì)于回歸來(lái)說(shuō),只能選3或者 4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是選擇核函數(shù),通常選用RBF核函數(shù),原因在“A Practical Guide support vector classification”中已經(jīng)簡(jiǎn)單介紹過(guò)了。-p盡量選個(gè)比較小的數(shù)字。需要仔細(xì)調(diào)整的重要參數(shù)是-c和-g。除非用 gridregression.py來(lái)搜索最優(yōu)參數(shù),否則只能自己慢慢試了。
用gridregression.py搜索最優(yōu)參數(shù)的方法如下:
python.exe gridregression.py -svmtrain H:SVMlibsvm-2.81windowssvmtrain.exe -gnuplot C:gp373w32pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 H:SVMlibsvm-2.81windowsfeature.scaled > gridregression_feature.parameter
注意:-svmtrain是給出svmtrain.exe所在路徑,一定要是完整的全路徑
-gnuplot是給出pgnuplot.exe所在路徑。這里要用pgnuplot.exe這種命令行形式的,不要用wgnupl32.exe,這個(gè)是圖形界面的。
-log2c是給出參數(shù)c的范圍和步長(zhǎng)
-log2g是給出參數(shù)g的范圍和步長(zhǎng)
-log2p是給出參數(shù)p的范圍和步長(zhǎng)
上面三個(gè)參數(shù)可以用默認(rèn)范圍和步長(zhǎng)
-s選擇SVM類(lèi)型,也是只能選3或者4
-t是選擇核函數(shù)
-v 10 將訓(xùn)練數(shù)據(jù)分成10份做交叉驗(yàn)證。默認(rèn)為5
最后給出歸一化后訓(xùn)練數(shù)據(jù)的全路徑
搜索最優(yōu)參數(shù)的過(guò)程寫(xiě)入文件gridregression_feature.parameter(注意別少了這個(gè)>符號(hào)啊)
根據(jù)搜索到的最優(yōu)參數(shù)修改feature.scaled.model中的參數(shù)
(3)用svmpredict.exe進(jìn)行預(yù)測(cè)
svmpredict.exe feature_test.scaled feature.scaled.model feature_test.predicted
其中feature_test.scaled是歸一化后的測(cè)試特征文件名,feature.scaled.model是訓(xùn)練好的模型,SVM預(yù)測(cè)的值在feature_test.predicted中
核函數(shù)方法簡(jiǎn)介
(1)核函數(shù)發(fā)展歷史
早在1964年Aizermann等在勢(shì)函數(shù)方法的研究中就將該技術(shù)引入到機(jī)器學(xué)習(xí)領(lǐng)域,但是直到1992年Vapnik等利用該技術(shù)成功地將線性 SVMs推廣到非線性SVMs時(shí)其潛力才得以充分挖掘。而核函數(shù)的理論則更為古老,Mercer定理可以追溯到1909年,再生核希爾伯特空間 (ReproducingKernel Hilbert Space, RKHS)研究是在20世紀(jì)40年代開(kāi)始的。
(2)核函數(shù)方法原理
根據(jù)模式識(shí)別理論,低維空間線性不可分的模式通過(guò)非線性映射到高維特征空間則可能實(shí)現(xiàn)線性可分,但是如果直接采用這種技術(shù)在高維空間進(jìn)行分類(lèi)或回歸,則存 在確定非線性映射函數(shù)的形式和參數(shù)、特征空間維數(shù)等問(wèn)題,而最大的障礙則是在高維特征空間運(yùn)算時(shí)存在的“維數(shù)災(zāi)難”。采用核函數(shù)技術(shù)可以有效地解決這樣問(wèn) 題。
設(shè)x,z∈X,X屬于R(n)空間,非線性函數(shù)Φ實(shí)現(xiàn)輸入間X到特征空間F的映射,其中F屬于R(m),n<<m。根據(jù)核函數(shù)技術(shù)有:
K(x,z) =<Φ(x),Φ(z) > (1)
其中:<, >為內(nèi)積,K(x,z)為核函數(shù)。從式(1)可以看出,核函數(shù)將m維高維空間的內(nèi)積運(yùn)算轉(zhuǎn)化為n維低維輸入空間的核函數(shù)計(jì)算,從而巧妙地解決了在高 維特征空間中計(jì)算的“維數(shù)災(zāi)難”等問(wèn)題,從而為在高維特征空間解決復(fù)雜的分類(lèi)或回歸問(wèn)題奠定了理論基礎(chǔ)。
(3)核函數(shù)特點(diǎn)
核函數(shù)方法的廣泛應(yīng)用,與其特點(diǎn)是分不開(kāi)的:
1)核函數(shù)的引入避免了“維數(shù)災(zāi)難”,大大減小了計(jì)算量。而輸入空間的維數(shù)n對(duì)核函數(shù)矩陣無(wú)影響,因此,核函數(shù)方法可以有效處理高維輸入。
2)無(wú)需知道非線性變換函數(shù)Φ的形式和參數(shù).
3)核函數(shù)的形式和參數(shù)的變化會(huì)隱式地改變從輸入空間到特征空間的映射,進(jìn)而對(duì)特征空間的性質(zhì)產(chǎn)生影響,最終改變各種核函數(shù)方法的性能。
4)核函數(shù)方法可以和不同的算法相結(jié)合,形成多種不同的基于核函數(shù)技術(shù)的方法,且這兩部分的設(shè)計(jì)可以單獨(dú)進(jìn)行,并可以為不同的應(yīng)用選擇不同的核函數(shù)和算法。
(4)常見(jiàn)核函數(shù)
核函數(shù)的確定并不困難,滿足Mercer定理的函數(shù)都可以作為核函數(shù)。常用的核函數(shù)可分為兩類(lèi),即內(nèi)積核函數(shù)和平移不變核函數(shù),如:
1)高斯核函數(shù)K(x,xi) =exp(-||x-xi||2/2σ2;
2)多項(xiàng)式核函數(shù)K(x,xi)=(x·xi+1)^d, d=1,2,…,N;
3)感知器核函數(shù)K(x,xi) =tanh(βxi+b);
4)樣條核函數(shù)K(x,xi) = B2n+1(x-xi)。
(5)核函數(shù)方法實(shí)施步驟
核函數(shù)方法是一種模塊化(Modularity)方法,它可分為核函數(shù)設(shè)計(jì)和算法設(shè)計(jì)兩個(gè)部分,具體為:
1)收集和整理樣本,并進(jìn)行標(biāo)準(zhǔn)化;
2)選擇或構(gòu)造核函數(shù);
3)用核函數(shù)將樣本變換成為核函數(shù)矩陣,這一步相當(dāng)于將輸入數(shù)據(jù)通過(guò)非線性函數(shù)映射到高維
特征空間;
4)在特征空間對(duì)核函數(shù)矩陣實(shí)施各種線性算法;
5)得到輸入空間中的非線性模型。
顯然,將樣本數(shù)據(jù)核化成核函數(shù)矩陣是核函數(shù)方法中的關(guān)鍵。注意到核函數(shù)矩陣是l×l的對(duì)稱(chēng)矩陣,其中l(wèi)為樣本數(shù)。
(6)核函數(shù)在模式識(shí)別中的應(yīng)用
1)新方法。主要用在基于結(jié)構(gòu)風(fēng)險(xiǎn)最小化(Structural Risk Minimization,SRM)的SVM中。
2)傳統(tǒng)方法改造。如核主元分析(kernel PCA)、核主元回歸(kernel PCR)、核部分最小二乘法(kernel PLS)、核Fisher判別分析(Kernel Fisher Discriminator, KFD)、核獨(dú)立主元分析(Kernel Independent Component Analysis,KICA)等,這些方法在模式識(shí)別等不同領(lǐng)域的應(yīng)用中都表現(xiàn)了很好的性能。
您的評(píng)論需要經(jīng)過(guò)審核才能顯示
有用
有用
有用