电脑系统:win10系统
Matlab版本:R2017a 64bit
需求:用到SVM做信号的分类处理
下载链接:http://www.csie.ntu.edu.tw/~cjlin/libsvm/
点击zip.file 或者tar.gz 压缩文件下载;
下载到自己matlab安装的路径下的toolbox\matlab
C:\Program Files\MATLAB\R2017a\toolbox\matlab(这为我的路径);
下载完成后记得解压!!
打开matlab,将libsvm-3.23\matlab 添加到路径,比如将:\MATLAB\R2017A\toolbox\matlab\libsvm-3.23 添加到路径。
在命令行窗口输入 mex -setup (注意mex后面有一个空格)
正常情况会出现如下界面(点击选择一种语言,一般点第一个):
但是如果你的电脑没有编译器或SDK的话会报错(没有报错的忽略此处,直接看第5步):
>> mex -setup
错误使用 mex
未找到支持的编译器或 SDK。您可以安装免费提供的 MinGW-w64 C/C++ 编译器;请参阅安装
MinGW-w64 编译器。有关更多选项,请访问
http://www.mathworks.com/support/compilers/R2017a/。
解决方法
1.按照报错里的网址下载安装MinGW-w64 编译器
或者网址: http://tdm-gcc.tdragon.net/download
2.点击安装,一切按照默认安装即可,如果要改变默认安装路径,记好安装的地方,后边设置要用到
3.给tdm-gcc配置环境变量
(1.)单击我的电脑,右键点击属性
(2.)点击高级系统设置
(3)点击环境变量→新建→添加变量名和变量值,变量值为tdm-gcc的安装路径→点击确定→再次点击两个窗口的确定
(4)此时回到matlab中再次运行mex -setup
如果还出现同样的错误,设置使用MATLAB将MW_MINGW64设置为临时环境变量:
输入:
>> setenv('MW_MINGW64_LOC','D:\setup\TDM-GCC')
后边的引号内的为TDM-GCC的安装路径。
这种方法每次启动MATLAB 正确使用MinGW时,都需要运行这个命令。
再次输入 mex -setup即可!
出现正常界面,选择一种你需要的语言,此步完成~~
接着在命令窗口输入make
正常情况出现下面的界面为编译成功:
可能会出现如下错误一:
Error: C:\Program Files\MATLAB\R2017a\toolbox\matlab\libsvm-3.23\matlab\make.m failed (line 13)
gcc: error: \-fexceptions: No such file or directory
解决方法
!!打开/libsvm3.23/matlab目录下的make.m,将其中所的CFLAGS替换为COMPFLAGS
按住快捷(CTRL+F)可进行全文替换,替换后执行make则可以编译成功。
解决方案参考:https://github.com/cjlin1/libsvm/issues/55 (膜拜大佬)
这里要做修改的原因可能是我们选择了C++做编译语言,可能也和是在windows系统上安装的matlab有关。
CFLAGS 表示用于 C 编译器的选项,
CXXFLAGS 表示用于 C++ 编译器的选项。
更新:make后还可能出现一下错误二:
解决方法:关闭Matlab,点击Matlab图标右键以管理员身份运行,然后重复步骤4即可解决。
至此,libsvm-3.23编译安装完成!下面进行测试!
(1)下载测试数据
将工作路径调整到如下之后,可以看到heart_scale,这是libsvm自带的测试数据文件
C:\Program Files\MATLAB\R2017a\toolbox\matlab\libsvm-3.23
这是一个libsvm格式的数据文件,直接用load会报错:
load('heart_scale')
错误使用 load
ASCII 文件 heart_scale 的第 3 行中的列数必须与前面行中的列数相同。
解决方法
可使用libsvmread()函数将其转化为matlab格式。
但是!要注意此时要将工作路径改回
C:\Program Files\MATLAB\R2017a\toolbox\matlab\libsvm-3.23\matlab
否则会报错!括号里要写明heart_scale所在的路径!
[heart_scale_label,heart_scale_inst]=libsvmread('C:\Program Files\MATLAB\R2017a\toolbox\matlab\libsvm-3.23\heart_scale');
报错为: 未定义函数或变量 ‘libsvmread’
解决方法
需要检查一下当前工作路径和libsvmread()函数里的路径是否正确。
当工作区(workspace)出现如下界面,说明数据下载成功:
(2)执行语句
>> [heart_scale_label,heart_scale_inst]=libsvmread('C:\Program Files\MATLAB\R2017a\toolbox\matlab\libsvm-3.23\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);
出现如下结果:
安装成功!测试成功!
撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。
感谢以下分享:
1.http://www.xiaoten.com/libsvm-toolbox-in-the-64-bit-matlab-under-the-installation-instructions.html
2.https://blog.csdn.net/u010970698/article/details/51204432