在MATLAB平台下用libsvm分类
2013-07-11 22:26
501 查看
前段时间一直在弄LIBSVM的C++版,今天想在MATLAB平台上做个测试(这里做的svm与matlab里面自带的svm工具箱不一样)。
所用工具版本:林智仁老师目前的最新版本libsvm-3.17 http://www.csie.ntu.edu.tw/~cjlin/libsvm/
MATLAB 2010b
Visual
Studio 2010
subfolders是可以加入当前文件夹以及里面的子文件夹,而folder不行。
mex -setup
出现是否选择已经安装的编译器,键入y得到一系列本机已经安装的编译器,我选择2(VS2010),之后就是确认编译器路径是否正确,最后看到Done就OK啦,忽略Warning的。
\
啊,这里之前我的MATLAB是2009a,不能用VS2010编译。看到网上有人说在是否选择已安装的编译器这里键入n,然后可以看到适合2009的编译器再来选择。结果我好像木有,就悲催的升级MATLAB啦。
下面就可以编译了
make
这时就可以看到.c文件生成了相应的.mexw32文件。
就是说数据和标签分开存储的,而且标签是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};
end
end
ans = cell2mat(label_str);
end
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哈哈~
所用工具版本:林智仁老师目前的最新版本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};
end
end
ans = 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哈哈~
相关文章推荐
- windows平台上2014a以上的Matlab安装libsvm
- libsvm 在MATLAB平台下的安装
- matlab二分类实验(使用libsvm工具包+SVMcgForClass函数)
- MATLAB实现多分类问题,使用libsvm,1-vs-rest和1-vs-1两种方法代码
- SVM多分类问题 libsvm在matlab中的应用
- 解密SVM系列(五):matlab下libsvm的简单使用:分类与回归
- SVM多分类问题 libsvm在matlab中的应用
- libsvm-mat在MATLAB平台下的安装
- [教程] libsvm-mat在MATLAB平台下的安装 (转自MATLABSKY)
- libsvm遥感图像的分类(MATLAB中进行)
- SVM实现多分类的程序基础工作(一)——安装libsvm以及libsvm和matlab自带的svm的区别
- Matlab安装支持向量机(LibSVM工具)实现多分类
- libsvm-mat在MATLAB平台下的安装
- SVM实现多分类的程序基础工作(一)——安装libsvm以及libsvm和matlab自带的svm的区别
- MATLAB实现多分类和libsvm工具箱的安装使用详解
- 初学者对K近邻分类算法的理解与matlab平台上的实现
- MATLAB多分类,使用libsvm和linear的详解和区别
- opencv输出特征数据、libsvm进行图像分类输出置信度、matlab输出ROC曲线
- 二分类SVM方法Matlab实现
- arm平台分类和配置