Windows系統安裝編譯libsvm教程

A.SVM安裝:

1. 在SVM工具包的根目錄下,輸入mex -setup選擇C++編譯器

2.在make文件夾下編譯make.m生成二進制文件,libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64、svmpredict.mexw64。

3. 將svmtrain.mexw64,svmpredict.mexw64修改成libsvmtrain.mexw64和libsvmpredict.mexw64,將修改後的.mexw64文件放在windows文件夾下。

4. 添加路徑,在matlab的路徑設置中添加libsvm工具包的路徑。

B.測試:

[heart_scale_label, heart_scale_inst]  =  libsvmread('heart_scale');

model  =  libsvmtrain(heart_scale_label,heart_scale_inst, '-c 1 -g 0.07');

[predict_label, accuracy, dec_values] =libsvmpredict(heart_scale_label, heart_scale_inst, model);

出現以下結果說明安裝正確:

C.使用

1. 訓練

libsvm函數用於對訓練集的數據進行訓練,得到訓練好的模型。

model=libsvmtrain(training_label_vector,training_instance_matrix,['libsvm_options']);

這個函數有三個參數,其中

  • -training_label_vector:訓練樣本的類標,如果有m個樣本,就是m x 1的矩陣(類型必須爲double)。這裏可以是二分類和多分類,類標是(-1,1)、(1,2,3)或者其他任意用來表示不同的類別的數字,要轉成double類型。
  • -training_instance_matrix:訓練樣本的特徵,如果有m個樣本,每個樣本特徵是n維,則爲m x n的矩陣(類型必須爲double)。
  • -libsvm_options:訓練的參數。

2. 預測

libpredict函數用於對測試集的數據進行測試,還能對未知樣本進行預測。

[predicted_label,accuracy, decision_values/prob_estimates]
= libsvmpredict(testing_label_vector, testing_instance_matrix, model,['libsvm_options']);

這個函數包括四個參數,其中

  • -testing_label_vector:測試樣本的類標,如果有m個樣本,就是m x 1的矩陣(類型必須爲double)。如果類標未知,可以初始化爲任意m x 1的double數組。
  • -testing_instance_matrix:測試樣本的特徵,如果有m個樣本,每個樣本特徵是n維,則爲m x n的矩陣(類型必須爲double)。
  • -model:使用libsvmtrain返回的模型
  • -libsvm_options:預測的參數,與訓練的參數形式一樣。

3. 訓練參數

LIBSVM訓練時可以選擇的參數很多,包括:

  • -s svm類型:SVM設置類型(默認0)
  • 0  C-SVC; 1  v-SVC; 2 一類SVM; 3  e-SVR; 4  v-SVR
  • -t 核函數類型:核函數設置類型(默認2)
        0 – 線性核函數:u’v
        1 – 多項式核函數:(r*u’v + coef0)^degree
        2 – RBF(徑向基)核函數:exp(-r|u-v|^2)
        3 – sigmoid核函數:tanh(r*u’v + coef0)
  • -d degree:核函數中的degree設置(針對多項式核函數)(默認3)
  • -g r(gamma):核函數中的gamma函數設置(針對多項式/rbf/sigmoid核函數)(默認1/k,k爲總類別數)
  • -r coef0:核函數中的coef0設置(針對多項式/sigmoid核函數)((默認0)
  • -c cost:設置C-SVC,e -SVR和v-SVR的參數(損失函數)(默認1)
  • -n nu:設置v-SVC,一類SVM和v- SVR的參數(默認0.5)
  • -p p:設置e -SVR 中損失函數p的值(默認0.1)
  • -m cachesize:設置cache內存大小,以MB爲單位(默認40)
  • -e eps:設置允許的終止判據(默認0.001)
  • -h shrinking:是否使用啓發式,0或1(默認1)
  • -wi weight:設置第幾類的參數C爲weight*C (C-SVC中的C) (默認1)
  • -v n: n-fold交互檢驗模式,n爲fold的個數,必須大於等於2

5. 訓練返回的內容

libsvmtrain函數返回訓練好的SVM分類器模型,可以用來對未知的樣本進行預測。這個模型是一個結構體,包含以下成員:

-Parameters: 一個5 x 1的矩陣,從上到下依次表示:
    -s SVM類型(默認0);
    -t 核函數類型(默認2)
    -d 核函數中的degree設置(針對多項式核函數)(默認3);
    -g 核函數中的r(gamma)函數設置(針對多項式/rbf/sigmoid核函數) (默認類別數目的倒數);
    -r 核函數中的coef0設置(針對多項式/sigmoid核函數)((默認0)

·            -nr_class:表示數據集中有多少類別,比如二分類時這個值即爲2。

·            -totalSV:表示支持向量的總數。

·            -rho: 決策函數wx+b中的常數項的相反數(-b)。

·            -Label:表示數據集中類別的標籤,比如二分類常見的1和-1。

·            -ProbA:使用-b參數時用於概率估計的數值,否則爲空。

·            -ProbB:使用-b參數時用於概率估計的數值,否則爲空。

·            -nSV: 表示每類樣本的支持向量的數目,和Label的類別標籤對應。如Label=[1;-1],nSV=[63; 67],則標籤爲1的樣本有63個支持向量,標籤爲-1的有67個。

·            -sv_coef:表示每個支持向量在決策函數中的係數。

·            -SVs: 表示所有的支持向量,如果特徵是n維的,支持向量一共有m個,則爲m x n的稀疏矩陣。

5. 預測返回的內容

libsvmtrain函數有三個返回值,不需要的值在Matlab可以用~進行代替。

  • -predicted_label:第一個返回值,表示樣本的預測類標號。
  • -accuracy:第二個返回值,一個3 x 1的數組,表示分類的正確率、迴歸的均方根誤差、迴歸的平方相關係數。
  • -decision_values/prob_estimates:第三個返回值,一個矩陣包含決策的值或者概率估計。對於n個預測樣本、k類的問題,如果指定“-b 1”參數,則n x k的矩陣,每一行表示這個樣本分別屬於每一個類別的概率;如果沒有指定“-b 1”參數,則爲n x k*(k-1)/2的矩陣,每一行表示k(k-1)/2個二分類SVM的預測結果。

6. 讀取或保存

libsvmread函數可以讀取以LIBSVM格式存儲的數據文件。

[label_vector,instance_matrix] = libsvmread(‘data.txt’);

這個函數輸入的是文件的名字,輸出爲樣本的類標和對應的特徵。

libsvmwrite函數可以把Matlab的矩陣存儲稱爲LIBSVM格式的文件。

libsvmwrite(‘data.txt’, label_vector,instance_matrix]

這個函數有三個輸入,分別爲保存的文件名、樣本的類標和對應的特徵(必須爲double類型的稀疏矩陣)。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章