python调用libSVM异常,svm_save_model(modelName,model)。总说第一个参数类型错误?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python调用libSVM异常,svm_save_model(modelName,model)。总说第一个参数类型错误?相关的知识,希望对你有一定的参考价值。

libsvm.svm_save_model(model_file_name, model) ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type 为什么?

参考技术A 可以看看python文件夹下面的README。第一个参数是:保存model的文件名,字符串类型。第二个参数就是svm_train返回的model。
README里面有详细的例子。按照你的错误,
model_file_name是字符串类型吗?检查一下就行吧

如何为 Python 设置 LIBSVM

【中文标题】如何为 Python 设置 LIBSVM【英文标题】:How to Setup LIBSVM for Python 【发布时间】:2013-03-23 05:12:51 【问题描述】:

我在 Mac OS X 上使用 Make 构建了 libsvm。

$ tar xzfv libsvm-3.17.tar.gz
$ cd libsvm-3.17
$ make

这构建了各种 libsvm 二进制文件:

$ ls
COPYRIGHT           heart_scale svm-predict.c   svm-train.c tools
FAQ.html            java        svm-scale   svm.cpp     windows
Makefile            matlab      svm-scale.c svm.def
Makefile.win    python      svm-toy     svm.h
README      svm-predict svm-train   svm.o

我也在/usr/local链接到这个:

$ ls -la /usr/local/
...
svm -> /usr/local/libsvm-3.17/

并将 Python 绑定附加到我的路径:

import sys
sys.path.append('/usr/local/svm/python')

但是 Python 绑定找不到“LIBSVM”库:

$ python test.py 
Traceback (most recent call last):
   File "test.py", line 8, in <module>
      import svmutil
   File "/usr/local/svm/python/svmutil.py", line 5, in <module>
      from svm import *
   File "/usr/local/svm/python/svm.py", line 22, in <module>
      raise Exception('LIBSVM library not found.')
Exception: LIBSVM library not found.

谁能告诉我如何设置?在 libsvm 的 python 自述文件中,唯一的描述是

Installation 
============

On Unix systems, type

> make

The interface needs only LIBSVM shared library, which is generated by
the above command. We assume that the shared library is on the LIBSVM
main directory or in the system path.

我错过了什么?

【问题讨论】:

旁注:与其自己编译程序,不如使用非常好的 MacPorts 管理器之类的包管理器:包维护者已经为您解决了编译问题。 :) 我在 64 位 Unix 环境(64 位 Python 安装)中遇到了同样的问题。就我而言,尝试 Liblinear 的 64 位解决了这个问题。 【参考方案1】:

不要通过 libsvm 来使用 Python 访问它(我通过 MacPorts 安装 libsvm,import svmutil 失败),您可能想要安装流行的 scikit-learn 包,其中包含 libsvm with Python bindings 的优化版本.

使用MacPorts: sudo port install py27-scikit-learn 安装非常简单(使py27 适应您使用的任何Python 版本)。

【讨论】:

完成了,太棒了。谢谢停产。 我在安装 Macports 时遇到了困难。 Scipy Superpack 立即起作用。 fonnesbeck.github.com/ScipySuperpack MacPorts 有什么问题?我问这个问题是因为 MacPorts 是一项很好的投资:它包含 15k+ 包(几乎总是)自动编译。如果我没记错的话,安装过程需要长时间下载(XCode),需要向 Apple 注册、运行 .pkg 安装程序,并可能配置 shell 路径(除非您使用 bash,在这种情况下,这是为您完成的)。完成此操作后,事情通常会非常顺利。 如果我没记错的话,我认为我无法安装 scipy,而 scikit-learn 依赖于它。我尝试从 sourceforge 下载 scipy,但收到一条奇怪的消息:“无法在此磁盘上安装 Scipy。scipy 需要安装 System Python 2.7。”但不知道该怎么做。 所以本身可能不是 macports 错误,但大约半小时后我放弃了安装整个堆栈,然后找到了超级包。【参考方案2】:

似乎是一个旧线程。希望它在未来对其他人有所帮助。

我遇到了同样的问题。解决办法是

    在 libsvm-3.0 目录中运行 make 在 libsvm-3.0/python 目录下运行make

如果您只在 libsvm-3.0 文件夹中执行此操作,您将面临此问题。在两个文件夹中执行此操作。然后它会正常工作。

【讨论】:

【参考方案3】:

如果您需要非 MacPorts 解决方案,请参阅此页面(尤其是来自 Thanassis 的评论):

Installing libsvm-3.0 for Python on OSX 10.6

尽管有帖子的标题,但该解决方案在装有 python 2.7 的 CentOS 机器上对我有用。

【讨论】:

【参考方案4】:

python 中的 find_library 只查看扩展名为 .so 的文件。为了使其正常工作,您需要创建一个 libsvm.so:

% ln -s libsvm.so.2 libsvm.so

然后再试一次,它会正常工作。

【讨论】:

【参考方案5】:

您无需使用 scikit learn 即可使用 libSVM。通过 python 加载 libsvm 模块时,我遇到了同样的问题。我从 github 克隆了项目并使用make 从命令行运行构建它,设置环境后,我得到了同样的错误。

我通过homebrew 安装libSVM 解决了这个问题:

brew install libsvm

这不包括特定于 python 的二进制文件,因此您仍然需要从 github 克隆和制作并设置环境。

【讨论】:

【参考方案6】:

你应该进入/python并make生成.so.1文件

【讨论】:

【参考方案7】:

您也可以尝试使用 homebrew 安装 libsvm,例如“brew install libsvm”,然后您可以打开您的项目文件并将“svmutil.py”和“svm.py”文件复制到项目目录中,然后您可以使用命令'from svmutil import *',也许就可以了。

【讨论】:

以上是关于python调用libSVM异常,svm_save_model(modelName,model)。总说第一个参数类型错误?的主要内容,如果未能解决你的问题,请参考以下文章

python调用Libsvm的几种方法

python调用shell命令之三慷慨法

python调用shell命令之三慷慨法

如何在 python 中使用 libSVM 计算精度、召回率和 F 分数

LibSVM 一类分类 nu 参数不是异常值的一小部分吗?

LibSVM 预测不工作