使用libsvm中的svm_cross_validation函数进行交叉验证

from:https://blog.csdn.net/tao1107291820/article/details/51581322

在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依次对比就得到此次交叉验证的识别准确率。

demo: https://download.csdn.net/download/liushuai_123/7378795

猜你喜欢

转载自blog.csdn.net/aidem_brown/article/details/81101093