Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using XGBOOST in c++

Tags:

How can I use XGBOOST https://github.com/dmlc/xgboost/ library in c++? I have founded Python and Java API, but I can't found API for c++

like image 506
V. Gai Avatar asked Mar 17 '16 21:03

V. Gai


People also ask

Is XGBoost written in C++?

XGBoost is a well-known gradient boosted decision trees (GBDT) machine learning package used to tackle regression, classification, and ranking problems. It's written in C++ and NVIDIA CUDA® with wrappers for Python, R, Java, Julia, and several other popular languages.

What is DMatrix in the XGBoost library?

DMatrix is an internal data structure that is used by XGBoost, which is optimized for both memory efficiency and training speed. You can construct DMatrix from multiple different sources of data.

How do I import XGBoost into Python?

As usual, you start by importing the library xgboost and other important libraries that you will be using for building the model. Note you can install python libraries like xgboost on your system using pip install xgboost on cmd. Separate the target variable and rest of the variables using . iloc to subset the data.


1 Answers

I ended up using the C API, see below an example:

// create the train data int cols=3,rows=5; float train[rows][cols]; for (int i=0;i<rows;i++)     for (int j=0;j<cols;j++)         train[i][j] = (i+1) * (j+1);  float train_labels[rows]; for (int i=0;i<rows;i++)     train_labels[i] = 1+i*i*i;   // convert to DMatrix DMatrixHandle h_train[1]; XGDMatrixCreateFromMat((float *) train, rows, cols, -1, &h_train[0]);  // load the labels XGDMatrixSetFloatInfo(h_train[0], "label", train_labels, rows);  // read back the labels, just a sanity check bst_ulong bst_result; const float *out_floats; XGDMatrixGetFloatInfo(h_train[0], "label" , &bst_result, &out_floats); for (unsigned int i=0;i<bst_result;i++)     std::cout << "label[" << i << "]=" << out_floats[i] << std::endl;  // create the booster and load some parameters BoosterHandle h_booster; XGBoosterCreate(h_train, 1, &h_booster); XGBoosterSetParam(h_booster, "booster", "gbtree"); XGBoosterSetParam(h_booster, "objective", "reg:linear"); XGBoosterSetParam(h_booster, "max_depth", "5"); XGBoosterSetParam(h_booster, "eta", "0.1"); XGBoosterSetParam(h_booster, "min_child_weight", "1"); XGBoosterSetParam(h_booster, "subsample", "0.5"); XGBoosterSetParam(h_booster, "colsample_bytree", "1"); XGBoosterSetParam(h_booster, "num_parallel_tree", "1");  // perform 200 learning iterations for (int iter=0; iter<200; iter++)     XGBoosterUpdateOneIter(h_booster, iter, h_train[0]);  // predict const int sample_rows = 5; float test[sample_rows][cols]; for (int i=0;i<sample_rows;i++)     for (int j=0;j<cols;j++)         test[i][j] = (i+1) * (j+1); DMatrixHandle h_test; XGDMatrixCreateFromMat((float *) test, sample_rows, cols, -1, &h_test); bst_ulong out_len; const float *f; XGBoosterPredict(h_booster, h_test, 0,0,&out_len,&f);  for (unsigned int i=0;i<out_len;i++)     std::cout << "prediction[" << i << "]=" << f[i] << std::endl;   // free xgboost internal structures XGDMatrixFree(h_train[0]); XGDMatrixFree(h_test); XGBoosterFree(h_booster); 
like image 122
Tomer Avatar answered Oct 07 '22 13:10

Tomer