将 libsvm 解压到 MATLAB 的 toolbox 文件夹下,比如:D:\MATLAB\toolbox\libsvm-3.23
由于 libsvm-3.23
包里有 svm 的一些源文件,但没有可执行的exe文件,所以,必须先将这些源文件编译为 MATLAB 可以使用的 dll 等文件。于是进入 MATLAB 对 libsvm 进行编译:
正常情况下输出是这样的,说明编译没有问题。
>> 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++ 编译器
注意:
1. 自己是 64 位系统就看准了安装 64 位的
2. 按照默认路径安装
系统变量
里添加环境变量:名称:MW_MINGW64_LOC
变量值:C:\TDM-GCC-64
在 MATLAB 命令行中输入
setenv('MW_MINGW64_LOC','C:\TDM-GCC-64')
注意:这里的 C:\TDM-GCC-64 就是安装的路径,如果在其他地方也要相应地进行修改。
然后再输入 mex -setup
命令,问题解决。
在 mex -setup
没问题以后,输入 make
继续编译,此时如果报错,尝试修改 make.m 文件,将 CXXFLAGS 改成 COMPFLAGS。
然后 make,出现 MEX 已成功完成。
说明编译成功。
这时左边文件夹会自动 make 出来很多文件,其中后缀为 .mexm64 都是刚 make 出来的。
将这 4 个文件拷贝到 ~\toolbox\libsvm-3.23\windows
文件夹下,全部替换原有文件。
输入: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 =
[]