使用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依次对比就得到此次交叉验证的识别准确率。
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值