目录
多核学习工具箱Shogun的手动编写过程
一、写在前面的话
二、正式开始吧
三、可能有用的附录
四、写在最后的话
A.可能的更新1
B.可能的更新2
任务出发点:
因为在近期的学习过程中需要用到特征融合策略,经过研究发现多核学习可以适应不同来源数据的异构分布,可以通过采用不同的核函数或同一核函数不同参数设置的方式进行多核学习,为每种特征学得不同的分类器参数设置,以更好地融合多种特征,提升分类准确率。
有关多核学习的介绍可以参见以下博客的相关内容:
a. 特征提取-特征后期融合-多核学习方法(MKL)---> https://blog.csdn.net/wuhang19911024/article/details/46287639
b. 多核学习方法介绍 ---> https://zhuanlan.zhihu.com/p/41485466
c. 图像分类中的SVM多核学习 ---> https://blog.csdn.net/tiandijun/article/details/50868155
d. SVM多核学习方法简介 ---> https://blog.csdn.net/fendouaini/article/details/81190021?utm_source=blogxgwz1
相关资料显示,常用的多核学习(multiple kernel learning, MKL)工具箱有
SimpleMKL,Shogun,SPG-GMKL,SMO-MKL
SimpleMKL Toobox 的下载地址在此 ---> http://asi.insa-rouen.fr/enseignants/~arakoto/code/mklindex.html
SimpleMKL是基于MATLAB开发的多核工具箱,它还依赖于另一个工具箱
(http://asi.insa-rouen.fr/enseignants/~arakoto/toolbox/index.html),所以需要同时正确安装这两个工具箱才可以使用多核学习的功能。
笔者的MATLAB软件环境为MATLAB 2018b,在正确安装这两个工具箱后,却无法正确运行其示例程序。一个可能的原因是笔者的软件版本太高,可能出现工具箱中的部分函数已经集成为MATLAB的内置函数,因此在运行的时候总是提示“输入数据维度不正确”的错误。
由于该工具箱的最新更新时间为2008年02月,而笔者打算用Python进行后续的特征分类,因此没有再纠结如何在MATLAB环境下使用SimpleMKL。于是笔者转向了另外一个多核学习工具箱,Shogun(英文翻译为“将军”)。
Shogun是一个主打多核学习的的机器学习工具箱,支持多种系统(Ubuntu、Debian、Fedora、MacOS、Windows)和多种编程语言(Python、Octave、R、Java、Ruby、Lua、C-Sharp),其底层框架是由c++编写的。
其功能与scikit-learn比较类似,最主要的一个特点就是支持大尺度的多核学习,官方网址为 ---> http://shogun-toolbox.org/
截至笔者撰稿时间,Shogun的最新版本为Shogun 6.1.3,发布时间为2017年12月。
从笔者下载工具箱源文件开始,到成功地在Python环境下导入shogun工具包和SVMLight类,整个过程花了整整一周的时间,真是一把辛酸泪啊。。。。
看到此处,希望各位看官不要慌,稳住:),笔者花了一周的时间主要有两个原因:一是笔者对于Ubuntu系统的操作比较生疏,之前都没有怎么用过Ubuntu系统,更不要说是从源文件开始对其进行编译、安装;而是笔者对于Python的使用也没有很深的研究,遇到各类问题的第一解决方法都是Google再慢慢研究。因此,笔者相信各位看官能够成功地实现对Shogun工具箱的安装。
笔者的实验平台:双系统Ubuntu 16.04 64bit,Python2.7.12 和 Python3.5.2
本文就不详细叙述笔者在过去的一周到底经历了什么,最后又是如何成功了编译源文件,因为这一周的经历笔者已经混乱到记不全了,跳了哪些坑也不太清楚了。因此,笔者在此整理出在Ubuntu系统下可以正确编译、安装Shogun工具箱的详细操作步骤,以备后续成功避坑。
Shogun官网给出了在各类系统下安装该工具箱的具体操作方法 --->
http://shogun-toolbox.org/install,并将用户在手动编译过程中遇到的各类问题与解决方法放在了github上 ---> https://github.com/shogun-toolbox/shogun/issues ,这是笔者在安装过程中主要参考的文件,如果各位在安装过程中遇到了其它的问题,也建议大家在这两个地方找一找,Viktor Gal,github号‘vigsterkr’应该是Shogun工具箱的维护者吧,在很多有关Shogun的问题中都看到了他准确的问题。第三个方式就是Google了,多Google,找一找相关的解决方案。
在Ubuntu系统下可以通过ppa进行安装,具体操作方法为:
1. 获取安装包:
sudo add-apt-repository ppa:shogun-toolbox/stable sudo apt-get update
2. 安装:
sudo apt-get install libshogun18
3. 将Shogun包和Python联系起来
sudo apt-get install python-shogun
--------------------------------------------------------------------------------------------------------------------------
通过上述三步操作,就可以在Python2环境下导入shogun包,但是该包内没有包含SVMLight类,而Shogun的多核学习目前只支持SVMLight类。换句话说,没有SVMLight类,Shogun就不能用多核学习的功能。
有人问了这个问题,回答说因为许可证原因,所以在目前的版本中是没有SVMLight类的,但是可以通过从源代码编译的方式重新生成SVMLight。(笔者不知道在之前的版本中是否有SVMLight类) ---> https://github.com/shogun-toolbox/shogun/issues/3560
于是笔者就此走上了Manually Compiling的路
(ps:真的是记不清楚了正确地安装需要哪些工具了,如果按照下述方法在安装过程中遇到了问题,就请查看在“三、可能有用的附录”栏目中是否有相应的解决方案。
--------------------------------------------------------------------------------------------------------------------------
这里是具体的操作步骤
1. 下载Shogun6.1.3压缩文件(Source code (zip)):
https://github.com/shogun-toolbox/shogun/releases/tag/shogun_6.1.3
2. 下载Shogun's GPL code
https://github.com/shogun-toolbox/shogun-gpl/archive/v6.1.3.tar.gz
3. 解压上述下载的两个文件,将shogun-gpl-6.1.3内的三个文件‘shogun’、‘LICENSE.MD'、'README.MD'复制到shogun-shogun_6.1.3/src/gpl文件内
将shogun-shogun_6.1.3文件夹放到你想安装工具箱的位置
4. 修改配置文件
修改setup.py文件(在shogun-shogun_6.1.3内),第127行
shogun_version_pattern = re.compile(ur'#define MAINVERSION \"([0-9]\.[0-9]\.[0-9])\"')
修改为:shogun_version_pattern = re.compile(r'#define MAINVERSION \"([0-9]\.[0-9]\.[0-9])\"')
Python版本的原因
---------------------------------------
修改CMakeLists.txt文件(在shogun-shogun_6.1.3内),第314行
OPTION(BUILD_META_EXAMPLES "Generate API examples from meta-examples" ON)
修改为:OPTION(BUILD_META_EXAMPLES "Generate API examples from meta-examples" OFF)
在编译过程中,不再生成示例
5. 编译、安装
在命令行模式下,切换到setup.py所在位置,运行指令:
sudo apt-get install python-setuptools ---> 安装setuptools,没有此软件会报错
python setup.py install ---> 按CMakeLists.txt内的配置进行cmkae、make、make install 操作
正确安装完成后会输出”Shogun build environment completed tasks: cmake: [True] - make: [True] - make install: [True]"
可能会输出没有找到versionstring.h的错误,但是没有关系,可以忽略。各位看官如果能够心平气和地看到此处,那么说明你已经成功了百分之九十了。
6. 添加shogun库文件到用户环境变量 ---> http://shogun-toolbox.org/examples/latest/quickstart/interfaces.html
shogun的安装路径为:/userpath/shogun-shogun_6.1.3/build/install
添加环境变量到.bashrc
gedit ~/.bashrc
export LD_LIBRARY_PATH="/home/cratial/shogun-shogun_6.1.3/build/install/lib:$LD_LIBRARY_PATH"
# 其中/home/cratial/shogun-shogun_6.1.3/build/instlal为手动编译的安装环境
source ~/.bashrc
接下来在Python2环境下就可以使用shogun工具箱了。
shogun提供了很多的示例程序, ---> http://shogun-toolbox.org/showroom
在github上也提供了基于shogun的data:https://github.com/shogun-toolbox/shogun-data/tree/98931d233710e540584f8530ed682c27bb9431f2 (因为之前下载的源文件内是没有数据的)
按照官方文档的说法,shogun工具箱也可以安装到Python3上,笔者不知道是不是只需要将第五步中的指令改为python3 setup.py install,大家可以尝试一下,如果可以的话,请分享给大家。
另一种方式就是通过cmake、make、make install指令一步一步地进行操作,并且可以通过指定cmake的参数进行相应的修改。cmake [options] ..
比如: default settings: a. cmake -DOPTION=VALUE
using Python3: b. cmake -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 -DPYTHON_PACKAGES_PATH=/usr/local/lib/python3.5/dist-packages -DINTERFACE_PYTHON=ON
install Shogun to a custom location and shut off example generator: c. cmake -DCMAKE_INSTALL_PREFIX=path/to/shogun/install/dir -DBUILD_META_EXAMPLES=OFF
d. cmake -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 -DPYTHON_PACKAGES_PATH=/usr/local/lib/python3.5/dist-packages -DINTERFACE_PYTHON=ON -DBUILD_META_EXAMPLES=OFF The required packages (here debian/Ubuntu package names) for each interface are Python (需要的环境依赖) python-dev、python-numpy
可能还需要swig --->https://blog.csdn.net/veryitman/article/details/17398151
笔者在过去几天的时间里,大多数时间都在尝试通过命令行的方式进行安装,还尝试过在Python3环境下安装,但总是在cmake、make、make install的过程中发现各种各样的问题,会出现缺少依赖库,缺少配置文件等情况,说多了都是泪,就是打住吧。。。
虽然整个安装过程花了很多的时间,但主要还是笔者自己能力不足导致的。而且在寻找解决方案的时候,几乎没有发现中文版的解决方案,为此,笔者写下了这边记录文档,一方面是以备后续查看,另一方面也是分享给各位看官,希望能够帮助大家跳过一些可能的坑。另一个感觉就是scikit-learn和Python结合的太紧密了,hogun该如何生存呢,这或许是一个需要考虑的问题。
---------------------------------------------------------------完结 于2018.10.29--------------------------------------------
笔者今天又来折腾Shogun多核学习了,通过之前的调试工作,昨天已经能够正常地在Python2环境下使用shogun工具箱了,并能够通过Pycharm导入Shogun包,但是今天打开电脑再操作时,Pcharm在导入Shogun包时竟然出错了,出错了,大早上的,可以想象笔者的内心是多么的痛,。。。幸运的是,命令行模式还是可以正常操作的。
为此,在此记录此次的解决方法:
1. 在~/.bashrc内更改之前添加的环境变量
export LD_LIBRARY_PATH="/home/cratial/shogun-shogun_6.1.3/build/src/shogun/libshogun.so:$LD_LIBRARY_PATH"
(此次添加的变量是在build/src文件夹内,而不是之前添加的install文件夹)
2. 通过sudo权限将shogun.py、_shogun.so两个文件复制到Python2的安装环境下
sudo cp /userPath/shogun/build/src/interfaces/python/shogun.py /usr/local/lib/python2.7/dist-packages/
sudo cp /userPath/shogun/build/src/interfaces/python/_shogun.so /usr/local/lib/python2.7/dist-packages/
相关解决方法参见 ---> https://github.com/shogun-toolbox/shogun/issues/3950
至此,在Pcharm环境中不能导入Shogun包的问题得到解决。或许这才是添加Shogun库文件到系统环境的正确姿势:)
---------------------------------------------------------------完结 于2018.10.30--------------------------------------------
问题描述:为多种特征构建了多个核函数进行学习,但是程序运行出错,指令‘mkl.train()’显示错误:
mkl.train()
SystemError: [ERROR] In file /home/cratial/shogun-shogun_6.1.3/src/shogun/classifier/mkl/MKLMulticlassGLPK.cpp line 124: glpk.h from GNU glpk not included at compile time necessary here
可能的解决方法(安装glpk):
1.到官网下载GLPK安装包,最新版本为glpk-4.65.tar.gz ---> http://ftp.gnu.org/gnu/glpk/
2. 解压,并在解压后的文件内打开终端,顺序运行一下指令
a. ./configure
b. make
c. (sudo) make install
d. 由于使用GLPK需要使用到其动态库,因此在安装完毕后需要更新动态库
(sudo) ldconfig
详细的安装参考方法 ---> https://blog.csdn.net/Mr_KkTian/article/details/53038625?locationNum=4&fps=1
http://blog.sciencenet.cn/blog-3249403-1019884.html
---------------------------------------------------------------完结 于2018.11.02--------------------------------------------