mlpack:⼀个C++机器学习库
简介
mlpack是⼀个C++机器学习库,侧重于可扩展性、速度和易⽤性。它的⽬的是通过⼀个简单的、前后⼀致的API让新⽤户使⽤机器学习成为可能,同时利⽤C++语⾔特征为专家⽤户提供最好的性能和最⼤的灵活性。这些通过提供⼀系列命令⾏执⾏程序完成,就像使⽤⼀个⿊箱,⽽且专家⽤户和研究者可以容易的更改⼀个模块化的C++ API的内部算法。
这种⽅法的结果就是mlpack的性能⼤幅度超过其他竞争的机器学习库;
mlpack由全世界的贡献者开发。基于伯克利发⾏软件许可的第三个条款免费发⾏。(⽐1.0.12更⽼的版本基于GNU通⽤公共授权规定发⾏:LGPL,第3版。)
安装
mlpack存储在许多Linux的发⾏版本中,所以在你的系统中使⽤程序包管理器可能更容易⼀些。例如:在Ubuntu上,你可以使⽤下⾯的命令安装mlpack。
1.$ sudo apt-get install libmlpack-dev
如果mlpack不能在你的系统的程序包管理器中使⽤,那么你可以按照下⾯的步骤编译和安装mlpack源⽂件。
Mlpack使⽤CMake作为⽣成系统,允许⼏个灵活的⽣成配置选项。你可以查询⼤量的CMake教程得到更多的⽂件,但是这个教程应该⾜够让你在⼤多数Linux和类UNIX系统中(包括OS X)成功⽣成和安装mlpack。如果你想在Windows操作系统中⽣成mlpack,请看这⾥。
⾸先下载mlpack。
当mlpack的源⽂件完成解压,你可以创建⼀个⽣成⽬录。
1.$ cd mlpack-
2.2.5
2.$ mkdir build
这个⽬录可以是任何名字,不仅仅是“build”,但是“build”⾜够了。
mlpack依赖项
mlpack依赖下⾯的库,它们需要被安装在系统中并有⼀些头⽂件出现。
在Ununtu和Debian中,你可以通过apt获得所有这些依赖项:
1.# apt-get install libboost-math-dev libboost-program-options-dev
2. libboost-test-dev libboost-serialization-dev libarmadillo-dev binutils-dev
配置CMake
运⾏CMake相当于使⽤autotools运⾏./configure。
如果你⼯作中使⽤mlpack的svn trunk版本,且不带任何选项运⾏CMake,它将配置这个⽣成项⽬带有调试符号和分析信息:如果你⼯作中使⽤发⾏版本的mlpack,不带任何选项运⾏CMake,它将配置这个⽣成项⽬不带调试符号和分析信息(为了速度)。
为什么现在都用cmake
1.$ cd build
2.$ cmake ../
你可以⼿动指定选项去编译或不编译调试信息和分析信息(也就是说尽可能快):
1.$ cd build
2.$ cmake -D DEBUG=OFF -D PROFILE=OFF ../
Mlpack允许的全部选项为:
每个选项都可以被指定给带有‘-D’标记的CMake。其他⼯具也可以⽤于配置CMake,但是它们没有被记录在这⾥。
⽣成mlpack
⼀旦CMake配置好,⽣成库就像打出‘make’⼀样简单。这将⽣成所有库组件和‘mlpack_test’。
1.$ make
2.Scanning dependencies of target mlpack
3.[ 1%] Building CXX object
4.src/mlpack/CMakeFiles/mlpack.dir/core/optimizers/aug_lagrangian/aug_lagrangian_test_functions.cpp.o
5.<...>
如果你不想⽣成每⼀个库,可以指定你想⽣成的单个组件。
1.$ make mlpack_pca mlpack_knn mlpack_kfn
⼀个有趣的特殊组件是mlpack_test,它是运⾏mlpack的测试组件。你可以使⽤这个命令⽣成这个组件:
1.$ make mlpack_test
然后运⾏所有的测试组件或单个的测试组件:
1.$ bin/mlpack_test
2.$ bin/mlpack_test -t KNNTest
如果⽣成失败,⽽你不能到为什么失败,在Github上注册⼀个账户,提交这个问题,mlpack的开发⼈员将会尽快帮你解决,
或者在irc.freenodem上的mlpack的IRC中也可以到mlpack的帮助。
安装mlpack
如果你想将mlpack安装在/usr/include/mlpack/、/usr/lib/和/usr/bin/中,当它⽣成后,确保你有root权限(或向那两个⽬录的写⼊许可),然后简单的打出:
1.# make install
现在你可以通过名字运⾏可执⾏程序;你可以使⽤-lmlpack链接到mlpack,mlpack的头⽂件可以在⽬录/usr/include/mlpack/中到。
⽰例
最近邻搜索是⼀个常见的机器学习任务。在这个背景下 ,我们有⼀个查询数据集和⼀个参考数据集。对于在查询数据集中的每个点,我们希望知道参考数据集中距离给定查询点最近的k个点。
或者,如果查询和参考数据集是相同的,问题可以更简单的说明:对于每个数据集中的点,我们希望知道距离那个点最近的k个点。
Mlpack提供:
⼀个简单的命令⾏程序包运⾏最近邻搜索(和最远邻搜索)。
⼀个简单的C++接⼝⽤于完成最近邻搜索(和最远邻搜索)。
⼀个通⽤的、可扩展的和强⼤的C++类(邻域搜索)⽤于复杂算法。
命令⾏‘mlpack_knn’
在mlpack中完成最近邻搜索最简单的⽅式是使⽤mlpack_knn程序包。这个程序将完成最近邻搜索,并将得到的邻近点放⼊⼀个⽂件,同时将对应的距离放⼊另⼀个⽂件。输出⽂件被整理为第⼀⾏对应第⼀个被查询点的最近邻点,第⼀列对应最近的点,以此类推。
还有⼏个简单⽤法的例⼦(和输出结果)。由于使⽤了选项‘-v’,因此输出是给定的。更多关于每个选项的⽂档可以通过这个语句到。这⾥列举⼀个。
TraverserType策略类
邻域搜索NeighborSearch类提供的最后⼀个模板参数是TraverserType类。它具有的策略是在单⼀树或者双树搜索模式下遍历树。默认情况下,它被设置为使⽤指定TreeType(成员TreeType::DualTreeTraverser)的默认遍历器。
这个类必须实现下⾯两种⽅法:
1.// Instantiate with a given RuleType.
2.TraverserType(RuleType& rule);
3.
4..// Traverse with two trees.
5.void Traverse(TreeType& queryNode, TreeType& referenceNode);
5.void
RuleType类⽤在遍历器中时提供下⾯的功能:
1.// Evaluate the base case between two points.
2.double BaseCase(const size_t queryIndex, const size_t referenceIndex);
3.
4.// Score the two nodes to see if they can be pruned, returning DBL_MAX if they
5.// can be pruned.
6.double Score(TreeType& queryNode, TreeType& referenceNode);
注意任何指定的遍历器必须满⾜修剪双树遍历的定义,其在⽂章”Tree-independent dual-tree algorithms”中指定。
最后你觉得我们的⽂章对你有帮助,欢迎关注我,可以私信我:久伴,领取学习资料,在评论下⽅可以关注我的学习,你可以随时在上⾯向我们提问,把你在学习C++过程中所遇到的问题发给我们。我们每天都会按时回复⼤家的每⼀个问题,希望久伴可以伴随你从⼊门到专家

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。