格式:
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...