多核学习工具箱Shogun的手动编译过程

目录

多核学习工具箱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--------------------------------------------

A.可能的更新1

笔者今天又来折腾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--------------------------------------------

B.可能的更新2

问题描述:为多种特征构建了多个核函数进行学习,但是程序运行出错,指令‘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--------------------------------------------

多核学习工具箱Shogun的手动编译过程相关推荐

  1. gitea 手动编译过程,以及踩坑记录

    gitea 手动编译过程,以及踩坑记录 一: 环境介绍 二:下载源码 三:编译安装go 环境 3.1 修改源为阿里 3.2 添加执行权限 3.2 添加环境变量 四:安装nodejs 4.1 添加源 4 ...

  2. 【C语言进阶深度学习记录】十五 编译过程简介

    文章目录 1 初识编译器 2 总结 1 初识编译器 我们平时口中所说的编译器,是广泛的编译器.实际上,编译器包括了以下四个部分: 一个C代码被编译为可执行代码,包括以下几个过程: 下面就对上述的各个过 ...

  3. golang源码分析:编译过程词法解析的流程

    golang编译 由于golang作为静态语言,当使用go build时就会生成对应的编译完成之后的文件,那这个编译过程大致会做什么事情呢,在golang中的编译大致有哪些流程. golang示例代码 ...

  4. Linux下手动编译shogun

    手动编译shogun,如果按照直接按照官网上的步骤进行,会踩非常多的坑,下面分享一下在下的编译过程,希望能为阁下提供些许借鉴. 1. git clone https://github.com/shog ...

  5. C语言学习笔记---001C语言的介绍,编译过程原理,工具等

    C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...

  6. ubuntu中手动编译源码安装Xorg-server过程中依赖关系的解决

    ubuntu中手动编译源码安装Xorg-server过程中依赖关系的解决 在linux系统中手动编译源码安装软件包的过程是非常痛苦的,然而这一个多星期以来我是强忍住脾气体验了一把,虽然面对慢的令人发指 ...

  7. linux环境手动编译安装Nginx实践过程 附异常解决

    linux环境手动编译安装Nginx实践过程 附异常解决 参考文章: (1)linux环境手动编译安装Nginx实践过程 附异常解决 (2)https://www.cnblogs.com/david9 ...

  8. 博通Broadcom SDK源码学习与开发2——Bootloader功能和编译过程

    声明:原创作品,严禁用于商业目的. 本系列文章将全面剖析以Bcm33xxx芯片开发Cablemodem产品的SDK源码为例,从编译系统到各个功能模块进行分析与探讨. 文章目录 0.写在前篇 0.写在前 ...

  9. 【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程

    一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (a ...

最新文章

  1. 初学web标准的几个误区
  2. python画指数函数图像_解决python中的幂函数、指数函数问题
  3. 何时使用cla(),clf()或close()在matplotlib中清除图?
  4. 内存管理之程序内存分布
  5. 笔试总结2(整理 觉得比较好的)
  6. OpenCV Mat 简介
  7. JavaScript面向对象中的严格模式
  8. 产品经理被老板打住院
  9. vba ado返回集合_利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总
  10. 真正中文攻略之ef - the first tale(含下载和汉化)
  11. html整体移动,html 可以拖动多个div
  12. 状态压缩DP-棋盘模型总结
  13. 【重构与模式】6.1用Creation Method替换构造函数
  14. springmvc学习一初始化源码
  15. 九宫格拼图小游戏代码html,js实现九宫格拼图小游戏.pdf
  16. Aspose for Maven 使用
  17. 制作QQ微信支付宝三合一收款码
  18. 使用CentOS7搭建Nat64服务器实现IPv6网段访问IPv4地址
  19. 电商物流就是昨天的外卖乱战?千亿市场到底该如何整合
  20. 小程序页面onload(),onready()加载顺序

热门文章

  1. UVA10110-灯光
  2. LaTeX记录 —— 特殊符号
  3. iOS--无法加载dae文件
  4. spring-boog-测试打桩-Mockito
  5. openfire html5,HTML5来了,7个混合式移动开发框架
  6. python中answer_python新手关于一个实例:提示 answer = input()这行有问题,复制粘贴的,请高手指正...
  7. WebRTC offer - answer交换sdp流程分析
  8. 洛谷P1339 Heat Wave G(最短路,图论)
  9. 为啥是我得癌症?(不管什么行业,请耐心读完)
  10. 响铃:救市之作三星S6 edge+能否完成使命?