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++
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.
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.
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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With