libsvm的安装和使用(1)
LIBSVM在64位電腦系統下,不用進行編譯(mex –setup等)即可使用。只需要進入mex文件所在的文件夾即可調用相應的方法。
本文所使用的是libsvm-3.17,在我的資源分享頁面中可以下載。
1.安裝
(1)將下載下來的libsvm放在MATLAB安裝的toolbox文件夾下。如下圖所示:
(2)在MATLAB的地址欄中找到mex64文件所在的位置一般是放在Windows文件夾中,如下圖所示:
(3)測試:將heart_scale文件放在Windows文件夾下;
? ? ? ? ? ?命令窗口輸入:[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale'); ?%這里的 ? ? ? ? ? ? ? ? ? ? ? ? ??libsvmread()對應libsvmread.mex64文件
? ? ? ? ? ? ? ? ? ? ? ? ?model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');%這 ? ? ? ? ? ? ? ? ? ? ? ? ? ?里的svmtrain()對應svmtrain.mex64文件
? ? ? ? ? ? ? ? ? ? ? ? [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label,hea ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?rt_scale_inst, model);%?這里的svmpredict()對應svmpredict.mex64文件
? ? ? ? ? ? 輸出結果如下圖所示,則表明Libsvm工具可以使用。
? ? ? ? #iter為迭代次數,nu是你選擇的核函數類型的參數,obj為SVM文件轉換為的二次規劃求解得到的最小值,rho為判決函數的偏置項b,nSV為標準支持向量個數
2.使用
(1) libSVM的數據格式
Label 1:value 2:value ….
Label:是類別的標識,比如上節train.model中提到的1 -1,你可以自己隨意定,比如-10,0,15。當然,如果是回歸,這是目標值,就要實事求是了。
Value:就是要訓練的數據,從分類的角度來說就是特征值,數據之間用空格隔開
注:如果特征值為0,特征冒號前面的(姑且稱做序號)可以不連續。如:
-15 1:0.708 3:-0.3333
(2)svmscale的用法
svmscale是用來對原始樣本進行縮放的,范圍可以自己定,一般是[0,1]或[-1,1]。縮放的目的主要是
1)防止某個特征過大或過小,從而在訓練中起的作用不平衡;
2)為了計算速度。因為在核計算中,會用到內積運算或exp運算,不平衡的數據可能造成計算困難。
用法:svmscale [-l lower] [-u upper]
? ? ? ? ? ? ? ?[-y y_lower y_upper]
? ? ? ? ? ? ? ?[-s save_filename]
? ? ? ? ? ? ? ?[-r restore_filename] filename
其中,[]中都是可選項:
?????????-l:設定數據下限;lower:設定的數據下限值,缺省為-1
?????????-u:設定數據上限;upper:設定的數據上限值,缺省為?1
?????????-y:是否對目標值同時進行縮放;y_lower為下限值,y_upper為上限值;
?????????-s save_filename:表示將縮放的規則保存為文件save_filename;
?????????-r restore_filename:表示將按照已經存在的規則文件restore_filename進行縮放;
???????? filename:待縮放的數據文件,文件格式按照libsvm格式。
e.g.默認情況下,只需要輸入要縮放的文件名:(已經存在的文件為test.txt)
?????????????????????????svmscale test.txt
????這時,test.txt中的數據已經變成[-1,1]之間的數據了。但是,這樣原來的數據就被覆蓋了,
e.g.為了讓規劃好的數據另存為其他的文件,我們用一個dos的重定向符?>?來另存為(假設為out.txt):
??????????????????????? svmscale test.txt > out.txt
???運行后,out.txt文件就是規范后的數據。
e.g.我們想設定數據范圍[0,1],并把規則保存為test.range文件:
???????????????????????? svmscale –l 0 –u 1 –s test.range test.txt > out.txt
這時,目錄下又多了一個test.range文件,可以用記事本打開,下次就可以用-r test.range來載入了。
(3)?svmtrain的用法
svntrain對訓練數據集的訓練,并可以獲得SVM模型。
?用法:?svmtrain [options training_set_file model_file]
其中,options為操作參數,可用的選項即表示的涵義如下所示:
? -s?設置svm類型:
?????????0 – C-SVC
?????????1 – v-SVC
?????????2 – one-class-SVM
?????????3 –?ε-SVR
?????????4 – n - SVR
? -t?設置核函數類型,默認值為2
?????????0 --?線性核:u'*v
?????????1 --?多項式核:?(g*u'*v+?coef?0)degree
?????????2 -- RBF?核:exp(-γ*||u-v||2)
?????????3 -- sigmoid?核:tanh(γ*u'*v+?coef?0)
? -d degree:?設置多項式核中degree的值,默認為3
? -gγ:?設置核函數中γ的值,默認為1/k,k為特征(或者說是屬性)數;
??-r coef 0:設置核函數中的coef 0,默認值為0;
??-c cost:設置C-SVC、ε-SVR、n - SVR中從懲罰系數C,默認值為1;
??-n v?:設置v-SVC、one-class-SVM?與n - SVR?中參數n?,默認值0.5;
??-p?ε?:設置v-SVR的損失函數中的e?,默認值為0.1;
??-m cachesize:設置cache內存大小,以MB為單位,默認值為40;
??-e?ε?:設置終止準則中的可容忍偏差,默認值為0.001;
??-h shrinking:是否使用啟發式,可選值為0?或1,默認值為1;
??-b?概率估計:是否計算SVC或SVR的概率估計,可選值0?或1,默認0;
??-wi weight:對各類樣本的懲罰系數C加權,默認值為1;
??-v n:n折交叉驗證模式;
model_file:可選項,為要保存的結果文件,稱為模型文件,以便在預測時使用。
????默認情況下,只需要給函數提供一個樣本文件名就可以了,但為了能保存結果,還是要提供一個結果文件名,比如:test.mod ? ? el,則命令為: ? ??svmtrain test.txt test.model
(4)svmpredict的用法
svmpredict是根據訓練獲得的模型,對數據集合進行預測。
[predict_label, accuracy, prob_values] = svmpredict(testLabel, testData, model, ‘-b 1’); % run the SVM model on the test data
a記錄了對應樣本識別出來的類別?
b正確率以及模型參數?
c分類概率?
3.經典案例
出現的錯誤及其原因總結
錯誤:SVMTRAIN only supports classification into two groups. GROUP contains 21 groups.
原因:沒有導入libsvm工具箱,重復安裝中的2步驟,運行時要添加到路徑。
case1:
%%clean work tic;%記錄運行時間 close all;%關閉所有figure窗口 clear;%清空變量 clc;%清空命令 format compact;%空格緊湊%生成待回歸的數據 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');%利用建立的模型看其在訓練集上的回歸效果 [py,mse,prob] = svmpredict(y,x,model,'-b 0'); figure;%建立一個窗口 plot(x,y,'o');%原始數據以o這種形式標記 hold on;%保持當前圖像不刷新 plot(x,py,'r*');%回歸數據以紅色的*標記 legend('原始數據','回歸數據');%設置圖例線條 grid on;%畫圖的時候添加網格線%進行預測 testx = [1.1;1.2;1.3]; display('真實數據');%控制臺輸出 testy = -testx.^2 [ptesty,tmse,prob2] = svmpredict(testy,testx,model,'-b 0'); display('預測數據'); ptestytoc運行結果:
原博主是通過y=-x^2這個表達式進行訓練,在圖像上顯示原始數據和回歸數據。
case2:
?
總結
以上是生活随笔為你收集整理的libsvm的安装和使用(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基本定时器TIM6和TIM7使用
- 下一篇: PCL【Win10+VS2015+PCL