linux mlpack C++开发笔记


linux(ubuntu) mlpack C++开发笔记

  一般在项目开发中,对算法进行性能评估的时候,我会选择python进行数据处理,以及算法评估,评估完成后,为了将算法整合进项目中,就得利用C++/C来实现,主要是因为在涉及大批量数据处理时,python的效率实在捉襟见肘.

  mlpack是一个利用C++编写的机器学习库,以其强大,灵活著称.官网地址:   http://www.mlpack.org/         

  官网也有安装指南https://www.mlpack.org/doc/mlpack-3.1.1/doxygen/build.html,从源码编译,过程摘抄如下:

  需要先安装一些依赖:

  # apt-get install libboost-math-dev libboost-program-options-dev libboost-test-dev libboost-serialization-dev libarmadillo-dev binutils-dev
python-pandas python-numpy cython python-setuptools
  主要用到的是armadillo(一个线性代数库). boost等,想要看懂源码的话需要了解一下armadillo的一些常见类型与操作(主要就是矩阵操作).
 
 
  $ wget https: //www.mlpack.org/files/mlpack-3.1.1.tar.gz
  $ tar -xvzpf mlpack-3.1.1.tar.gz
  $ mkdir mlpack-3.1.1/build && cd mlpack-3.1.1/build
  $ cmake ../
  $ make -j4 # The -j is the number of cores you want to use for a build.
  $ sudo make install
 
假设我们已经按照上述步骤完成了安装,接下来使用kmeans算法对数据进行cluster(选择最简单的naive_kmeans,其他方式见--help,或者看一下源码,注释很详细):

#include <stdio.h>

#include "mlpack/core.hpp"

#include "mlpack/core.hpp"

#include "mlpack/core/data/load.hpp"

#include "mlpack/methods/kmeans/kmeans.hpp"

using namespace arma;

using namespace mlpack;

using namespace mlpack::kmeans;

int main(){

  std::cout<<"loading data"<<endl;

  arma::mat dataset;//matrice

  arma::mat centroids;// 聚类的中心点

  arma::Row<size_t> assignments;//result

  bool loaded = mlpack::data::Load("src_file.csv", dataset);//dataset 存储读入的数据, mlpack的读入的数据是以列为存储对象的,load函数会自动

  //完成转置

  if(load == false){return -1;}

  KMeans<>k;//全部选择默认配置

  k.Cluster(dataset, 2, assignments, centroids);//2 代表分为两类, assignments存储每个数据对应的类别

  //输出结果

  for(auto i = 0; i < assignments.size(); i++){

    std::cout<<assignments.col(i)<<std::endl;

  }

  return 0;

}

编译语句:

  g++ -g src.cpp -std==c++11 -o test.o -lmlpack -larmadillo

更多示例在:https://www.mlpack.org/doc/mlpack-3.1.1/doxygen/kmtutorial.html

//遇到无法连接到mllpack的error :export LD_LIBRARY_PATH=/usr/local/lib

//遇到其他无法找到的*.so, 先找到so文件的位置:/home/anaconda3/lib/*.so,接着:

export LD_LIBRARY_PATH="/home/anaconda3/lib/:$LD_LIBRARY_PATH"


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM