日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

libsvm的安装和使用(1)

發(fā)布時(shí)間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 libsvm的安装和使用(1) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

LIBSVM在64位電腦系統(tǒng)下,不用進(jìn)行編譯(mex –setup等)即可使用。只需要進(jìn)入mex文件所在的文件夾即可調(diào)用相應(yīng)的方法。

本文所使用的是libsvm-3.17,在我的資源分享頁(yè)面中可以下載。

1.安裝

(1)將下載下來(lái)的libsvm放在MATLAB安裝的toolbox文件夾下。如下圖所示:


(2)在MATLAB的地址欄中找到mex64文件所在的位置一般是放在Windows文件夾中,如下圖所示:


(3)測(cè)試:將heart_scale文件放在Windows文件夾下;

? ? ? ? ? ?命令窗口輸入:[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale'); ?%這里的 ? ? ? ? ? ? ? ? ? ? ? ? ??libsvmread()對(duì)應(yīng)libsvmread.mex64文件

? ? ? ? ? ? ? ? ? ? ? ? ?model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');%這 ? ? ? ? ? ? ? ? ? ? ? ? ? ?里的svmtrain()對(duì)應(yīng)svmtrain.mex64文件

? ? ? ? ? ? ? ? ? ? ? ? [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label,hea ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rt_scale_inst, model);%?這里的svmpredict()對(duì)應(yīng)svmpredict.mex64文件

? ? ? ? ? ? 輸出結(jié)果如下圖所示,則表明Libsvm工具可以使用。

? ? ? ? #iter為迭代次數(shù),nu是你選擇的核函數(shù)類型的參數(shù),obj為SVM文件轉(zhuǎn)換為的二次規(guī)劃求解得到的最小值,rho為判決函數(shù)的偏置項(xiàng)b,nSV為標(biāo)準(zhǔn)支持向量個(gè)數(shù)



2.使用

(1) libSVM的數(shù)據(jù)格式

Label 1:value 2:value ….

Label:是類別的標(biāo)識(shí),比如上節(jié)train.model中提到的1 -1,你可以自己隨意定,比如-10,0,15。當(dāng)然,如果是回歸,這是目標(biāo)值,就要實(shí)事求是了。

Value:就是要訓(xùn)練的數(shù)據(jù),從分類的角度來(lái)說(shuō)就是特征值,數(shù)據(jù)之間用空格隔開

注:如果特征值為0,特征冒號(hào)前面的(姑且稱做序號(hào))可以不連續(xù)。如:

-15 1:0.708 3:-0.3333


(2)svmscale的用法

svmscale是用來(lái)對(duì)原始樣本進(jìn)行縮放的,范圍可以自己定,一般是[0,1]或[-1,1]。縮放的目的主要是

1)防止某個(gè)特征過(guò)大或過(guò)小,從而在訓(xùn)練中起的作用不平衡;

2)為了計(jì)算速度。因?yàn)樵诤擞?jì)算中,會(huì)用到內(nèi)積運(yùn)算或exp運(yùn)算,不平衡的數(shù)據(jù)可能造成計(jì)算困難。

用法:svmscale [-l lower] [-u upper]

? ? ? ? ? ? ? ?[-y y_lower y_upper]

? ? ? ? ? ? ? ?[-s save_filename]

? ? ? ? ? ? ? ?[-r restore_filename] filename

其中,[]中都是可選項(xiàng):

?????????-l:設(shè)定數(shù)據(jù)下限;lower:設(shè)定的數(shù)據(jù)下限值,缺省為-1

?????????-u:設(shè)定數(shù)據(jù)上限;upper:設(shè)定的數(shù)據(jù)上限值,缺省為?1

?????????-y:是否對(duì)目標(biāo)值同時(shí)進(jìn)行縮放;y_lower為下限值,y_upper為上限值;

?????????-s save_filename:表示將縮放的規(guī)則保存為文件save_filename;

?????????-r restore_filename:表示將按照已經(jīng)存在的規(guī)則文件restore_filename進(jìn)行縮放;

???????? filename:待縮放的數(shù)據(jù)文件,文件格式按照l(shuí)ibsvm格式。

e.g.默認(rèn)情況下,只需要輸入要縮放的文件名:(已經(jīng)存在的文件為test.txt)

?????????????????????????svmscale test.txt

????這時(shí),test.txt中的數(shù)據(jù)已經(jīng)變成[-1,1]之間的數(shù)據(jù)了。但是,這樣原來(lái)的數(shù)據(jù)就被覆蓋了,

e.g.為了讓規(guī)劃好的數(shù)據(jù)另存為其他的文件,我們用一個(gè)dos的重定向符?>?來(lái)另存為(假設(shè)為out.txt):

??????????????????????? svmscale test.txt > out.txt

???運(yùn)行后,out.txt文件就是規(guī)范后的數(shù)據(jù)。

e.g.我們想設(shè)定數(shù)據(jù)范圍[0,1],并把規(guī)則保存為test.range文件:

???????????????????????? svmscale –l 0 –u 1 –s test.range test.txt > out.txt

這時(shí),目錄下又多了一個(gè)test.range文件,可以用記事本打開,下次就可以用-r test.range來(lái)載入了。


(3)?svmtrain的用法

svntrain對(duì)訓(xùn)練數(shù)據(jù)集的訓(xùn)練,并可以獲得SVM模型。

?用法:?svmtrain [options training_set_file model_file]

其中,options為操作參數(shù),可用的選項(xiàng)即表示的涵義如下所示:

? -s?設(shè)置svm類型:

?????????0 – C-SVC

?????????1 – v-SVC

?????????2 – one-class-SVM

?????????3 –?ε-SVR

?????????4 – n - SVR

? -t?設(shè)置核函數(shù)類型,默認(rèn)值為2

?????????0 --?線性核:u'*v

?????????1 --?多項(xiàng)式核:?(g*u'*v+?coef?0)degree

?????????2 -- RBF?核:exp(-γ*||u-v||2)

?????????3 -- sigmoid?核:tanh(γ*u'*v+?coef?0)

? -d degree:?設(shè)置多項(xiàng)式核中degree的值,默認(rèn)為3

? -gγ:?設(shè)置核函數(shù)中γ的值,默認(rèn)為1/k,k為特征(或者說(shuō)是屬性)數(shù);

??-r coef 0:設(shè)置核函數(shù)中的coef 0,默認(rèn)值為0;

??-c cost:設(shè)置C-SVC、ε-SVR、n - SVR中從懲罰系數(shù)C,默認(rèn)值為1;

??-n v?:設(shè)置v-SVC、one-class-SVM?與n - SVR?中參數(shù)n?,默認(rèn)值0.5;

??-p?ε?:設(shè)置v-SVR的損失函數(shù)中的e?,默認(rèn)值為0.1;

??-m cachesize:設(shè)置cache內(nèi)存大小,以MB為單位,默認(rèn)值為40;

??-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ì)各類樣本的懲罰系數(shù)C加權(quán),默認(rèn)值為1;

??-v n:n折交叉驗(yàn)證模式;

model_file:可選項(xiàng),為要保存的結(jié)果文件,稱為模型文件,以便在預(yù)測(cè)時(shí)使用。

????默認(rèn)情況下,只需要給函數(shù)提供一個(gè)樣本文件名就可以了,但為了能保存結(jié)果,還是要提供一個(gè)結(jié)果文件名,比如:test.mod ? ? el,則命令為: ? ??svmtrain test.txt test.model


(4)svmpredict的用法

svmpredict是根據(jù)訓(xùn)練獲得的模型,對(duì)數(shù)據(jù)集合進(jìn)行預(yù)測(cè)。

[predict_label, accuracy, prob_values] = svmpredict(testLabel, testData, model, ‘-b 1’); % run the SVM model on the test data

a記錄了對(duì)應(yīng)樣本識(shí)別出來(lái)的類別?
b正確率以及模型參數(shù)?
c分類概率?

3.經(jīng)典案例

出現(xiàn)的錯(cuò)誤及其原因總結(jié)

錯(cuò)誤:SVMTRAIN only supports classification into two groups. GROUP contains 21 groups.

原因:沒有導(dǎo)入libsvm工具箱,重復(fù)安裝中的2步驟,運(yùn)行時(shí)要添加到路徑

case1:

%%clean work tic;%記錄運(yùn)行時(shí)間 close all;%關(guān)閉所有figure窗口 clear;%清空變量 clc;%清空命令 format compact;%空格緊湊%生成待回歸的數(shù)據(jù) x = (-1:0.1:1)'; y = -x.^2;%建立回歸模型 model = svmtrain(y,x,'-s 3 -t 2 -c 2.2 -g 2.8 -p 0.01');%利用建立的模型看其在訓(xùn)練集上的回歸效果 [py,mse,prob] = svmpredict(y,x,model,'-b 0'); figure;%建立一個(gè)窗口 plot(x,y,'o');%原始數(shù)據(jù)以o這種形式標(biāo)記 hold on;%保持當(dāng)前圖像不刷新 plot(x,py,'r*');%回歸數(shù)據(jù)以紅色的*標(biāo)記 legend('原始數(shù)據(jù)','回歸數(shù)據(jù)');%設(shè)置圖例線條 grid on;%畫圖的時(shí)候添加網(wǎng)格線%進(jìn)行預(yù)測(cè) testx = [1.1;1.2;1.3]; display('真實(shí)數(shù)據(jù)');%控制臺(tái)輸出 testy = -testx.^2 [ptesty,tmse,prob2] = svmpredict(testy,testx,model,'-b 0'); display('預(yù)測(cè)數(shù)據(jù)'); ptestytoc

運(yùn)行結(jié)果:


原博主是通過(guò)y=-x^2這個(gè)表達(dá)式進(jìn)行訓(xùn)練,在圖像上顯示原始數(shù)據(jù)和回歸數(shù)據(jù)。

case2:








?


總結(jié)

以上是生活随笔為你收集整理的libsvm的安装和使用(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。