LibSVM在MATLAB中使用时的几个问题

在 2013-07-28 发布于 大学相关 下以来已有19,418人读过本文 | 3条评论 发表评论

最近在科研中需要用到支持向量机(Support Vector Machines, SVM)来进行分类,而目前比较成熟的用于实现SVM的软件包则首推LibSVM。LibSVM目前的版本已经能直接在MATLAB中使用了,虽然MATLAB已经提供了诸如svmtrain等SVM相关的函数,可是相比LibSVM的易用性以及其强大的功能还是要差了不少。不仅如此,目前有关LibSVM的资料在互联网上也比较丰富,所以最终选择LibSVM在MATLAB环境下实现SVM分类样品会是一个很不错的选择。

LibSVM可以直接从其主页上下载到,我们所需要用到的就是MATLAB版本,不过仍然需要对其进行一个编译。这个过程十分简单,不过需要你已经安装了MATLAB的较新的版本(比如2009以后的版本,因为较旧的MATLAB版本不能识别较新的VS,而只能使用VC++ 6.0),以及Microsoft Visual Studio。

1.编译LibSVM的MATLAB版本

如果你的电脑上已经安装了如MATLAB的较新版本,以及Microsoft Visual Studio,那么你可以直接将下载的LibSVM解压出来并拷贝到MATLAB的工作目录下(这个过程不是必须,但会更为方便接下来的处理)。然后在MATLAB中将LibSVM目录添加到MATLAB的识别路径下(Add path),并将LibSVM下的MATLAB文件夹设置为MATLAB的当前工作目录。

接着在MATLAB命令行窗口中输入mex -setup,回车执行命令选择编译器。需要注意的是mex跟-setup之间有个空格。不要选择MATLAB的默认编译器,而手动选择Microsoft的VS编译器(只需告诉MATLAB其安装路径即可)。

设置好编译器,在MATLAB命令行窗口中输入make,即可开始对LibSVM进行编译了。如果没有什么错误提示,最终编译成功之后,在LibSVM文件夹下的MATLAB文件夹里将有四个以.mexw32结尾的编译完成的可执行文件。

2.加载数据集验证程序

编译完毕之后,我们可以加载数据集以验证程序是否编译成功。但是这里就出现了问题,如果使用以前的很多教程和文章中出现的诸如

load heart_scale

来载入heart_scale数据文件,将会出现如下所示的错误:

??? Error using ==> load
Number of columns on line 2 of ASCII file
…\MATLAB\libsvm\heart_scale
must be the same as previous lines.

有人说好像这是因为heart_scale数据集是一个C++类型的文件,所以使用MATLAB的load载入而不能成功。

所以,现在需要使用LibSVM提供的libsvmread函数来读取数据文件,读取格式如下:

[label_vector, instance_matrix] = libsvmread(‘heart_scale’);

问题是,这样仍然不能成功,而提示如下的错误:

can’t open input file heart_scale

但是我们可以解决这个问题,通过这样的方式:

1.将位于LibSVM文件夹下的heart_scale数据文件拷贝到当前工作目录(MATLAB)中;

2.将LibSVM文件夹设置为当前工作目录;

如此,再执行libsvmread命令,即可将数据文件读取进来进行一些基本的处理了,使用

model = svmtrain(label_vector,instance_matrix);

训练SVM模型;

使用

[predict_label, accuracy, decision_values] = svmpredict(label_vector,instance_matrix,model);

得到模型的预测结果:

Accuracy = 86.6667% (234/270) (classification)

3条评论

  1. 114博客大全
    2013/08/12 18:42:39

    拜访,网站不错!欢迎加入114博客大全

    回复评论

  2. 蔡国庆
    2013/08/03 08:57:08

    学过支持向量机,不过没学好,哈哈。做科研真是累啊!

    回复评论

    anopos 说:

    确实得应对较大压力。

    回复评论

发表评论

您的昵称 *

您的邮箱 *

您的网站