svm与matlab中的libsvm应用
-
svm原理
有关svm教程以及教材已经很多,资料中介绍的都很详细。略过数学证明,用语言直观简洁地描述:svm就是一个可以控制参数改变分隔平面的一个二元分类器,得到1和-1的分类结果。除了分类,svm在加入了eps误差参数之后可根据点距离分隔平面的远近(?)给出具体的回归函数值(?),这时的support vector machine就变身成为support vector regression,也就是svr。
至于各个参数具体的意义和设置,我也还是一知半解,在以后的应用中慢慢再学习。
-
MATLAB中libsvm包的安装
大致按照http://jingyan.baidu.com/article/46650658048c3ff549e5f8c5.html的教程,只是在"Selelct a compiler"步骤中选择no:
matlab给出的是当前版本的matlab中可以支持的compiler。我选择了VC 2008,
然后将路径定位到软件所在文件夹就可以了。之后再按照上述的教程安装。
-
libsvm工具的使用
1 clear 2 clc 3 riverdata=[8.07 48.8 0.27 0.0191 3.0;2.70 200.0 1.55 0.074 1500.0;2.35 70 0.43 0.10 110; 4 3.84 72 0.76 0.13 260;0.85 47.0 0.32 0.067 14.0;2.10 60.0 0.94 0.104 54.0; 5 2.1 53 0.83 0.107 47;0.4 19 0.16 0.116 9.9;0.85 34 0.15 0.055 9.5; 6 0.76 64.0 0.67 0.27 35;1.56 24 0.71 0.043 9.6;1.1 59 0.88 0.12 42; 7 2.16 69 1.55 0.17 160;0.94 26 0.34 0.067 33;0.91 37 0.4 0.067 39; 8 2.04 104 0.58 0.05 315;4.75 127 0.64 0.08 670;0.49 16.0 0.27 0.08 20; 9 0.85 18 0.6 0.1 21;0.58 25 1.01 0.14 14;2.47 34 0.82 0.18 65; 10 0.43 16 0.37 0.05 14;0.58 36 0.21 0.049 8.1]; 11 riverdata_train=riverdata(1:16,1:4); 12 riverdata_trainlabels=riverdata(1:16,5); 13 riverdata_test=riverdata(17:23,1:4); 14 riverdata_testlabels=riverdata(17:23,5); 15 %优选参数 16 mse = 10^10; 17 for log2c = -10:10, 18 for log2g = -10:10, 19 cmd = ['-v 3 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g) , ' -s 3 -p 0.4 -n 0.1']; 20 cv = svmtrain(riverdata_trainlabels,riverdata_train,cmd); 21 if (cv < mse), 22 mse = cv; bestc = 2^log2c; bestg = 2^log2g; 23 end 24 end 25 end 26 % %输出参数 27 fprintf('(best c=%g, g=%g, mse=%g)\n',bestc, bestg, mse); 28 %构建模型 29 cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.4 -n 0.1']; 30 model = svmtrain(riverdata_trainlabels,riverdata_train,cmd); 31 %模型预测 32 [predict,mse]=svmpredict(riverdata_testlabels,riverdata_test,model); 33 %数据可视化 34 figure;plot(riverdata_testlabels,'b*-') 35 hold on;plot(predict,'k+-'); 36 title('数据可视化'); 37 legend('原始数据','回归数据');
这是从网上某个论坛cp下来的别人的一段代码,其中“优选参数”部分貌似是通用的一段程序(?)
用法很简单,需要的时候参考就好。