Matlab版本libsvm+svdd配置

Matlab版本libsvm+svdd配置

需要用到svdd,但不想手动造轮子。
通过调研发现,libsvm提供了matlab版本的svdd库。
这里记录一下。

下载包
  • 在libsvm for svdd下载svdd扩展库,目前似乎只有支持libsvm-3.22的版本。
  • 根据提示,下载libsvm-3.22
  • 将下载的libsvm解压放在matlab\install\toolbox目录下
编译
  • 将libsvm-svdd中根目录下的svm.cpp、svm.h、svm-train.c,粘贴覆盖libsvm根目录下的同名文件

  • 将libsvm-svdd\matlab下的文件svmtrain.c覆盖libsvm\matlab中的同名文件

  • 打开matlab添加路径

    • 主页->设置路径->添加文件夹, 选择添加“\matlab\install\toolbox\libsvm\matlab”,保存
  • 编译:

    • matlab工作路径为\matlab\install\toolbox\libsvm\matlab
    • 执行mex -setup,如果有安装c\c++编译器,会出现已有的编译器,如果没有编译器,需要先去安装编译器,这里请看后面的编译器安装部分。
    • 执行make , 编译完成会出现以下内容:
    使用 'MinGW64 Compiler (C)' 编译。
    MEX 已成功完成。
    使用 'MinGW64 Compiler (C)' 编译。
    MEX 已成功完成。
    使用 'MinGW64 Compiler (C++)' 编译。
    MEX 已成功完成。
    使用 'MinGW64 Compiler (C++)' 编译。
    MEX 已成功完成。
    
    • 如果出现Error内容如下:
    使用 'MinGW64 Compiler (C)' 编译。
    Error: XXX\toolbox\libsvm-3.22\matlab\make.m failed (line 13)
    gcc: error: \-fexceptions: No such file or directory
    
    => Please check README for detailed instructions.
    

    打开libsvm3.2.2/matlab目录下的make.m,将其中所的CFLAGS替换为COMPFLAGS 再重新执行make编译即可。

至此,已成功安装libsvm(含svdd)。

重命名(可选)

安装libsvm后,主要提供了四个函数libsvmwrite,libsvmread,svmtrain,svmpredic, 而后两个在matlab中有自带的同名函数,在后续使用中会造成不方便,为了不混淆。将编译后的matlab\install\toolbox\libsvm\matlab\文件夹下生成的svmtrain.mexw64,svmpredic.mexw64(64是因为我用的是64位的libsvm)改名为libsvmtrain.mexw64,libsvmpredic.mexw64。这样之后调用libsvmtrain()libsvmpredict()就会是libsvm的了。

测试
  • 帮助:在命令行下打出libsvmtrain()libsvmpredict() 就会出现相应的函数接口说明
  • 测试
    • libsvm根目录下有一个自带的测试数据heart_scale
    • 将matlab工作路径转到libsvm根目录下,执行下列命令
    [heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
    model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
    [predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);
    
    • 会出现类似这样的结果
    optimization finished, #iter = 134
    nu = 0.433785
    obj = -101.855060, rho = 0.426412
    nSV = 130, nBSV = 107
    Total nSV = 130
    Accuracy = 86.6667% (234/270) (classification)
    
编译器安装

这里是根据matlab的帮助文档中的提示安装MinGW64 Compiler (C++)

  • 下载TDM-GCC
  • 服从提示安装在了C盘根目录下
  • 配置环境变量:
    添加新的系统变量
    • 变量为:MW_MINGW64_LOC,
    • 值为:TDM-GCC-64的安装位置。我这里是’C:\TDM-GCC-64’
  • 在MATLAB命令行内运行命令
    setenv(‘MW_MINGW64_LOC’,folder),folder为TDM-GCC的安装位置,要加单引号。
编译器安装补充

在安装有Matlab2018b,且有多种类型的Mingw编译器存在的电脑上尝试make,一直失败。按照提示
在这里插入图片描述
在matlab的附加功能中安装了Mingw
Matlab版本libsvm+svdd配置_第1张图片
并将电脑中存在的其他的Mingw的环境变量暂时删除。根据提示看应该是多种编译器发生了冲突。
再编译就可以通过了。
Matlab版本libsvm+svdd配置_第2张图片

参考
  • https://blog.csdn.net/github_35807147/article/details/80725642
  • https://blog.csdn.net/xiaopihaierletian/article/details/54317753
  • https://www.cnblogs.com/dupuleng/articles/3683232.html

你可能感兴趣的:(Matlab,机器学习)