1. 程式人生 > >使用libsvm中的svm_cross_validation函式進行交叉驗證

使用libsvm中的svm_cross_validation函式進行交叉驗證

在libsvm的使用中,為了得到更好的c、gama引數,可以通過多次使用libsvm中的svm_cross_validation函式進行引數尋優,下面是svm_cross_validation的一種使用方法:

svm_problem的定義:

struct svm_problem
{
int l;
double *y;
struct svm_node **x;
};

1.首先明白svm_cross_validation函式的輸入與輸出,

輸入:prob,param,nr_fold。

   prob是將所有樣本的特徵和類別按照libsvm要求的格式轉換成 svm_problem結構體陣列, prob的長度要求能夠被nr_fold整除

   param是分類器訓練引數

   nr_fold是交叉驗證的折數

輸出:target

   target是一個double型別的陣列,長度為prob.l,儲存的是對prob中各個樣本的識別結果,將target與儲存類別的陣列prob.y進行比較可以得到此次交叉驗證的識別準確率。

函式大概執行步驟:

如果做5折交叉驗證,svm_cross_validation函式會建立一個索引陣列perm,然後把陣列perm當作索引訪問prob達到打亂prob的效果,再將prob分成5份,4份用於訓練,剩下一份測試,target儲存測試結果,這樣分5次後,target就儲存了對prob中所有元素的測試結果,並且儲存順序和prob中樣本的排列是一樣的。將target與prob.y依次對比就得到此次交叉驗證的識別準確率。