在MATLAB平台下用libsvm分类
来源:互联网 发布:装饰工程预算软件 编辑:程序博客网 时间:2024/06/17 13:24
前段时间一直在弄LIBSVM的C++版,今天想在MATLAB平台上做个测试(这里做的svm与matlab里面自带的svm工具箱不一样)。
所用工具版本:林智仁老师目前的最新版本libsvm-3.17 http://www.csie.ntu.edu.tw/~cjlin/libsvm/
MATLAB 2010b
Visual Studio 2010
1安装libsvm-mat
1.1添加libsvm-mat工具箱
File - set path - Add with subfolders - libsvm-mat工具箱所在文件夹
subfolders是可以加入当前文件夹以及里面的子文件夹,而folder不行。
1.2选择编译器
libsvm最初版本是C++编写,在MATLAB平台使用需要用编译器编译,生成.mexw32文件。键入mex -setup命令选择使用哪种编译器,注意”mex“与”-“之间有空格。
mex -setup
出现是否选择已经安装的编译器,键入y得到一系列本机已经安装的编译器,我选择2(VS2010),之后就是确认编译器路径是否正确,最后看到Done就OK啦,忽略Warning的。
\
啊,这里之前我的MATLAB是2009a,不能用VS2010编译。看到网上有人说在是否选择已安装的编译器这里键入n,然后可以看到适合2009的编译器再来选择。结果我好像木有,就悲催的升级MATLAB啦。
下面就可以编译了
make这时就可以看到.c文件生成了相应的.mexw32文件。
2加载数据
如果数据格式是matlab对应的那种:heart_scale.mat { data.mat (double) & label.mat(double) }
就是说数据和标签分开存储的,而且标签是double类型,那就可以直接(但是libsvm-3.17 里面木有这种数据)
load heart_scale如果是C++版的格式:heart_scale.txt {1:34 2:22... }
这就需要用matlab自带函数转换了
[label_vector,instance_matrix] = libsvmread('heart_scale');
完成该步骤之后在Workspace发现heart_scale_inst和heart_scale_label就说明成功转换了。
我所用的数据格式与matlab版的很相似,但是 label.mat是string类型,这纠结了我一个上午,还是matlab太不熟了。
解决方法:
a) 先编写一个简单的替换函数,用数字替换字符串标签
但由于我的字符串数据中包含有单引号,解决方法
>> str = '''string'''
str =
'string'
PS: 如果你想要双引号,比如 str = "string"
此时就直接输入双引号就行了.
如下:
>> str = ' "string" '
str =
"string"
b )cell2mat()
function [ans] = label_double( label_str )% convert the label from string to double for i=1:size(label_str,1) if strcmp(label_str(i),'''Climb''') label_str(i) = {0.0}; elseif strcmp(label_str(i),'''Walk''') label_str(i) = {1.0}; elseif strcmp(label_str(i),'''Stop''') label_str(i) = {2.0}; elseif strcmp(label_str(i),'''Run''') label_str(i) = {3.0}; elseif strcmp(label_str(i),'''Sit''') label_str(i) = {4.0}; elseif strcmp(label_str(i),'''Stand''') label_str(i) = {5.0}; endendans = cell2mat(label_str);end
3一个例子
label_trainD = label_double(label_train)label_testD = label_double(label_test)model = svmtrain(label_dataD,data_train,'-s 0 -t 0')[predicted_label] = svmpredict(label_testD,data_test,model)结果
Accuracy = 97.5926% (527/540) (classification)恩,精度很高,速度也不错!
参考资料:
http://blog.csdn.net/abcjennifer/article/details/7370177
http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.html
林智仁老师MATLAB工具箱里面的README
以后坚持写blog!O(∩_∩)O哈哈~
- 在MATLAB平台下用libsvm分类
- libsvm-mat在MATLAB平台下的安装
- libsvm-mat在MATLAB平台下的安装
- [教程] libsvm-mat在MATLAB平台下的安装 (转自MATLABSKY)
- LIBSVM学习(一)在Matlab环境下安装LIBSVM
- Libsvm在matlab环境下使用指南
- Libsvm在matlab下的安装
- LIBSVM在MATLAB下的使用
- Matlab在Mac下使用libsvm配置
- 在matlab下测试libsvm工具箱
- LIBSVM在matlab下的使用安装
- 在matlab环境下LIBSVM的demo
- libSVM在matlab下的使用安装
- LIBSVM在matlab下的使用安装
- LIBSVM在matlab下的使用安装
- LIBSVM在Matlab下的使用
- LIBSVM在Matlab下的使用
- LIBSVM在Matlab下的使用说明
- radial-gradient CSS3的蛋疼的径向渐变
- Qt 无标题无边框程序的拖动和改变大小
- iOS 指南针的制作 附带源码
- 没有root权限装vim
- 看老外程序员如何向妻子解释OOD
- 在MATLAB平台下用libsvm分类
- C++伴我成长
- IOS开发入门基本知识——UIButton生成的关灯游戏(tag值的灵活运用)
- s3c6410使用MFC-API进行MPEG-4格式解码及LCD播放代码注释【转】
- java.util.List接口的方法subList()的使用注意事项
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果集 java.lang.OutOfMemoryError: Java heap space
- sharepoint 2010 配置自定义错误页面
- 如何架构一个ios项目 个人经验总结
- Wiki OI 1080 线段树练习