Closed2

LightGBM C APIの利用【未完メモ】

tatotato

(C/C++ は見よう見まねレベルです)

#include <LightGBM/c_api.h>
#include <cstdio>
#include <vector>
#include <iostream>

int main(int argc, char **argv)
{
  printf("========== START\n");

  // see
  // https://lightgbm.readthedocs.io/en/latest/C-API.html
  // https://lightgbm.readthedocs.io/en/latest/Parameters.html
  DatasetHandle dataset_handle;

  // load dataset
  printf("========== load dataset");
  // iris.csv
  // 5.1,3.5,1.4,0.2,0
  // 4.9,3.0,1.4,0.2,0
  // ...
  int result;
  result = LGBM_DatasetCreateFromFile("iris.csv", "label_column=4", nullptr,  &dataset_handle);
  printf("========== loaded: %d\n", result);

  // booster
  printf("========== build booster\n");
  int max_iteration = 100;
  BoosterHandle booster_handle;
  result = LGBM_BoosterCreate(dataset_handle, "task=train objective=multiclass metric=multi_logloss num_class=3 force_col_wise=true", &booster_handle);

  int booster_finished;
  int booster_check;
  for(int iter = 0; iter < max_iteration; iter++) {
    booster_check = LGBM_BoosterUpdateOneIter(booster_handle, &booster_finished);
    printf("iteration_%d: %d\n", iter, booster_finished);
    if(booster_finished == 1 || booster_check == -1){
      break;
    }
  }

  double feature_result[4];
  int n_iteration;
  LGBM_BoosterGetCurrentIteration(booster_handle, &n_iteration);
  LGBM_BoosterFeatureImportance(booster_handle, n_iteration, C_API_FEATURE_IMPORTANCE_GAIN, feature_result);
  printf("feature_importance 0 at iteration_%d: %f\n", n_iteration, feature_result[0]);
  printf("feature_importance 1 at iteration_%d: %f\n", n_iteration, feature_result[1]);
  printf("feature_importance 2 at iteration_%d: %f\n", n_iteration, feature_result[2]);
  printf("feature_importance 3 at iteration_%d: %f\n", n_iteration, feature_result[3]);
  printf("========== built: %d\n", result);

  // predict
  printf("========== predict\n");

  float target[4] = {5.1, 3.5, 1.4, 0.2};

  // num_class * num_data
  double out_result[3*1];
  int64_t *out_len = new int64_t();
  result = LGBM_BoosterPredictForMatSingleRow(booster_handle, target, C_API_DTYPE_FLOAT32, 4, 1, C_API_PREDICT_NORMAL, 1, 0, "", out_len, out_result);

  std::cout << "row predict result is " << out_result[0] << " "<< out_result[1] << " " << out_result[2] << std::endl;
  printf("========== predicted: %d\n", result);

  return 0;
}
tatotato

コンパイル

g++ -fpermissive -o test -v test.cpp /usr/local/lib/lib_lightgbm.so -I/root/LightGBM/include -Wl,-rpath,/root/LightGBM && ./test

  • /root にLightGBMをcloneしてビルド済み
このスクラップは2023/03/20にクローズされました