delete extra things
This commit is contained in:
parent
0130be4acc
commit
0fe5470a4f
4
.gitignore
vendored
4
.gitignore
vendored
@ -36,3 +36,7 @@ Debug
|
|||||||
*test*
|
*test*
|
||||||
.Rhistory
|
.Rhistory
|
||||||
*.dll
|
*.dll
|
||||||
|
*i386
|
||||||
|
*x64
|
||||||
|
*dump
|
||||||
|
*save
|
||||||
|
|||||||
@ -1,72 +0,0 @@
|
|||||||
booster[0]:
|
|
||||||
0:[f28<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:[f108<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=1.85965
|
|
||||||
4:leaf=-1.94071
|
|
||||||
2:[f55<1.00001] yes=5,no=6,missing=6
|
|
||||||
5:leaf=-1.70044
|
|
||||||
6:leaf=1.71218
|
|
||||||
booster[1]:
|
|
||||||
0:[f59<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:leaf=-6.23624
|
|
||||||
2:[f28<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=-0.96853
|
|
||||||
4:leaf=0.784718
|
|
||||||
booster[2]:
|
|
||||||
0:[f101<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:[f110<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=-9.42142
|
|
||||||
4:leaf=-0.791407
|
|
||||||
2:[f66<1.00001] yes=5,no=6,missing=6
|
|
||||||
5:leaf=5.77229
|
|
||||||
6:leaf=0.658725
|
|
||||||
booster[3]:
|
|
||||||
0:[f26<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:leaf=1.07748
|
|
||||||
2:[f38<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=-0.877906
|
|
||||||
4:leaf=0.614153
|
|
||||||
booster[4]:
|
|
||||||
0:[f108<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:leaf=2.92191
|
|
||||||
2:[f35<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=0.152607
|
|
||||||
4:leaf=-1.26934
|
|
||||||
booster[5]:
|
|
||||||
0:[f22<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:[f35<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=-1.02315
|
|
||||||
4:leaf=-3.02414
|
|
||||||
2:[f23<1.00001] yes=5,no=6,missing=6
|
|
||||||
5:leaf=-1.53846
|
|
||||||
6:leaf=0.431742
|
|
||||||
booster[6]:
|
|
||||||
0:[f28<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:[f108<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=0.836115
|
|
||||||
4:leaf=-0.912605
|
|
||||||
2:[f23<1.00001] yes=5,no=6,missing=6
|
|
||||||
5:leaf=-1.1971
|
|
||||||
6:leaf=0.777142
|
|
||||||
booster[7]:
|
|
||||||
0:[f38<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:[f26<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=0.890623
|
|
||||||
4:leaf=-0.908312
|
|
||||||
2:[f111<1.00001] yes=5,no=6,missing=6
|
|
||||||
5:leaf=1.43619
|
|
||||||
6:leaf=-0.0180106
|
|
||||||
booster[8]:
|
|
||||||
0:[f22<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:leaf=-1.01502
|
|
||||||
2:[f101<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=0.568838
|
|
||||||
4:leaf=-0.515293
|
|
||||||
booster[9]:
|
|
||||||
0:[f114<1.00001] yes=1,no=2,missing=2
|
|
||||||
1:[f60<1.00001] yes=3,no=4,missing=4
|
|
||||||
3:leaf=-0.609475
|
|
||||||
4:leaf=3.63443
|
|
||||||
2:[f28<1.00001] yes=5,no=6,missing=6
|
|
||||||
5:leaf=-0.734556
|
|
||||||
6:leaf=0.217203
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
# _*_ mode: Makefile; _*_
|
|
||||||
export CC = gcc
|
|
||||||
export CXX = g++
|
|
||||||
|
|
||||||
# expose these flags to R CMD SHLIB
|
|
||||||
PKG_CPPFLAGS = -O3 -Wno-unknown-pragmas -DXGBOOST_CUSTOMIZE_ERROR_ -fPIC $(SHLIB_OPENMP_CFLAGS)
|
|
||||||
PKG_LIBS = $(SHLIB_OPENMP_CFLAGS)
|
|
||||||
|
|
||||||
ifeq ($(no_omp),1)
|
|
||||||
PKG_CPPFLAGS += -DDISABLE_OPENMP
|
|
||||||
endif
|
|
||||||
|
|
||||||
CXXOBJ= xgboost_wrapper.o xgboost_io.o
|
|
||||||
OBJECTS= xgboost_R.o $(CXXOBJ)
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
all: $(SHLIB)
|
|
||||||
$(SHLIB): $(OBJECTS)
|
|
||||||
|
|
||||||
xgboost_wrapper.o: ../../wrapper/xgboost_wrapper.cpp
|
|
||||||
xgboost_io.o: ../../src/io/io.cpp
|
|
||||||
|
|
||||||
$(CXXOBJ) :
|
|
||||||
$(CXX) -c $(PKG_CPPFLAGS) -o $@ $(firstword $(filter %.cpp %.c, $^) )
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf *.so *.o *~ *.dll
|
|
||||||
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
# _*_ mode: Makefile; _*_
|
|
||||||
export CC = gcc
|
|
||||||
export CXX = g++
|
|
||||||
|
|
||||||
# expose these flags to R CMD SHLIB
|
|
||||||
PKG_CPPFLAGS = -O3 -Wno-unknown-pragmas -DXGBOOST_CUSTOMIZE_ERROR_ -fopenmp -fPIC $(SHLIB_OPENMP_CFLAGS)
|
|
||||||
PKG_LIBS = $(SHLIB_OPENMP_CFLAGS)
|
|
||||||
|
|
||||||
# add flag to build native code even in cross compiler
|
|
||||||
ifeq "$(WIN)" "64"
|
|
||||||
PKG_CPPFLAGS += -m64
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(no_omp),1)
|
|
||||||
PKG_CPPFLAGS += -DDISABLE_OPENMP
|
|
||||||
endif
|
|
||||||
|
|
||||||
CXXOBJ= xgboost_wrapper.o xgboost_io.o
|
|
||||||
OBJECTS= xgboost_R.o $(CXXOBJ)
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
all: $(SHLIB)
|
|
||||||
$(SHLIB): $(OBJECTS)
|
|
||||||
|
|
||||||
xgboost_wrapper.o: ../../wrapper/xgboost_wrapper.cpp
|
|
||||||
xgboost_io.o: ../../src/io/io.cpp
|
|
||||||
|
|
||||||
$(CXXOBJ) :
|
|
||||||
$(CXX) -c $(PKG_CPPFLAGS) -o $@ $(firstword $(filter %.cpp %.c, $^) )
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf *.so *.o *~ *.dll
|
|
||||||
@ -1,221 +0,0 @@
|
|||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
#include <utility>
|
|
||||||
#include <cstring>
|
|
||||||
#include "xgboost_R.h"
|
|
||||||
#include "../../wrapper/xgboost_wrapper.h"
|
|
||||||
#include "../../src/utils/utils.h"
|
|
||||||
#include "../../src/utils/omp.h"
|
|
||||||
#include "../../src/utils/matrix_csr.h"
|
|
||||||
|
|
||||||
using namespace xgboost;
|
|
||||||
// implements error handling
|
|
||||||
namespace xgboost {
|
|
||||||
namespace utils {
|
|
||||||
void HandleAssertError(const char *msg) {
|
|
||||||
error("%s", msg);
|
|
||||||
}
|
|
||||||
void HandleCheckError(const char *msg) {
|
|
||||||
error("%s", msg);
|
|
||||||
}
|
|
||||||
} // namespace utils
|
|
||||||
} // namespace xgboost
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
void _DMatrixFinalizer(SEXP ext) {
|
|
||||||
if (R_ExternalPtrAddr(ext) == NULL) return;
|
|
||||||
XGDMatrixFree(R_ExternalPtrAddr(ext));
|
|
||||||
R_ClearExternalPtr(ext);
|
|
||||||
}
|
|
||||||
SEXP XGDMatrixCreateFromFile_R(SEXP fname, SEXP silent) {
|
|
||||||
void *handle = XGDMatrixCreateFromFile(CHAR(asChar(fname)), asInteger(silent));
|
|
||||||
SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
|
|
||||||
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
SEXP XGDMatrixCreateFromMat_R(SEXP mat,
|
|
||||||
SEXP missing) {
|
|
||||||
SEXP dim = getAttrib(mat, R_DimSymbol);
|
|
||||||
int nrow = INTEGER(dim)[0];
|
|
||||||
int ncol = INTEGER(dim)[1];
|
|
||||||
double *din = REAL(mat);
|
|
||||||
std::vector<float> data(nrow * ncol);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int i = 0; i < nrow; ++i) {
|
|
||||||
for (int j = 0; j < ncol; ++j) {
|
|
||||||
data[i * ncol +j] = din[i + nrow * j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void *handle = XGDMatrixCreateFromMat(&data[0], nrow, ncol, asReal(missing));
|
|
||||||
SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
|
|
||||||
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
SEXP XGDMatrixCreateFromCSC_R(SEXP indptr,
|
|
||||||
SEXP indices,
|
|
||||||
SEXP data) {
|
|
||||||
const int *col_ptr = INTEGER(indptr);
|
|
||||||
const int *row_index = INTEGER(indices);
|
|
||||||
const double *col_data = REAL(data);
|
|
||||||
int ncol = length(indptr) - 1;
|
|
||||||
int ndata = length(data);
|
|
||||||
// transform into CSR format
|
|
||||||
std::vector<bst_ulong> row_ptr;
|
|
||||||
std::vector< std::pair<unsigned, float> > csr_data;
|
|
||||||
utils::SparseCSRMBuilder<std::pair<unsigned,float>, false, bst_ulong> builder(row_ptr, csr_data);
|
|
||||||
builder.InitBudget();
|
|
||||||
for (int i = 0; i < ncol; ++i) {
|
|
||||||
for (int j = col_ptr[i]; j < col_ptr[i+1]; ++j) {
|
|
||||||
builder.AddBudget(row_index[j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
builder.InitStorage();
|
|
||||||
for (int i = 0; i < ncol; ++i) {
|
|
||||||
for (int j = col_ptr[i]; j < col_ptr[i+1]; ++j) {
|
|
||||||
builder.PushElem(row_index[j], std::make_pair(i, col_data[j]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
utils::Assert(csr_data.size() == static_cast<size_t>(ndata), "BUG CreateFromCSC");
|
|
||||||
std::vector<float> row_data(ndata);
|
|
||||||
std::vector<unsigned> col_index(ndata);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int i = 0; i < ndata; ++i) {
|
|
||||||
col_index[i] = csr_data[i].first;
|
|
||||||
row_data[i] = csr_data[i].second;
|
|
||||||
}
|
|
||||||
void *handle = XGDMatrixCreateFromCSR(&row_ptr[0], &col_index[0], &row_data[0], row_ptr.size(), ndata );
|
|
||||||
SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
|
|
||||||
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
void XGDMatrixSaveBinary_R(SEXP handle, SEXP fname, SEXP silent) {
|
|
||||||
XGDMatrixSaveBinary(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(fname)), asInteger(silent));
|
|
||||||
}
|
|
||||||
void XGDMatrixSetInfo_R(SEXP handle, SEXP field, SEXP array) {
|
|
||||||
int len = length(array);
|
|
||||||
const char *name = CHAR(asChar(field));
|
|
||||||
if (!strcmp("group", name)) {
|
|
||||||
std::vector<unsigned> vec(len);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
vec[i] = static_cast<unsigned>(INTEGER(array)[i]);
|
|
||||||
}
|
|
||||||
XGDMatrixSetGroup(R_ExternalPtrAddr(handle), &vec[0], len);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
std::vector<float> vec(len);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
vec[i] = REAL(array)[i];
|
|
||||||
}
|
|
||||||
XGDMatrixSetFloatInfo(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(field)),
|
|
||||||
&vec[0], len);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SEXP XGDMatrixGetInfo_R(SEXP handle, SEXP field) {
|
|
||||||
bst_ulong olen;
|
|
||||||
const float *res = XGDMatrixGetFloatInfo(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(field)), &olen);
|
|
||||||
SEXP ret = PROTECT(allocVector(REALSXP, olen));
|
|
||||||
for (size_t i = 0; i < olen; ++i) {
|
|
||||||
REAL(ret)[i] = res[i];
|
|
||||||
}
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
// functions related to booster
|
|
||||||
void _BoosterFinalizer(SEXP ext) {
|
|
||||||
if (R_ExternalPtrAddr(ext) == NULL) return;
|
|
||||||
XGBoosterFree(R_ExternalPtrAddr(ext));
|
|
||||||
R_ClearExternalPtr(ext);
|
|
||||||
}
|
|
||||||
SEXP XGBoosterCreate_R(SEXP dmats) {
|
|
||||||
int len = length(dmats);
|
|
||||||
std::vector<void*> dvec;
|
|
||||||
for (int i = 0; i < len; ++i){
|
|
||||||
dvec.push_back(R_ExternalPtrAddr(VECTOR_ELT(dmats, i)));
|
|
||||||
}
|
|
||||||
void *handle = XGBoosterCreate(&dvec[0], dvec.size());
|
|
||||||
SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
|
|
||||||
R_RegisterCFinalizerEx(ret, _BoosterFinalizer, TRUE);
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
void XGBoosterSetParam_R(SEXP handle, SEXP name, SEXP val) {
|
|
||||||
XGBoosterSetParam(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(name)),
|
|
||||||
CHAR(asChar(val)));
|
|
||||||
}
|
|
||||||
void XGBoosterUpdateOneIter_R(SEXP handle, SEXP iter, SEXP dtrain) {
|
|
||||||
XGBoosterUpdateOneIter(R_ExternalPtrAddr(handle),
|
|
||||||
asInteger(iter),
|
|
||||||
R_ExternalPtrAddr(dtrain));
|
|
||||||
}
|
|
||||||
void XGBoosterBoostOneIter_R(SEXP handle, SEXP dtrain, SEXP grad, SEXP hess) {
|
|
||||||
utils::Check(length(grad) == length(hess), "gradient and hess must have same length");
|
|
||||||
int len = length(grad);
|
|
||||||
std::vector<float> tgrad(len), thess(len);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int j = 0; j < len; ++j) {
|
|
||||||
tgrad[j] = REAL(grad)[j];
|
|
||||||
thess[j] = REAL(hess)[j];
|
|
||||||
}
|
|
||||||
XGBoosterBoostOneIter(R_ExternalPtrAddr(handle),
|
|
||||||
R_ExternalPtrAddr(dtrain),
|
|
||||||
&tgrad[0], &thess[0], len);
|
|
||||||
}
|
|
||||||
SEXP XGBoosterEvalOneIter_R(SEXP handle, SEXP iter, SEXP dmats, SEXP evnames) {
|
|
||||||
utils::Check(length(dmats) == length(evnames), "dmats and evnams must have same length");
|
|
||||||
int len = length(dmats);
|
|
||||||
std::vector<void*> vec_dmats;
|
|
||||||
std::vector<std::string> vec_names;
|
|
||||||
std::vector<const char*> vec_sptr;
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
vec_dmats.push_back(R_ExternalPtrAddr(VECTOR_ELT(dmats, i)));
|
|
||||||
vec_names.push_back(std::string(CHAR(asChar(VECTOR_ELT(evnames, i)))));
|
|
||||||
}
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
vec_sptr.push_back(vec_names[i].c_str());
|
|
||||||
}
|
|
||||||
return mkString(XGBoosterEvalOneIter(R_ExternalPtrAddr(handle),
|
|
||||||
asInteger(iter),
|
|
||||||
&vec_dmats[0], &vec_sptr[0], len));
|
|
||||||
}
|
|
||||||
SEXP XGBoosterPredict_R(SEXP handle, SEXP dmat, SEXP output_margin) {
|
|
||||||
bst_ulong olen;
|
|
||||||
const float *res = XGBoosterPredict(R_ExternalPtrAddr(handle),
|
|
||||||
R_ExternalPtrAddr(dmat),
|
|
||||||
asInteger(output_margin),
|
|
||||||
&olen);
|
|
||||||
SEXP ret = PROTECT(allocVector(REALSXP, olen));
|
|
||||||
for (size_t i = 0; i < olen; ++i) {
|
|
||||||
REAL(ret)[i] = res[i];
|
|
||||||
}
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
void XGBoosterLoadModel_R(SEXP handle, SEXP fname) {
|
|
||||||
XGBoosterLoadModel(R_ExternalPtrAddr(handle), CHAR(asChar(fname)));
|
|
||||||
}
|
|
||||||
void XGBoosterSaveModel_R(SEXP handle, SEXP fname) {
|
|
||||||
XGBoosterSaveModel(R_ExternalPtrAddr(handle), CHAR(asChar(fname)));
|
|
||||||
}
|
|
||||||
void XGBoosterDumpModel_R(SEXP handle, SEXP fname, SEXP fmap) {
|
|
||||||
bst_ulong olen;
|
|
||||||
const char **res = XGBoosterDumpModel(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(fmap)),
|
|
||||||
&olen);
|
|
||||||
FILE *fo = utils::FopenCheck(CHAR(asChar(fname)), "w");
|
|
||||||
for (size_t i = 0; i < olen; ++i) {
|
|
||||||
fprintf(fo, "booster[%u]:\n", static_cast<unsigned>(i));
|
|
||||||
fprintf(fo, "%s", res[i]);
|
|
||||||
}
|
|
||||||
fclose(fo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,124 +0,0 @@
|
|||||||
#ifndef XGBOOST_WRAPPER_R_H_
|
|
||||||
#define XGBOOST_WRAPPER_R_H_
|
|
||||||
/*!
|
|
||||||
* \file xgboost_wrapper_R.h
|
|
||||||
* \author Tianqi Chen
|
|
||||||
* \brief R wrapper of xgboost
|
|
||||||
*/
|
|
||||||
extern "C" {
|
|
||||||
#include <Rinternals.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
/*!
|
|
||||||
* \brief load a data matrix
|
|
||||||
* \param fname name of the content
|
|
||||||
* \param silent whether print messages
|
|
||||||
* \return a loaded data matrix
|
|
||||||
*/
|
|
||||||
SEXP XGDMatrixCreateFromFile_R(SEXP fname, SEXP silent);
|
|
||||||
/*!
|
|
||||||
* \brief create matrix content from dense matrix
|
|
||||||
* This assumes the matrix is stored in column major format
|
|
||||||
* \param data R Matrix object
|
|
||||||
* \param missing which value to represent missing value
|
|
||||||
* \return created dmatrix
|
|
||||||
*/
|
|
||||||
SEXP XGDMatrixCreateFromMat_R(SEXP mat,
|
|
||||||
SEXP missing);
|
|
||||||
/*!
|
|
||||||
* \brief create a matrix content from CSC format
|
|
||||||
* \param indptr pointer to column headers
|
|
||||||
* \param indices row indices
|
|
||||||
* \param data content of the data
|
|
||||||
* \return created dmatrix
|
|
||||||
*/
|
|
||||||
SEXP XGDMatrixCreateFromCSC_R(SEXP indptr,
|
|
||||||
SEXP indices,
|
|
||||||
SEXP data);
|
|
||||||
/*!
|
|
||||||
* \brief load a data matrix into binary file
|
|
||||||
* \param handle a instance of data matrix
|
|
||||||
* \param fname file name
|
|
||||||
* \param silent print statistics when saving
|
|
||||||
*/
|
|
||||||
void XGDMatrixSaveBinary_R(SEXP handle, SEXP fname, SEXP silent);
|
|
||||||
/*!
|
|
||||||
* \brief set information to dmatrix
|
|
||||||
* \param handle a instance of data matrix
|
|
||||||
* \param field field name, can be label, weight
|
|
||||||
* \param array pointer to float vector
|
|
||||||
*/
|
|
||||||
void XGDMatrixSetInfo_R(SEXP handle, SEXP field, SEXP array);
|
|
||||||
/*!
|
|
||||||
* \brief get info vector from matrix
|
|
||||||
* \param handle a instance of data matrix
|
|
||||||
* \param field field name
|
|
||||||
* \return info vector
|
|
||||||
*/
|
|
||||||
SEXP XGDMatrixGetInfo_R(SEXP handle, SEXP field);
|
|
||||||
/*!
|
|
||||||
* \brief create xgboost learner
|
|
||||||
* \param dmats a list of dmatrix handles that will be cached
|
|
||||||
*/
|
|
||||||
SEXP XGBoosterCreate_R(SEXP dmats);
|
|
||||||
/*!
|
|
||||||
* \brief set parameters
|
|
||||||
* \param handle handle
|
|
||||||
* \param name parameter name
|
|
||||||
* \param val value of parameter
|
|
||||||
*/
|
|
||||||
void XGBoosterSetParam_R(SEXP handle, SEXP name, SEXP val);
|
|
||||||
/*!
|
|
||||||
* \brief update the model in one round using dtrain
|
|
||||||
* \param handle handle
|
|
||||||
* \param iter current iteration rounds
|
|
||||||
* \param dtrain training data
|
|
||||||
*/
|
|
||||||
void XGBoosterUpdateOneIter_R(SEXP ext, SEXP iter, SEXP dtrain);
|
|
||||||
/*!
|
|
||||||
* \brief update the model, by directly specify gradient and second order gradient,
|
|
||||||
* this can be used to replace UpdateOneIter, to support customized loss function
|
|
||||||
* \param handle handle
|
|
||||||
* \param dtrain training data
|
|
||||||
* \param grad gradient statistics
|
|
||||||
* \param hess second order gradient statistics
|
|
||||||
*/
|
|
||||||
void XGBoosterBoostOneIter_R(SEXP handle, SEXP dtrain, SEXP grad, SEXP hess);
|
|
||||||
/*!
|
|
||||||
* \brief get evaluation statistics for xgboost
|
|
||||||
* \param handle handle
|
|
||||||
* \param iter current iteration rounds
|
|
||||||
* \param dmats list of handles to dmatrices
|
|
||||||
* \param evname name of evaluation
|
|
||||||
* \return the string containing evaluation stati
|
|
||||||
*/
|
|
||||||
SEXP XGBoosterEvalOneIter_R(SEXP handle, SEXP iter, SEXP dmats, SEXP evnames);
|
|
||||||
/*!
|
|
||||||
* \brief make prediction based on dmat
|
|
||||||
* \param handle handle
|
|
||||||
* \param dmat data matrix
|
|
||||||
* \param output_margin whether only output raw margin value
|
|
||||||
*/
|
|
||||||
SEXP XGBoosterPredict_R(SEXP handle, SEXP dmat, SEXP output_margin);
|
|
||||||
/*!
|
|
||||||
* \brief load model from existing file
|
|
||||||
* \param handle handle
|
|
||||||
* \param fname file name
|
|
||||||
*/
|
|
||||||
void XGBoosterLoadModel_R(SEXP handle, SEXP fname);
|
|
||||||
/*!
|
|
||||||
* \brief save model into existing file
|
|
||||||
* \param handle handle
|
|
||||||
* \param fname file name
|
|
||||||
*/
|
|
||||||
void XGBoosterSaveModel_R(SEXP handle, SEXP fname);
|
|
||||||
/*!
|
|
||||||
* \brief dump model into text file
|
|
||||||
* \param handle handle
|
|
||||||
* \param fname file name of model that can be dumped into
|
|
||||||
* \param fmap name to fmap can be empty string
|
|
||||||
*/
|
|
||||||
void XGBoosterDumpModel_R(SEXP handle, SEXP fname, SEXP fmap);
|
|
||||||
};
|
|
||||||
#endif // XGBOOST_WRAPPER_R_H_
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
# _*_ mode: Makefile; _*_
|
|
||||||
export CC = gcc
|
|
||||||
export CXX = g++
|
|
||||||
|
|
||||||
# expose these flags to R CMD SHLIB
|
|
||||||
PKG_CPPFLAGS = -O3 -Wno-unknown-pragmas -DXGBOOST_CUSTOMIZE_ERROR_ -fPIC $(SHLIB_OPENMP_CFLAGS)
|
|
||||||
PKG_LIBS = $(SHLIB_OPENMP_CFLAGS)
|
|
||||||
|
|
||||||
ifeq ($(no_omp),1)
|
|
||||||
PKG_CPPFLAGS += -DDISABLE_OPENMP
|
|
||||||
endif
|
|
||||||
|
|
||||||
CXXOBJ= xgboost_wrapper.o xgboost_io.o
|
|
||||||
OBJECTS= xgboost_R.o $(CXXOBJ)
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
all: $(SHLIB)
|
|
||||||
$(SHLIB): $(OBJECTS)
|
|
||||||
|
|
||||||
xgboost_wrapper.o: ../../wrapper/xgboost_wrapper.cpp
|
|
||||||
xgboost_io.o: ../../src/io/io.cpp
|
|
||||||
|
|
||||||
$(CXXOBJ) :
|
|
||||||
$(CXX) -c $(PKG_CPPFLAGS) -o $@ $(firstword $(filter %.cpp %.c, $^) )
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf *.so *.o *~ *.dll
|
|
||||||
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
# _*_ mode: Makefile; _*_
|
|
||||||
export CC = gcc
|
|
||||||
export CXX = g++
|
|
||||||
|
|
||||||
# expose these flags to R CMD SHLIB
|
|
||||||
PKG_CPPFLAGS = -O3 -Wno-unknown-pragmas -DXGBOOST_CUSTOMIZE_ERROR_ -fopenmp -fPIC $(SHLIB_OPENMP_CFLAGS)
|
|
||||||
PKG_LIBS = $(SHLIB_OPENMP_CFLAGS)
|
|
||||||
|
|
||||||
# add flag to build native code even in cross compiler
|
|
||||||
ifeq "$(WIN)" "64"
|
|
||||||
PKG_CPPFLAGS += -m64
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(no_omp),1)
|
|
||||||
PKG_CPPFLAGS += -DDISABLE_OPENMP
|
|
||||||
endif
|
|
||||||
|
|
||||||
CXXOBJ= xgboost_wrapper.o xgboost_io.o
|
|
||||||
OBJECTS= xgboost_R.o $(CXXOBJ)
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
all: $(SHLIB)
|
|
||||||
$(SHLIB): $(OBJECTS)
|
|
||||||
|
|
||||||
xgboost_wrapper.o: ../../wrapper/xgboost_wrapper.cpp
|
|
||||||
xgboost_io.o: ../../src/io/io.cpp
|
|
||||||
|
|
||||||
$(CXXOBJ) :
|
|
||||||
$(CXX) -c $(PKG_CPPFLAGS) -o $@ $(firstword $(filter %.cpp %.c, $^) )
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf *.so *.o *~ *.dll
|
|
||||||
@ -1,221 +0,0 @@
|
|||||||
#include <vector>
|
|
||||||
#include <string>
|
|
||||||
#include <utility>
|
|
||||||
#include <cstring>
|
|
||||||
#include "xgboost_R.h"
|
|
||||||
#include "../../wrapper/xgboost_wrapper.h"
|
|
||||||
#include "../../src/utils/utils.h"
|
|
||||||
#include "../../src/utils/omp.h"
|
|
||||||
#include "../../src/utils/matrix_csr.h"
|
|
||||||
|
|
||||||
using namespace xgboost;
|
|
||||||
// implements error handling
|
|
||||||
namespace xgboost {
|
|
||||||
namespace utils {
|
|
||||||
void HandleAssertError(const char *msg) {
|
|
||||||
error("%s", msg);
|
|
||||||
}
|
|
||||||
void HandleCheckError(const char *msg) {
|
|
||||||
error("%s", msg);
|
|
||||||
}
|
|
||||||
} // namespace utils
|
|
||||||
} // namespace xgboost
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
void _DMatrixFinalizer(SEXP ext) {
|
|
||||||
if (R_ExternalPtrAddr(ext) == NULL) return;
|
|
||||||
XGDMatrixFree(R_ExternalPtrAddr(ext));
|
|
||||||
R_ClearExternalPtr(ext);
|
|
||||||
}
|
|
||||||
SEXP XGDMatrixCreateFromFile_R(SEXP fname, SEXP silent) {
|
|
||||||
void *handle = XGDMatrixCreateFromFile(CHAR(asChar(fname)), asInteger(silent));
|
|
||||||
SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
|
|
||||||
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
SEXP XGDMatrixCreateFromMat_R(SEXP mat,
|
|
||||||
SEXP missing) {
|
|
||||||
SEXP dim = getAttrib(mat, R_DimSymbol);
|
|
||||||
int nrow = INTEGER(dim)[0];
|
|
||||||
int ncol = INTEGER(dim)[1];
|
|
||||||
double *din = REAL(mat);
|
|
||||||
std::vector<float> data(nrow * ncol);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int i = 0; i < nrow; ++i) {
|
|
||||||
for (int j = 0; j < ncol; ++j) {
|
|
||||||
data[i * ncol +j] = din[i + nrow * j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void *handle = XGDMatrixCreateFromMat(&data[0], nrow, ncol, asReal(missing));
|
|
||||||
SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
|
|
||||||
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
SEXP XGDMatrixCreateFromCSC_R(SEXP indptr,
|
|
||||||
SEXP indices,
|
|
||||||
SEXP data) {
|
|
||||||
const int *col_ptr = INTEGER(indptr);
|
|
||||||
const int *row_index = INTEGER(indices);
|
|
||||||
const double *col_data = REAL(data);
|
|
||||||
int ncol = length(indptr) - 1;
|
|
||||||
int ndata = length(data);
|
|
||||||
// transform into CSR format
|
|
||||||
std::vector<bst_ulong> row_ptr;
|
|
||||||
std::vector< std::pair<unsigned, float> > csr_data;
|
|
||||||
utils::SparseCSRMBuilder<std::pair<unsigned,float>, false, bst_ulong> builder(row_ptr, csr_data);
|
|
||||||
builder.InitBudget();
|
|
||||||
for (int i = 0; i < ncol; ++i) {
|
|
||||||
for (int j = col_ptr[i]; j < col_ptr[i+1]; ++j) {
|
|
||||||
builder.AddBudget(row_index[j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
builder.InitStorage();
|
|
||||||
for (int i = 0; i < ncol; ++i) {
|
|
||||||
for (int j = col_ptr[i]; j < col_ptr[i+1]; ++j) {
|
|
||||||
builder.PushElem(row_index[j], std::make_pair(i, col_data[j]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
utils::Assert(csr_data.size() == static_cast<size_t>(ndata), "BUG CreateFromCSC");
|
|
||||||
std::vector<float> row_data(ndata);
|
|
||||||
std::vector<unsigned> col_index(ndata);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int i = 0; i < ndata; ++i) {
|
|
||||||
col_index[i] = csr_data[i].first;
|
|
||||||
row_data[i] = csr_data[i].second;
|
|
||||||
}
|
|
||||||
void *handle = XGDMatrixCreateFromCSR(&row_ptr[0], &col_index[0], &row_data[0], row_ptr.size(), ndata );
|
|
||||||
SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
|
|
||||||
R_RegisterCFinalizerEx(ret, _DMatrixFinalizer, TRUE);
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
void XGDMatrixSaveBinary_R(SEXP handle, SEXP fname, SEXP silent) {
|
|
||||||
XGDMatrixSaveBinary(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(fname)), asInteger(silent));
|
|
||||||
}
|
|
||||||
void XGDMatrixSetInfo_R(SEXP handle, SEXP field, SEXP array) {
|
|
||||||
int len = length(array);
|
|
||||||
const char *name = CHAR(asChar(field));
|
|
||||||
if (!strcmp("group", name)) {
|
|
||||||
std::vector<unsigned> vec(len);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
vec[i] = static_cast<unsigned>(INTEGER(array)[i]);
|
|
||||||
}
|
|
||||||
XGDMatrixSetGroup(R_ExternalPtrAddr(handle), &vec[0], len);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
std::vector<float> vec(len);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
vec[i] = REAL(array)[i];
|
|
||||||
}
|
|
||||||
XGDMatrixSetFloatInfo(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(field)),
|
|
||||||
&vec[0], len);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SEXP XGDMatrixGetInfo_R(SEXP handle, SEXP field) {
|
|
||||||
bst_ulong olen;
|
|
||||||
const float *res = XGDMatrixGetFloatInfo(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(field)), &olen);
|
|
||||||
SEXP ret = PROTECT(allocVector(REALSXP, olen));
|
|
||||||
for (size_t i = 0; i < olen; ++i) {
|
|
||||||
REAL(ret)[i] = res[i];
|
|
||||||
}
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
// functions related to booster
|
|
||||||
void _BoosterFinalizer(SEXP ext) {
|
|
||||||
if (R_ExternalPtrAddr(ext) == NULL) return;
|
|
||||||
XGBoosterFree(R_ExternalPtrAddr(ext));
|
|
||||||
R_ClearExternalPtr(ext);
|
|
||||||
}
|
|
||||||
SEXP XGBoosterCreate_R(SEXP dmats) {
|
|
||||||
int len = length(dmats);
|
|
||||||
std::vector<void*> dvec;
|
|
||||||
for (int i = 0; i < len; ++i){
|
|
||||||
dvec.push_back(R_ExternalPtrAddr(VECTOR_ELT(dmats, i)));
|
|
||||||
}
|
|
||||||
void *handle = XGBoosterCreate(&dvec[0], dvec.size());
|
|
||||||
SEXP ret = PROTECT(R_MakeExternalPtr(handle, R_NilValue, R_NilValue));
|
|
||||||
R_RegisterCFinalizerEx(ret, _BoosterFinalizer, TRUE);
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
void XGBoosterSetParam_R(SEXP handle, SEXP name, SEXP val) {
|
|
||||||
XGBoosterSetParam(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(name)),
|
|
||||||
CHAR(asChar(val)));
|
|
||||||
}
|
|
||||||
void XGBoosterUpdateOneIter_R(SEXP handle, SEXP iter, SEXP dtrain) {
|
|
||||||
XGBoosterUpdateOneIter(R_ExternalPtrAddr(handle),
|
|
||||||
asInteger(iter),
|
|
||||||
R_ExternalPtrAddr(dtrain));
|
|
||||||
}
|
|
||||||
void XGBoosterBoostOneIter_R(SEXP handle, SEXP dtrain, SEXP grad, SEXP hess) {
|
|
||||||
utils::Check(length(grad) == length(hess), "gradient and hess must have same length");
|
|
||||||
int len = length(grad);
|
|
||||||
std::vector<float> tgrad(len), thess(len);
|
|
||||||
#pragma omp parallel for schedule(static)
|
|
||||||
for (int j = 0; j < len; ++j) {
|
|
||||||
tgrad[j] = REAL(grad)[j];
|
|
||||||
thess[j] = REAL(hess)[j];
|
|
||||||
}
|
|
||||||
XGBoosterBoostOneIter(R_ExternalPtrAddr(handle),
|
|
||||||
R_ExternalPtrAddr(dtrain),
|
|
||||||
&tgrad[0], &thess[0], len);
|
|
||||||
}
|
|
||||||
SEXP XGBoosterEvalOneIter_R(SEXP handle, SEXP iter, SEXP dmats, SEXP evnames) {
|
|
||||||
utils::Check(length(dmats) == length(evnames), "dmats and evnams must have same length");
|
|
||||||
int len = length(dmats);
|
|
||||||
std::vector<void*> vec_dmats;
|
|
||||||
std::vector<std::string> vec_names;
|
|
||||||
std::vector<const char*> vec_sptr;
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
vec_dmats.push_back(R_ExternalPtrAddr(VECTOR_ELT(dmats, i)));
|
|
||||||
vec_names.push_back(std::string(CHAR(asChar(VECTOR_ELT(evnames, i)))));
|
|
||||||
}
|
|
||||||
for (int i = 0; i < len; ++i) {
|
|
||||||
vec_sptr.push_back(vec_names[i].c_str());
|
|
||||||
}
|
|
||||||
return mkString(XGBoosterEvalOneIter(R_ExternalPtrAddr(handle),
|
|
||||||
asInteger(iter),
|
|
||||||
&vec_dmats[0], &vec_sptr[0], len));
|
|
||||||
}
|
|
||||||
SEXP XGBoosterPredict_R(SEXP handle, SEXP dmat, SEXP output_margin) {
|
|
||||||
bst_ulong olen;
|
|
||||||
const float *res = XGBoosterPredict(R_ExternalPtrAddr(handle),
|
|
||||||
R_ExternalPtrAddr(dmat),
|
|
||||||
asInteger(output_margin),
|
|
||||||
&olen);
|
|
||||||
SEXP ret = PROTECT(allocVector(REALSXP, olen));
|
|
||||||
for (size_t i = 0; i < olen; ++i) {
|
|
||||||
REAL(ret)[i] = res[i];
|
|
||||||
}
|
|
||||||
UNPROTECT(1);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
void XGBoosterLoadModel_R(SEXP handle, SEXP fname) {
|
|
||||||
XGBoosterLoadModel(R_ExternalPtrAddr(handle), CHAR(asChar(fname)));
|
|
||||||
}
|
|
||||||
void XGBoosterSaveModel_R(SEXP handle, SEXP fname) {
|
|
||||||
XGBoosterSaveModel(R_ExternalPtrAddr(handle), CHAR(asChar(fname)));
|
|
||||||
}
|
|
||||||
void XGBoosterDumpModel_R(SEXP handle, SEXP fname, SEXP fmap) {
|
|
||||||
bst_ulong olen;
|
|
||||||
const char **res = XGBoosterDumpModel(R_ExternalPtrAddr(handle),
|
|
||||||
CHAR(asChar(fmap)),
|
|
||||||
&olen);
|
|
||||||
FILE *fo = utils::FopenCheck(CHAR(asChar(fname)), "w");
|
|
||||||
for (size_t i = 0; i < olen; ++i) {
|
|
||||||
fprintf(fo, "booster[%u]:\n", static_cast<unsigned>(i));
|
|
||||||
fprintf(fo, "%s", res[i]);
|
|
||||||
}
|
|
||||||
fclose(fo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,124 +0,0 @@
|
|||||||
#ifndef XGBOOST_WRAPPER_R_H_
|
|
||||||
#define XGBOOST_WRAPPER_R_H_
|
|
||||||
/*!
|
|
||||||
* \file xgboost_wrapper_R.h
|
|
||||||
* \author Tianqi Chen
|
|
||||||
* \brief R wrapper of xgboost
|
|
||||||
*/
|
|
||||||
extern "C" {
|
|
||||||
#include <Rinternals.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
/*!
|
|
||||||
* \brief load a data matrix
|
|
||||||
* \param fname name of the content
|
|
||||||
* \param silent whether print messages
|
|
||||||
* \return a loaded data matrix
|
|
||||||
*/
|
|
||||||
SEXP XGDMatrixCreateFromFile_R(SEXP fname, SEXP silent);
|
|
||||||
/*!
|
|
||||||
* \brief create matrix content from dense matrix
|
|
||||||
* This assumes the matrix is stored in column major format
|
|
||||||
* \param data R Matrix object
|
|
||||||
* \param missing which value to represent missing value
|
|
||||||
* \return created dmatrix
|
|
||||||
*/
|
|
||||||
SEXP XGDMatrixCreateFromMat_R(SEXP mat,
|
|
||||||
SEXP missing);
|
|
||||||
/*!
|
|
||||||
* \brief create a matrix content from CSC format
|
|
||||||
* \param indptr pointer to column headers
|
|
||||||
* \param indices row indices
|
|
||||||
* \param data content of the data
|
|
||||||
* \return created dmatrix
|
|
||||||
*/
|
|
||||||
SEXP XGDMatrixCreateFromCSC_R(SEXP indptr,
|
|
||||||
SEXP indices,
|
|
||||||
SEXP data);
|
|
||||||
/*!
|
|
||||||
* \brief load a data matrix into binary file
|
|
||||||
* \param handle a instance of data matrix
|
|
||||||
* \param fname file name
|
|
||||||
* \param silent print statistics when saving
|
|
||||||
*/
|
|
||||||
void XGDMatrixSaveBinary_R(SEXP handle, SEXP fname, SEXP silent);
|
|
||||||
/*!
|
|
||||||
* \brief set information to dmatrix
|
|
||||||
* \param handle a instance of data matrix
|
|
||||||
* \param field field name, can be label, weight
|
|
||||||
* \param array pointer to float vector
|
|
||||||
*/
|
|
||||||
void XGDMatrixSetInfo_R(SEXP handle, SEXP field, SEXP array);
|
|
||||||
/*!
|
|
||||||
* \brief get info vector from matrix
|
|
||||||
* \param handle a instance of data matrix
|
|
||||||
* \param field field name
|
|
||||||
* \return info vector
|
|
||||||
*/
|
|
||||||
SEXP XGDMatrixGetInfo_R(SEXP handle, SEXP field);
|
|
||||||
/*!
|
|
||||||
* \brief create xgboost learner
|
|
||||||
* \param dmats a list of dmatrix handles that will be cached
|
|
||||||
*/
|
|
||||||
SEXP XGBoosterCreate_R(SEXP dmats);
|
|
||||||
/*!
|
|
||||||
* \brief set parameters
|
|
||||||
* \param handle handle
|
|
||||||
* \param name parameter name
|
|
||||||
* \param val value of parameter
|
|
||||||
*/
|
|
||||||
void XGBoosterSetParam_R(SEXP handle, SEXP name, SEXP val);
|
|
||||||
/*!
|
|
||||||
* \brief update the model in one round using dtrain
|
|
||||||
* \param handle handle
|
|
||||||
* \param iter current iteration rounds
|
|
||||||
* \param dtrain training data
|
|
||||||
*/
|
|
||||||
void XGBoosterUpdateOneIter_R(SEXP ext, SEXP iter, SEXP dtrain);
|
|
||||||
/*!
|
|
||||||
* \brief update the model, by directly specify gradient and second order gradient,
|
|
||||||
* this can be used to replace UpdateOneIter, to support customized loss function
|
|
||||||
* \param handle handle
|
|
||||||
* \param dtrain training data
|
|
||||||
* \param grad gradient statistics
|
|
||||||
* \param hess second order gradient statistics
|
|
||||||
*/
|
|
||||||
void XGBoosterBoostOneIter_R(SEXP handle, SEXP dtrain, SEXP grad, SEXP hess);
|
|
||||||
/*!
|
|
||||||
* \brief get evaluation statistics for xgboost
|
|
||||||
* \param handle handle
|
|
||||||
* \param iter current iteration rounds
|
|
||||||
* \param dmats list of handles to dmatrices
|
|
||||||
* \param evname name of evaluation
|
|
||||||
* \return the string containing evaluation stati
|
|
||||||
*/
|
|
||||||
SEXP XGBoosterEvalOneIter_R(SEXP handle, SEXP iter, SEXP dmats, SEXP evnames);
|
|
||||||
/*!
|
|
||||||
* \brief make prediction based on dmat
|
|
||||||
* \param handle handle
|
|
||||||
* \param dmat data matrix
|
|
||||||
* \param output_margin whether only output raw margin value
|
|
||||||
*/
|
|
||||||
SEXP XGBoosterPredict_R(SEXP handle, SEXP dmat, SEXP output_margin);
|
|
||||||
/*!
|
|
||||||
* \brief load model from existing file
|
|
||||||
* \param handle handle
|
|
||||||
* \param fname file name
|
|
||||||
*/
|
|
||||||
void XGBoosterLoadModel_R(SEXP handle, SEXP fname);
|
|
||||||
/*!
|
|
||||||
* \brief save model into existing file
|
|
||||||
* \param handle handle
|
|
||||||
* \param fname file name
|
|
||||||
*/
|
|
||||||
void XGBoosterSaveModel_R(SEXP handle, SEXP fname);
|
|
||||||
/*!
|
|
||||||
* \brief dump model into text file
|
|
||||||
* \param handle handle
|
|
||||||
* \param fname file name of model that can be dumped into
|
|
||||||
* \param fmap name to fmap can be empty string
|
|
||||||
*/
|
|
||||||
void XGBoosterDumpModel_R(SEXP handle, SEXP fname, SEXP fmap);
|
|
||||||
};
|
|
||||||
#endif // XGBOOST_WRAPPER_R_H_
|
|
||||||
Loading…
x
Reference in New Issue
Block a user