MATLAB 下 libsvm 的使用【填坑记】

文章目录

  • 准备工作
  • 安装过程
    • 1. 解压 libsvm 到 MATLAB
    • 2. 对 libsvm 进行编译
      • 安装 MinGW-w64 C/C++ 编译器
        • 安装 MinGW 并配置环境变量
        • 进入 MATLAB 验证
    • 3. 继续编译 libsvm
    • 4. 验证是否编译成功

准备工作

  • 环境:win 10 + MATALAB 2018b
  • libsvm下载:LIBSVM
  • MinGW-w64 下载:MinGW-w64 C/C++ 编译器

安装过程

1. 解压 libsvm 到 MATLAB

将 libsvm 解压到 MATLAB 的 toolbox 文件夹下,比如:D:\MATLAB\toolbox\libsvm-3.23

2. 对 libsvm 进行编译

由于 libsvm-3.23 包里有 svm 的一些源文件,但没有可执行的exe文件,所以,必须先将这些源文件编译为 MATLAB 可以使用的 dll 等文件。于是进入 MATLAB 对 libsvm 进行编译:

  1. 首先在 MATLAB 中进入 libsvm 的 matlab 目录下:
    MATLAB 下 libsvm 的使用【填坑记】_第1张图片
  2. 在命令行输入 mex -setup 进行编译

正常情况下输出是这样的,说明编译没有问题。

>> mex -setup
MEX 配置为使用 'MinGW64 Compiler (C)' 以进行 C 语言编译。
警告: MATLAB C 和 Fortran API 已更改,现可支持
	 包含 2^32-1 个以上元素的 MATLAB 变量。您需要
	 更新代码以利用新的 API。
	 您可以在以下网址找到更多的相关信息:
	 https://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。

要选择不同的语言,请从以下选项中选择一种命令:
 mex -setup C++ 
 mex -setup FORTRAN

如果提示:

未找到支持的编译器或 SDK。您可以免费安装免费提供的 MinGW-w64 C/C++ 编译器,请参阅安装 MinGW-w64 编译器。

说明缺少 MinGW-w64 C/C++ 编译器,需要另外安装。

安装 MinGW-w64 C/C++ 编译器

下载 MinGW-w64 C/C++ 编译器

安装 MinGW 并配置环境变量

注意:
1. 自己是 64 位系统就看准了安装 64 位
2. 按照默认路径安装
MATLAB 下 libsvm 的使用【填坑记】_第2张图片

  1. 安装完成后,在系统变量里添加环境变量:
名称:MW_MINGW64_LOC
变量值:C:\TDM-GCC-64

进入 MATLAB 验证

在 MATLAB 命令行中输入

setenv('MW_MINGW64_LOC','C:\TDM-GCC-64')

注意:这里的 C:\TDM-GCC-64 就是安装的路径,如果在其他地方也要相应地进行修改。

然后再输入 mex -setup 命令,问题解决。

3. 继续编译 libsvm

mex -setup 没问题以后,输入 make 继续编译,此时如果报错,尝试修改 make.m 文件,将 CXXFLAGS 改成 COMPFLAGS。
在这里插入图片描述
然后 make,出现 MEX 已成功完成。 说明编译成功。

这时左边文件夹会自动 make 出来很多文件,其中后缀为 .mexm64 都是刚 make 出来的。
MATLAB 下 libsvm 的使用【填坑记】_第3张图片
将这 4 个文件拷贝到 ~\toolbox\libsvm-3.23\windows 文件夹下,全部替换原有文件。

4. 验证是否编译成功

输入:svmtrain,如果显示如下说明编译成功。

>> svmtrain
Usage: model = svmtrain(training_label_vector, training_instance_matrix, 'libsvm_options');
libsvm_options:
-s svm_type : set type of SVM (default 0)
   0 -- C-SVC		(multi-class classification)
   1 -- nu-SVC		(multi-class classification)
   2 -- one-class SVM
   3 -- epsilon-SVR	(regression)
   4 -- nu-SVR		(regression)
-t kernel_type : set type of kernel function (default 2)
   0 -- linear: u'*v
   1 -- polynomial: (gamma*u'*v + coef0)^degree
   2 -- radial basis function: exp(-gamma*|u-v|^2)
   3 -- sigmoid: tanh(gamma*u'*v + coef0)
   4 -- precomputed kernel (kernel values in training_instance_matrix)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n: n-fold cross validation mode
-q : quiet mode (no outputs)

输入:
model=svmtrain(heart_scale_label,heart_scale_inst)

[predicted_label, accuracy, decision_values]=svmpredict(heart_scale_label,heart_scale_inst,model)

若显示如下,说明 libsvm 安装成功。

>> model=svmtrain(heart_scale_label,heart_scale_inst);
Total nSV = 0

>> [predicted_label, accuracy, decision_values]=svmpredict(heart_scale_label,heart_scale_inst,model)
label (1st argument) should be a vector (# of column is 1).

predicted_label =

     []


accuracy =

     []


decision_values =

     []

你可能感兴趣的:(工具使用,#,MATLAB)