Ubuntu下安装Libsvm(解决raise Exception('LIBSVM library not found.'))总结汇总

</pre></div><div style="font-family:Arial; font-size:14px; line-height:23px; widows:auto">最近因为工作原因,需要使用SVM做分类任务,理所当然的想到了LIBSVM。经过一番查询后,我总结了网上的一些资源,梳理了一下入门LIBSVM的步骤,供日后参考。<a target=_blank href="https://www.csie.ntu.edu.tw/~cjlin/libsvm/" target="_blank">LIBSVM官网</a></div><div style="font-family:Arial; font-size:14px; line-height:23px; widows:auto"><span style="color:rgb(255,0,0)">一、安装LIBSVM</span></div><div style="font-family:Arial; font-size:14px; line-height:23px; widows:auto">要使用LIBSVM,第一步就是安装。我的开发环境是Ubuntu 14,所以就查询了一下如何在Linux上安装<span style="font-family:Arial; font-size:14px; line-height:23px">LIBSVM。主要参考了如下几篇文章:</span></div><div style="font-family:Arial; font-size:14px; line-height:23px; widows:auto"><a target=_blank target="_blank" href="http://www.th7.cn/Program/Python/201211/113605.shtml">1、ubuntu 装libsvm 以及 与python对接</a>     </div><div style="font-family:Arial; font-size:14px; line-height:23px; widows:auto">按照该文章的方法安装完成后,在shell环境下和Python IDE(例如PyCharm)中都可以直接import svmutil模块,使用非常方便。因为此方法将svm.py模块和svmutil.py模块复制到了python的路径中去,所以可以直接import svm模块。不必再设置python路径。<span style="color:#cc33cc">但是值得注意的是,该文章介绍的安装方法里有一处笔误。</span>文中提到将<span style="font-family:Arial; font-size:14px; line-height:23px">svm.py文件和svmutil.py文件copy到/usr/lib/python2.7/dist-packages中,将libsvm.so.2放到 /usr/local/lib/python2.7/,这样操作会导致raise Exception('LIBSVM library not found.')异常,原因是<span style="font-family:Arial; font-size:14px; line-height:23px">svmutil.py会到上级目录中查找<span style="font-family:Arial; font-size:14px; line-height:23px">LIBSVM library,而此时<span style="font-family:Arial; font-size:14px; line-height:23px">libsvm.so.2位于<span style="font-family:Arial; font-size:14px; line-height:23px"> /usr/local/lib/python2.7/中,而不是<span style="font-family:Arial; font-size:14px; line-height:23px">/usr/lib/python2.7/中。因此我们可以通过将<span style="font-family:Arial; font-size:14px; line-height:23px">libsvm.so.2复制到<span style="font-family:Arial; font-size:14px; line-height:23px">/usr/lib/python2.7/中来解决这个问题,同理我们也可以保持<span style="font-family:Arial; font-size:14px; line-height:23px">libsvm.so.2不动,</span>将<span style="font-family:Arial; font-size:14px; line-height:23px">svm.py文件和svmutil.py文件复制到<span style="font-family:Arial; font-size:14px; line-height:23px">/usr/local/lib/python2.7/<span style="font-family:Arial; font-size:14px; line-height:23px">dist-packages中来解决这个问题。<span style="color:#cc33cc">总之,只要保证</span><span style="font-family:Arial; font-size:14px; line-height:23px"><span style="color:#cc33cc">libsvm.so.2在<span style="font-family:Arial; font-size:14px; line-height:23px">svm.py文件和svmutil.py文件的父目录一级即可。</span></span></span></span></span></span></span></span></span></span></span></span></span></span></div><div style="font-family:Arial; font-size:14px; line-height:23px; widows:auto">另一种安装方式是如下文章中的第二个方法:</div><div style="font-family:Arial; font-size:14px; line-height:23px; widows:auto"><a target=_blank target="_blank" href="http://my.oschina.net/u/1461744/blog/206982">2、linux下安装libsvm</a>(<a target=_blank target="_blank" href="http://blog.csdn.net/rav009/article/details/12995095">该方法的原始文章</a>)该方法没有将<span style="font-family:Arial; font-size:14px; line-height:23px">svm.py文件和svmutil.py文件复制到python的路径中去,所以直接import svmutil会出错,此时应该在自己的python文件中显式的将libsvm的python路径加入到python路径中去。如下代码所示:</span></div><div style="font-family:Arial; font-size:14px; line-height:23px; widows:auto"><span style="font-family:Arial; font-size:14px; line-height:23px"></span><pre name="code" class="python">import os, sys
# sys.path.append('/home/liuyong/storage/app/libsvm-3.20/python')
from svmutil import *
这样一来,就可以正常import svmutil了。至于该参考文章中提到的,为什么在python shell中 import svmutil时会出现“ImportError: No module named svmutil”,是因为我们并没有将libsvm的svmutil模块添加到python默认的路径中去,所以import机制找不到svmutil模块。
备注:
1)、有人说libsvm只支持32bit的python,我没有验证过。


二、LIBSVM使用入门
1、python Libsvm实例讲解这篇文章比较细致的讲解了LIBSVM中各个常用函数的作用,并且给出了Python3使用LIBSVM的兼容性问题的解决方法。需要注意的是,如果我们希望在svm_predict函数中使用‘-b 1’参数(即让模型该处概率估计),那么我们就需要在训练模型时就指定‘-b 1’参数(即在svm_train函数中指定‘-b 1’参数)。
2、svm-scale的使用。
在实际工程中我们需要将实时的特征向量进行scale,然后使用svm_load_model加载已经训练好的model,进行预测。
此时在程序中已经无法使用svm-scale命令来对特征向量进行缩放。我们需要读取对训练集进行scale时产生的scaling parameters file(即svm-scale命中-s参数指定的文件),自己变成实现待预测向量的scale。scale的计算公式/计算原理如下链接所示,很容易实现。http://zhidao.baidu.com/link?url=S4mKhc4AjWtKvDm9HLFLyHh0YD7fyMAmTM4Gt3vhWGkjIJ-v8bQ-VeR1-y7dT9OxgO7Jr0FZOaByfhqanNTU3_ 
备注:
     libsvm可以进行svm的 分类和回归
     libsvm提供了grid.py(python文件)专门用来帮助 自动选取最佳参数(如何使用呢?)
             testing data 和 training data要一起scale。而svm-scale 最难用的地方就是沒办法指定testing data/training data为同一文档,然后一起scale。
     因此最将所有数据进行scale之后,然后再分为 testing data 和 training data。











  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值