關於libSVM的一些總結

2021-07-14 09:53:54 字數 2681 閱讀 1183

格式:

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

這個函式有三個引數,其中

libsvmtrain函式返回訓練好的svm分類器模型model是乙個結構體,包含以下成員:

另外,如果在訓練中使用了-v引數進行交叉驗證時,返回的不是乙個模型,而是交叉驗證的分類的正確率或者回歸的均方根誤差。

當構建完成model後,還要為上述引數選擇合適的值,方法主要有gridsearch,其他的感覺不常用,gridsearch說白了就是窮舉。

網格引數尋優函式(分類問題):svmcgforclass

[bestcvaccuracy,bestc,bestg]=svmcgforclass(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)

輸入:

輸出:

網格引數尋優函式(回歸問題):svmcgforregress

[bestcvmse,bestc,bestg]=svmcgforregress(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,msestep)

其輸入輸出與svmcgforclass類似,這裡不再贅述。

svm

怎樣能得到好的結果

1. 對資料做歸一化(****** scaling)

2. 應用rbf kernel

3. 用cross-validation和grid-search

得到最優的c和g

4. 用得到的最優c和g訓練訓練資料

5. 測試

關於

svm的

c以及核函式引數設定

----------------------

c一般可以選擇為:10^t , t=- 4..4就是0.0001

到10000

選擇的越大,表示對錯誤例懲罰程度越大,可能會導致模型過擬合

在libsvm中-t用來指定核函式型別(預設值是2)。

0)線性核函式

(無其他引數)

1)多項式核函式

(重點是階數的選擇,即d,一般選擇1-11:1 3 5 7 9 11,也可以選擇2,4,6…)

2)rbf核函式

(徑向基rbf核心,exp,其中均方差反映了資料波動的大小。

引數通常可選擇下面幾個數的倒數:0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,預設的是類別數的倒數,即1/k,2分類的話就是0.5)

3)sigmoid核函式

又叫做s形核心

兩個引數

g以及r:

g一般可選

1 2 3 4

,r選0.2 0.4 0.60.8 1

4)自定義核函式

與核函式相對應的libsvm引數:

1)對於線性核函式,沒有專門需要設定的引數

2)對於多項式核函式,有三個引數。-d用來設定多項式核函式的最高此項次數,也就是公式中的d,預設值是3。-g用來設定核函式中的gamma引數設定,也就是公式中的第乙個r(gamma),預設值是1/k(k是類別數)。-r用來設定核函式中的coef0,也就是公式中的第二個r,預設值是0。

3)對於rbf核函式,有乙個引數。-g用來設定核函式中的gamma引數設定,也就是公式中的第乙個r(gamma),預設值是1/k(k是類別數)。

4)對於sigmoid核函式,有兩個引數。-g用來設定核函式中的gamma引數設定,也就是公式中的第乙個r(gamma),預設值是1/k(k是類別數)。-r用來設定核函式中的coef0,也就是公式中的第二個r,預設值是0。

格式:[predicted_label, accuracy, decision_values/prob_estimates] 

= libsvmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']);

這個函式包括四個引數,其中

libsvmpredict函式有三個返回值,不需要的值在matlab可以用 ~ 進行代替。

libsvm訓練時可以選擇的引數很多,包括:

以上這些引數設定可以按照svm的型別和核函式所支援的引數進行任意組合,如果設定的引數在函式或svm型別中沒有也不會產生影響,程式不會接受該引數;如果應有的引數設定不正確,引數將採用預設值。

libsvmread函式可以讀取以libsvm格式儲存的資料檔案。

[label_vector, instance_matrix] = libsvmread(『data.txt』);

這個函式輸入的是檔案的名字,輸出為樣本的類標和對應的特徵。

libsvmwrite函式可以把matlab的矩陣儲存稱為libsvm格式的檔案。

libsvmwrite(『data.txt』, label_vector, instance_matrix]

這個函式有三個輸入,分別為儲存的檔名、樣本的類標和對應的特徵(必須為double型別的稀疏矩陣)。

關於stringstream的一些總結

c 標準庫中的提供了比ansi c的更高階的一些功能,即單純性 型別安全和可擴充套件性。可以使用這些庫來實現安全和自動的型別轉換。如果你已習慣了風格的轉換,也許你首先會問 為什麼要花額外的精力來學習基於的型別轉換呢?也許對下面乙個簡單的例子的回顧能夠說服你。假設你想用sprintf 函式將乙個變數從...

關於JSON的一些總結

一 關於json json是一種類似於xml的通用資料交換格式,具有比xml更高的傳輸效率.從結構上看,所有的資料 data 最終都可以分解成三種型別 第一種型別是標量 scalar 也就是乙個單獨的字串 string 或數字 numbers 比如 北京 這個單獨的詞。第二種型別是序列 sequen...

關於指標的一些總結

指標和陣列一樣,都是基於其它型別的。指標的宣告 int p updates 運算子兩邊的空格是可選的。對每個指標變數命名,都需要乙個 變數名,為取址,它的值為變數的位址 32位 指標變數,為指標儲存的位址所儲存的值。可以通過改變它來改變。malloc 可以分配記憶體,但c 更好的方法是使用new。i...