#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#define safe_xgboost(err) \
if ((err) != 0) { \
fprintf(stderr, "%s:%d: error in %s: %s\n", __FILE__, __LINE__, #err, \
XGBGetLastError()); \
exit(1); \
}
#define N_BATCHS 32
#define BATCH_LEN 512
typedef BoosterHandle Booster;
float **data;
float **labels;
size_t *lengths;
size_t n;
size_t cur_it;
DMatrix _proxy;
char _array[128];
#define safe_malloc(ptr) \
if ((ptr) == NULL) { \
fprintf(stderr, "%s:%d: Failed to allocate memory.\n", __FILE__, \
__LINE__); \
exit(1); \
}
void DataIterator_Init(
DataIter *self,
size_t batch_size,
size_t n_batches) {
self->
lengths = (
size_t *)malloc(self->n *
sizeof(
size_t));
safe_malloc(self->lengths);
for (size_t i = 0; i < self->n; ++i) {
self->lengths[i] = batch_size;
}
self->
data = (
float **)malloc(self->n *
sizeof(
float *));
safe_malloc(self->data);
self->
labels = (
float **)malloc(self->n *
sizeof(
float *));
safe_malloc(self->labels);
for (size_t i = 0; i < self->n; ++i) {
self->data[i] = (float *)malloc(self->lengths[i] * sizeof(float));
safe_malloc(self->data[i]);
for (size_t j = 0; j < self->lengths[i]; ++j) {
float x = (float)rand() / (float)(RAND_MAX);
self->data[i][j] = x;
}
self->labels[i] = (float *)malloc(self->lengths[i] * sizeof(float));
safe_malloc(self->labels[i]);
for (size_t j = 0; j < self->lengths[i]; ++j) {
float y = (float)rand() / (float)(RAND_MAX);
self->labels[i][j] = y;
}
}
}
void DataIterator_Free(
DataIter *self) {
for (size_t i = 0; i < self->n; ++i) {
free(self->data[i]);
free(self->labels[i]);
}
free(self->data);
free(self->lengths);
free(self->labels);
};
if (self->cur_it == self->n) {
self->cur_it = 0;
return 0;
}
char array[] =
"{\"data\": [%lu, false], \"shape\":[%lu, 1], \"typestr\": "
"\"<f4\", \"version\": 3}";
memset(self->
_array,
'\0',
sizeof(self->_array));
sprintf(self->_array, array, (size_t)self->data[self->cur_it],
self->lengths[self->cur_it]);
self->labels[self->cur_it],
self->lengths[self->cur_it], 1));
self->cur_it++;
return 1;
}
self->cur_it = 0;
}
void TrainModel(DMatrix Xy) {
Booster booster;
DMatrix cache[] = {Xy};
const char *validation_names[1] = {"train"};
const char *validation_result = NULL;
size_t n_rounds = 10;
for (size_t i = 0; i < n_rounds; ++i) {
&validation_result));
printf("%s\n", validation_result);
}
}
int main() {
DataIterator_Init(&iter, BATCH_LEN, N_BATCHS);
char config[] = "{\"missing\": NaN, \"cache_prefix\": \"cache\"}";
DMatrix Xy;
&iter, iter._proxy, DataIterator_Reset, DataIterator_Next, config, &Xy));
TrainModel(Xy);
DataIterator_Free(&iter);
return 0;
}
XGB_DLL int XGBoosterUpdateOneIter(BoosterHandle handle, int iter, DMatrixHandle dtrain)
update the model in one round using dtrain
Definition c_api.cc:960
XGB_DLL int XGBoosterEvalOneIter(BoosterHandle handle, int iter, DMatrixHandle dmats[], const char *evnames[], bst_ulong len, const char **out_result)
get evaluation statistics for xgboost
Definition c_api.cc:998
XGB_DLL int XGBoosterFree(BoosterHandle handle)
free obj in handle
Definition c_api.cc:896
XGB_DLL int XGBoosterCreate(const DMatrixHandle dmats[], bst_ulong len, BoosterHandle *out)
create xgboost learner
Definition c_api.cc:882
XGB_DLL int XGBoosterSetParam(BoosterHandle handle, const char *name, const char *value)
set parameters
Definition c_api.cc:903
XGB_DLL int XGDMatrixSetDenseInfo(DMatrixHandle handle, const char *field, void const *data, bst_ulong size, int type)
Set meta info from dense matrix. Valid field names are:
Definition c_api.cc:672
XGB_DLL int XGDMatrixFree(DMatrixHandle handle)
free space in data matrix
Definition c_api.cc:585
void * DMatrixHandle
handle to DMatrix
Definition c_api.h:49
XGB_DLL int XGBoosterSaveModel(BoosterHandle handle, const char *fname)
Save model into existing file.
Definition c_api.cc:1246
XGB_DLL int XGDMatrixCreateFromCallback(DataIterHandle iter, DMatrixHandle proxy, DataIterResetCallback *reset, XGDMatrixCallbackNext *next, char const *config, DMatrixHandle *out)
Create an external memory DMatrix with data iterator.
Definition c_api.cc:298
XGB_DLL int XGProxyDMatrixCreate(DMatrixHandle *out)
Second set of callback functions, used by constructing Quantile DMatrix or external memory DMatrix us...
Definition c_api.cc:359
void * DataIterHandle
handle to a external data iterator
Definition c_api.h:334
XGB_DLL int XGProxyDMatrixSetDataDense(DMatrixHandle handle, char const *c_interface_str)
Set data on a DMatrix proxy.
Definition c_api.cc:393
@ array
array (ordered collection of values)
Definition external_memory.c:26
Copyright 2015~2023 by XGBoost Contributors.