mlpack:一個C++機器學習庫

簡介

mlpack是一個C++機器學習庫,側重於可擴展性、速度和易用性。它的目的是通過一個簡單的、前後一致的API讓新用戶使用機器學習成為可能,同時利用C++語言特徵為專家用戶提供最好的性能和最大的靈活性。這些通過提供一系列命令行執行程序完成,就像使用一個黑箱,而且專家用戶和研究者可以容易的更改一個模塊化的C++ API的內部算法。

mlpack:一個C++機器學習庫

m'lpack

這種方法的結果就是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依賴下面的庫,它們需要被安裝在系統中並有一些頭文件出現。

  • Armadillo >=4.200.0(支持LAPACK(線性代數程序包))
  • Boost(math_c99, program_options, serialization, unit_test_framework, heap, spirit)>=1.49

在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,它將配置這個生成項目不帶調試符號和分析信息(為了速度)。

1.$ cd build

2.$ cmake ../

你可以手動指定選項去編譯或不編譯調試信息和分析信息(也就是說盡可能快):

1.$ cd build

2.$ cmake -D DEBUG=OFF -D PROFILE=OFF ../

Mlpack允許的全部選項為:

  • DEBUG=(ON/OFF): compile with debugging symbols (default ON in svn trunk, OFF in releases)
  • PROFILE=(ON/OFF): compile with profiling symbols (default ON in svn trunk, OFF in releases)
  • ARMA_EXTRA_DEBUG=(ON/OFF): compile with extra Armadillo debugging symbols (default OFF)
  • BUILD_TESTS=(ON/OFF): compile the mlpack_test program (default ON)
  • BUILD_CLI_EXECUTABLES=(ON/OFF): compile the mlpack command-line executables (i.e. mlpack_knn, mlpack_kfn, mlpack_logistic_regression, etc.) (default ON)
  • TEST_VERBOSE=(ON/OFF): run test cases in mlpack_test with verbose output (default OFF)

每個選項都可以被指定給帶有‘-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.freenode.netm上的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);

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++過程中所遇到的問題發給我們。我們每天都會按時回覆大家的每一個問題,希望久伴可以伴隨你從入門到專家


分享到:


相關文章: