浅谈libsvm3.21,matlab编程各个参数作用

来源:互联网 发布:js定时器停止执行函数 编辑:程序博客网 时间:2024/04/28 23:30

最近在研究matlab的libsvm的包,SVM相比神经网络等传统回归、分类算法更吸引人的地方在于加入了置信风险,神经网络算法权重的指导在于经验风险,分经验风险往往不能正真反映实际情况,可能样布分布不均匀,抑或样本量太少。因此掌握SVM的应用可以好好进行对比。


1、首先你需要下载livsvm的工具包,在网上搜索都有,如果没有的话,我上传了一份点击打开链接


2、将MATLAB工作目录进入 libsvm-3.21->进入matlab


3、命令窗输入:mex -setup 随便选一个编译器,我用的是vs2010


4、命令窗输入:make


如果显示编译成功,就成功咯。


好了,我们看看如何调参。

输入下方代码在脚本,记得把libsvm-3.21下的heart_scale数据包复制到matlab文件夹下,否则打不开。

[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');[predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model);

运行应该是以下结果

optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
Accuracy = 86.6667% (234/270) (classification)


86.6667%  不高,我们来调一调参数:

svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
第三个参数做做变化,改为‘-c  11 -g  0.07’

如下:

[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');model = svmtrain(heart_scale_label, heart_scale_inst, '-c 11 -g 0.07');[predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model);


运行结果为:

optimization finished, #iter = 538
nu = 0.308611
obj = -736.884416, rho = 0.952696
nSV = 113, nBSV = 57
Total nSV = 113
Accuracy = 92.5926% (250/270) (classification)

恩,提高了不少

还是不满意


第三个参数接着做变化:

svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07 -t 1');
结果为:

optimization finished, #iter = 434
nu = 0.367386
obj = -855.073089, rho = -0.404518
nSV = 134, nBSV = 67
Total nSV = 134
Accuracy = 92.963% (251/270) (classification)


提高了一点点


再来改:

svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.7 -t 1');
改为- g 0.7


结果:

optimization finished, #iter = 2646
nu = 0.005624
obj = -8.352630, rho = -1.049725
nSV = 108, nBSV = 0
Total nSV = 108
Accuracy = 100% (270/270) (classification)


支持向量少了一点,但是结果不错100%,算满意了

可能有朋友问各个参数什么意思,怎么用,给大家推荐一篇文章,我这里只做补充而已:

点击打开链接

希望有帮助

1 0
原创粉丝点击