#include <assert.h>
#include <stddef.h>
#include <stdint.h> 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define safe_xgboost(call) { \
int err = (call); \
if (err != 0) { \
 fprintf(stderr, "%s:%d: error in %s: %s\n", __FILE__, __LINE__, #call, XGBGetLastError()); \
exit(1); \
}                                                                       \
}
 
static void MakeArrayInterface(size_t data, size_t n, char const* typestr, size_t length,
                               char* out) {
  static char const kTemplate[] =
      "{\"data\": [%lu, true], \"shape\": [%lu, %lu], \"typestr\": \"%s\", \"version\": 3}";
memset(out, '\0', length);
sprintf(out, kTemplate, data, n, 1ul, typestr);
}
static void MakeConfig(int n_threads, size_t length, char* out) {
  static char const kTemplate[] = "{\"missing\": NaN, \"nthread\": %d}";
memset(out, '\0', length);
sprintf(out, kTemplate, n_threads);
}
 
int main() {
  int silent = 0;
  int use_gpu = 0; 
 
  
 
  
 
  
  
  
 
 
  
  int n_trees = 10;
  const char* eval_names[2] = {"train", "test"};
  const char* eval_result = NULL;
  for (int i = 0; i < n_trees; ++i) {
printf("%s\n", eval_result);
  }
 
printf("num_feature: %lu\n", (unsigned long)(num_feature));
 
  
  int n_print = 10;
 
  
  char const config[] =
      "{\"training\": false, \"type\": 0, "
      "\"iteration_begin\": 0, \"iteration_end\": 0, \"strict_shape\": false}";
  
uint64_t const* out_shape;
  
uint64_t out_dim;
  
  float const* out_result = NULL;
safe_xgboost(
 
printf("y_pred: ");
  for (int i = 0; i < n_print; ++i) {
printf("%1.4f ", out_result[i]);
  }
printf("\n");
 
  
printf("y_test: ");
  for (int i = 0; i < n_print; ++i) {
printf("%1.4f ", out_result[i]);
  }
printf("\n");
 
  {
printf("密集矩阵示例 (XGDMatrixCreateFromMat): ");
 
    const float values[] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0,
      1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
      0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
      1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      1, 0, 0, 0, 0, 1, 0, 0, 0, 0};
 
 
    const float* out_result = NULL;
 
safe_xgboost(
assert(out_dim == 1);
assert(out_shape[0] == 1);
 
printf("%1.4f \n", out_result[0]);
  }
 
  {
printf("稀疏矩阵示例 (XGDMatrixCreateFromCSR): ");
 
    const uint64_t indptr[] = {0, 22};
    const uint32_t indices[] = {1, 9, 19, 21, 24, 34, 36, 39, 42, 53, 56,
                                65, 69, 77, 86, 88, 92, 95, 102, 106, 117, 122};
    const float data[] = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
                          1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
 
    char j_indptr[128];
MakeArrayInterface((size_t)indptr, 2ul, "<u8", sizeof(j_indptr), j_indptr);
    char j_indices[128];
MakeArrayInterface((size_t)indices, sizeof(indices) / sizeof(uint32_t), "<u4",
                       sizeof(j_indices), j_indices);
    char j_data[128];
MakeArrayInterface((size_t)data, sizeof(data) / sizeof(float), "<f4", sizeof(j_data), j_data);
 
    char j_config[64];
MakeConfig(0, sizeof(j_config), j_config);
 
 
    const float* out_result = NULL;
 
safe_xgboost(
assert(out_dim == 1);
assert(out_shape[0] == 1);
 
printf("%1.4f \n", out_result[0]);
  }
 
  {
printf("稀疏矩阵示例 (XGDMatrixCreateFromCSC): ");
 
    const uint64_t indptr[] = {
        0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  3,
        4,  4,  4,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  7,  7,  7,  8,  8,  8,  9,
        9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
        12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15,
        15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20,
        20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22};
 
    const uint32_t indices[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
    const float data[] = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
                          1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
 
    char j_indptr[128];
MakeArrayInterface((size_t)indptr, 128ul, "<u8", sizeof(j_indptr), j_indptr);
    char j_indices[128];
MakeArrayInterface((size_t)indices, sizeof(indices) / sizeof(unsigned), "<u4",
                       sizeof(j_indices), j_indices);
    char j_data[128];
MakeArrayInterface((size_t)data, sizeof(data) / sizeof(float), "<f4", sizeof(j_data), j_data);
 
    char j_config[64];
MakeConfig(0, sizeof(j_config), j_config);
 
 
    const float* out_result = NULL;
 
safe_xgboost(
assert(out_dim == 1);
assert(out_shape[0] == 1);
 
printf("%1.4f \n", out_result[0]);
  }
 
  
  return 0;
}
XGBoost 的 C API,用于与其他语言接口。
uint64_t bst_ulong
定义: c_api.h:29
int XGBoosterGetNumFeature(BoosterHandle handle, bst_ulong *out)
获取特征数量
int XGBoosterFree(BoosterHandle handle)
删除增强器。
int XGBoosterEvalOneIter(BoosterHandle handle, int iter, DMatrixHandle dmats[], const char *evnames[], bst_ulong len, const char **out_result)
获取xgboost的评估统计数据
int XGBoosterUpdateOneIter(BoosterHandle handle, int iter, DMatrixHandle dtrain)
使用dtrain更新模型一个回合
int XGBoosterSetParam(BoosterHandle handle, const char *name, const char *value)
设置参数
int XGBoosterCreate(const DMatrixHandle dmats[], bst_ulong len, BoosterHandle *out)
创建一个XGBoost学习器(booster)
int XGDMatrixFree(DMatrixHandle handle)
释放数据矩阵中的空间
int XGDMatrixCreateFromCSR(char const *indptr, char const *indices, char const *data, bst_ulong ncol, char const *config, DMatrixHandle *out)
从 CSR 矩阵创建 DMatrix。
int XGDMatrixCreateFromFile(const char *fname, int silent, DMatrixHandle *out)
加载数据矩阵
int XGDMatrixCreateFromCSC(char const *indptr, char const *indices, char const *data, bst_ulong nrow, char const *config, DMatrixHandle *out)
从 CSC 矩阵创建 DMatrix。
int XGDMatrixCreateFromMat(const float *data, bst_ulong nrow, bst_ulong ncol, float missing, DMatrixHandle *out)
从密集矩阵创建矩阵内容
int XGDMatrixGetFloatInfo(const DMatrixHandle handle, const char *field, bst_ulong *out_len, const float **out_dptr)
从矩阵获取浮点信息向量。
void * BoosterHandle
Booster 句柄
定义: c_api.h:52
void * DMatrixHandle
DMatrix 句柄
定义: c_api.h:50
int XGBoosterPredictFromDMatrix(BoosterHandle handle, DMatrixHandle dmat, char const *config, bst_ulong const **out_shape, bst_ulong *out_dim, float const **out_result)
从DMatrix进行预测,取代XGBoosterPredict。