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

(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;
}

コンパイル
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にクローズされました