如何设置LIBSVM Matlab接口?

5
我在把LibSVM引入MATLAB时遇到了问题。我使用的是MATLAB R2009a版本(我也有最新的版本,R2012b,但我没有用那个)。我下载了LibSVM包libsvm-3.14到我的Windows 7电脑,该电脑同时安装了MATLAB和OCTAVE接口。
我解压了我下载的文件夹。下面您可以看到文件夹中拥有的内容的屏幕截图。
我应该把我的libsvm-3.14提取的文件夹放在哪里?我应该将其放置在位于目录下的MATLAB“bin”文件夹中吗?
C:\Program Files\MATLAB\R2009a\bin
我尝试了这样做,但它并没有起作用。如果您能帮我清楚地解决这个问题,我将不胜感激。我刚读了README文件,但很难理解,互联网上也没有其他的说明。
3个回答

8

暂时来说,你可以将那个文件夹放在任何地方。你需要从你提取的libsvm包中的matlab子文件夹中编译Matlab-MEX文件的源代码。

下面,我会将被提取的libsvm-3.14文件夹(例如:C:\ libsvm-3.14)称为ROOT(所以请用C:\ libsvm-3.14替换ROOT)。

然后,在Matlab中打开命令提示符并输入:

cd ROOT
cd matlab
make

现在,在ROOT/matlab文件夹中,你应该已经得到了两个带有 .mexw32 或 .mexw64 扩展名的 MEX 文件。这些是从现在开始要使用的文件。你可以丢弃其余的文件,除了那些文件(以及可能一些其他生成的库)。
根据 Makefile(即 ROOT/matlab/make.m),MEX 文件被称为 svmtrain 和 svmpredic(加上扩展名)。
因此,下一步将是在你的 Matlab/toolbox 文件夹下创建一个名为 libsvm/ 的子文件夹,将这两个 MEX 文件复制到其中,并将该 libsvm/ 文件夹添加到 Matlab 路径中(而不是你系统的路径,而是你的 Matlab 安装路径)。
然后,通过键入:
svmtrain

并且

svmpredict

你应该使用这两个函数的帮助(用法)。

有一件事我不太明白。我下载了libsvm-3.14并将其解压到桌面,然后我将提取的文件夹“libsvm-3-14”更名为ROOT。但是我应该把这个文件复制到哪里呢?是复制到MATLAB目录下的“bin”文件夹吗?(如果听起来很傻,请原谅,我对这些术语很陌生) - ARAT
@MuratArat ROOT是我在帖子中使用的名称,用于指定libsvm-3-14文件夹。您不需要将其复制到任何地方,只需在我的帖子中用实际路径替换ROOT,即指向libsvm-3-14文件夹的绝对路径。我会更新我的答案以澄清这一点。 - user1284631
我需要紧急安装它。请帮助我。如果您愿意,我可以提供更多信息。 - ARAT
不客气。很高兴你成功了。我忽略了你可能没有安装生成MEX文件所需的C/C++编译器这一事实,但我很高兴你正确地识别了它。 - user1284631
1
实际上,我在我的电脑上有编译器,然而MATLAB没有识别除了MATLAB中包含的Lcc以外的这些编译器,尽管这些编译器被MATLAB R2012b支持。因此,我下载了免费提供的Microsoft Visual Studio 2010,并重新安装了所有内容,以防丢失任何文件。我重新启动了计算机并输入了“mex -setup”命令。再次感谢! - ARAT
显示剩余4条评论

4
在@axeoth的帮助下,我为您提供以下解决方案。我按照libsvm软件包中matlab子目录中的说明文件操作,下载并安装了Microsoft Visual Studio 2010,并在MATLAB命令窗口中编写“mex-setup”以选择合适的编译器用于Mex(我使用32位PC中的MATLAB R2012b,因此在这个链接http://www.mathworks.com/support/compilers/R2012b/win64.html中找到支持的编译器)。之后,我按照@axeoth的指示进行操作。我将文件夹更名为ROOT并将其移动到Documents/MATLAB。我启动MATLAB并在命令窗口上依次输入以下内容:

>> cd C:\Users\HUstat\Documents\MATLAB\ROOT\matlab
>> cd matlab
>> make

然后我复制了在ROOT/matlab子文件夹中获得的所有东西。我在MATLAB/toolbox文件夹下创建了一个名为libsvm的新文件夹,并将一切都粘贴到那里。然后,我通过在MATLAB R2012b 上使用“Set Path”按钮将libsvm/文件夹添加到Matlab Path中,之后我就可以写入“svmtrain”和“svmpredict”来获取这两个命令的帮助了。


非常感谢。编译器信息加一。 - MaxSteel

1
对于那些遇到编译器问题的人,我想在安装编译器的主题上留下一些额外的信息。这是一个令人沮丧的问题,我最终联系了MATLAB寻求帮助。我本来想在以上文章中发表评论,但由于我的“声誉”不够,所以我在这里留言:
我无法安装Microsoft Windows SDK 7.1,无论是通过Microsoft Visual Studio 2010还是其他方式。我发现这是因为我安装了某个特定版本的Microsoft Visual(对我来说,版本10.0.04...是问题的原因)。解决方法是卸载Visual,独立安装SDK 7.1,然后重新安装Visual。该过程在下面的链接中有更详细的说明:

http://www.mathworks.com/matlabcentral/answers/95039-why-does-the-sdk-7-1-installation-fail-with-an-installation-failed-message-on-my-windows-system

可能是您已经安装了编译器,但直到MATLAB“找到”它之前它并未被识别。在重新安装后,这种情况也发生在我身上。运行mex.getCompilerConfigurations('Any','Installed')以获取完整列表来检查是否有正确的编译器并“找到”它。然后使用SDK 7.1选择C/C++版本而不是FORTRAN来运行mex-setup。我知道问题已经得到解答,但希望这可以帮助处于同样困境的人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接