libsvm3.2.1 - SVM多分类简单实现
来源:互联网 发布:南风知我意2书包网 编辑:程序博客网 时间:2024/06/05 07:34
首先,感谢湾湾的林教授提供的libsvm。
1.安装配置到matlab
-------据说直接将libsvm-3.21\windows目录添加到工作路径下即可(点击 set path/设置路径)------
我这里比较曲折,还是选择了编译:
(1)将工具包放到任何地方均可,将工具包目录(libsvm-3.21主目录)添加到Matlab的搜索路径。Set Path->add with subfolders->save
(2)命令行输入: mex -setup
选择C++和vs2010(本机是vs2010)
(3)工作目录进入到libsvm-3.21/matlab,然后命令行输入:make
(4)命令行输入下面代码进行测试:
clear;
[label_vector, instance_matrix] =libsvmread('heart_scale');
model = svmtrain(label_vector, instance_matrix);
[predicted_label, accuracy, prob_estimates] = svmpredict(label_vector, instance_matrix, model, 'b');
[label_vector, instance_matrix] =libsvmread('heart_scale');
model = svmtrain(label_vector, instance_matrix);
[predicted_label, accuracy, prob_estimates] = svmpredict(label_vector, instance_matrix, model, 'b');
(可能会有的5)如果出现Invalid MEX-file 'xxxxxxwindows\libsvmread.mexw64': 找不到指定的模块。
就把matlab下的mex文件复制到windows下全部替换即可。
然后会得到正确的测试结果(是对根目录下的heart_scale进行的分析):
*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
Accuracy = 86.6667% (234/270) (classification)
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
Accuracy = 86.6667% (234/270) (classification)
2.一个简单的多分类举例
clear;
%特征矩阵P
P=[ 1.2587 3.0761 5.7015 6.1477 15.1897 7.7739 14.2143;
1.2571 3.0689 5.6749 6.1243 12.1949 7.7471 14.1543;
1.2500 3.0573 5.5977 6.0389 12.1936 7.6527 13.9888;
1.2614 3.0766 5.7234 6.2063 12.4628 7.8395 14.2903;
1.2286 2.9109 6.9023 6.9904 14.1145 8.4769 16.7414;
1.2302 2.9137 7.0011 7.0589 14.3808 8.5464 16.9477;
1.2196 2.8861 6.8574 6.9408 17.1837 8.4172 16.7242;
1.2330 2.9174 7.1085 7.0621 19.4943 8.5501 17.7029;
1.4921 3.7987 7.7451 9.6659 21.4369 11.9287 19.6565;
1.4874 3.7724 7.7934 9.6719 18.4340 11.9552 19.6265;
1.4897 3.7882 7.7478 9.7091 18.7744 12.0021 19.5958;
1.4985 3.8281 7.8391 9.7699 20.2503 11.9822 20.0870];
%因变量向量T,可以看到有3种不同的结果-1 0 1
T=[-1;-1;-1;-1;0;0;0;0;1;1;1;1];
model=svmtrain(T,P,'-c 1 -g 2');
%
测试特征集
P_test=[1.2623 3.0930 5.7050 6.1484 12.0869 7.7779 14.1668;
1.2368 2.9332 6.9929 7.1641 18.2425 8.6719 16.9154;
1.4915 3.7762 7.8288 9.6141 18.6441 11.8890 19.4717];
%测试结果集
T_test = [-1;0;1];
[predict_label, accuracy, dec_values] = svmpredict(T_test, P_test, model);
就会得到输出:
.*
optimization finished, #iter = 14
nu = 0.622717
obj = -2.593508, rho = 0.204546
nSV = 7, nBSV = 1
.*
optimization finished, #iter = 15
nu = 0.617369
obj = -2.562849, rho = 0.186915
nSV = 7, nBSV = 1
.*
optimization finished, #iter = 14
nu = 0.771043
obj = -3.083852, rho = -0.015390
nSV = 8, nBSV = 0
Total nSV = 11
Accuracy = 100% (3/3) (classification)
一个重要的PS: 当测试集没有预定结果的时候,也就是说,我们只是想用模型对一堆特征集分类而不是验证模型准确度时,将T置为任意值(但长度需要对应上特征集的大小)即可。
这时打印predict_label就会显示分类器输出的分类结果。
0 0
- libsvm3.2.1 - SVM多分类简单实现
- SVM的多类分类的实现
- SVM实现邮件分类
- eclipse + libsvm-3.12 用SVM实现简单线性分类
- eclipse + libsvm-3.12 用SVM实现简单线性分类
- 基于opencv的hog+svm简单分类实现
- 用MatLab实现SVM分类
- 利用sklearn 实现SVM分类
- SVM代码实现非线性分类
- Matlab实现svm的分类
- OpenCV实现SVM分类器
- SVM的多分类
- svm用于多分类
- svm 多分类机制
- SVM多分类
- SVM多分类器
- SVM多分类思路
- SVM分类,一对多;
- 1001 A+B Format
- 文章标题
- java NIO的一些个人总结
- Java垃圾回收机制(GC)详解
- 实现标准equals的流程
- libsvm3.2.1 - SVM多分类简单实现
- A prompt box with an arrow
- 二叉排序树
- 关于linux内核的数据结构——list_head
- vue各种示例展示
- Spring中的@ControllerAdvice注解的使用
- 子窗口放在父窗口上(备忘录-1)
- eclipse+keil组合配置方案教程,可替代sourceinsight+keil
- First day of my blog