Commit 2035c54b authored by Kirill Sevastyanenko's avatar Kirill Sevastyanenko Committed by Guolin Ke
Browse files

Stylistic changes r package (#184)

* src & callbacks

* lgb.Booster and utils

* cv

* wip lgb.Dataset

* lgb.Dataset

* lgb.Predictor

* lgb.train

* typos

* add flags to facilitate macosx compilation

* fix basic_string template error with clang

* most unfortunate mode of development

* fixup tests

* last test

* roxygen

* roxygen v5.x.x
parent c2ba086c
......@@ -2,7 +2,7 @@
% Please edit documentation in R/lgb.Dataset.R
\name{lgb.Dataset.construct}
\alias{lgb.Dataset.construct}
\title{Construct Dataset explicit}
\title{Construct Dataset explicitly}
\usage{
lgb.Dataset.construct(dataset)
}
......@@ -10,12 +10,14 @@ lgb.Dataset.construct(dataset)
\item{dataset}{Object of class \code{lgb.Dataset}}
}
\description{
Construct Dataset explicit
Construct Dataset explicitly
}
\examples{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
lgb.Dataset.construct(dtrain)
\dontrun{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
lgb.Dataset.construct(dtrain)
}
}
......@@ -2,7 +2,7 @@
% Please edit documentation in R/lgb.Dataset.R
\name{lgb.Dataset.create.valid}
\alias{lgb.Dataset.create.valid}
\title{Contruct a validation data}
\title{Contruct validation data}
\usage{
lgb.Dataset.create.valid(dataset, data, info = list(), ...)
}
......@@ -19,14 +19,16 @@ lgb.Dataset.create.valid(dataset, data, info = list(), ...)
constructed dataset
}
\description{
Contruct a validation data according to training data
Contruct validation data according to training data
}
\examples{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
\dontrun{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
}
}
......@@ -2,7 +2,7 @@
% Please edit documentation in R/lgb.Dataset.R
\name{lgb.Dataset.save}
\alias{lgb.Dataset.save}
\title{save \code{lgb.Dataset} to binary file}
\title{Save \code{lgb.Dataset} to a binary file}
\usage{
lgb.Dataset.save(dataset, fname)
}
......@@ -15,12 +15,14 @@ lgb.Dataset.save(dataset, fname)
passed dataset
}
\description{
save \code{lgb.Dataset} to binary file
Save \code{lgb.Dataset} to a binary file
}
\examples{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
lgb.Dataset.save(dtrain, "data.bin")
\dontrun{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
lgb.Dataset.save(dtrain, "data.bin")
}
}
......@@ -2,7 +2,7 @@
% Please edit documentation in R/lgb.Dataset.R
\name{lgb.Dataset.set.categorical}
\alias{lgb.Dataset.set.categorical}
\title{set categorical feature of \code{lgb.Dataset}}
\title{Set categorical feature of \code{lgb.Dataset}}
\usage{
lgb.Dataset.set.categorical(dataset, categorical_feature)
}
......@@ -15,14 +15,16 @@ lgb.Dataset.set.categorical(dataset, categorical_feature)
passed dataset
}
\description{
set categorical feature of \code{lgb.Dataset}
Set categorical feature of \code{lgb.Dataset}
}
\examples{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
lgb.Dataset.save(dtrain, 'lgb.Dataset.data')
dtrain <- lgb.Dataset('lgb.Dataset.data')
lgb.Dataset.set.categorical(dtrain, 1:2)
\dontrun{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
lgb.Dataset.save(dtrain, 'lgb.Dataset.data')
dtrain <- lgb.Dataset('lgb.Dataset.data')
lgb.Dataset.set.categorical(dtrain, 1:2)
}
}
......@@ -2,7 +2,7 @@
% Please edit documentation in R/lgb.Dataset.R
\name{lgb.Dataset.set.reference}
\alias{lgb.Dataset.set.reference}
\title{set reference of \code{lgb.Dataset}}
\title{Set reference of \code{lgb.Dataset}}
\usage{
lgb.Dataset.set.reference(dataset, reference)
}
......@@ -15,16 +15,17 @@ lgb.Dataset.set.reference(dataset, reference)
passed dataset
}
\description{
set reference of \code{lgb.Dataset}.
If you want to use validation data, you should set its reference to training data
If you want to use validation data, you should set reference to training data
}
\examples{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset(test$data, test=train$label)
lgb.Dataset.set.reference(dtest, dtrain)
\dontrun{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset(test$data, test=train$label)
lgb.Dataset.set.reference(dtest, dtrain)
}
}
......@@ -18,16 +18,18 @@ json format of model
Dump LightGBM model to json
}
\examples{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
json_model <- lgb.dump(model)
\dontrun{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
json_model <- lgb.dump(model)
}
}
......@@ -16,17 +16,19 @@ booster
Load LightGBM model from saved model file
}
\examples{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
lgb.save(model, "model.txt")
load_booster <- lgb.load("model.txt")
\dontrun{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
lgb.save(model, "model.txt")
load_booster <- lgb.load("model.txt")
}
}
......@@ -20,16 +20,18 @@ booster
Save LightGBM model
}
\examples{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
lgb.save(model, "model.txt")
\dontrun{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
lgb.save(model, "model.txt")
}
}
......@@ -46,11 +46,11 @@ if verbose > 0 , also will record iteration message to booster$record_evals}
\item{showsd}{\code{boolean}, whether to show standard deviation of cross validation}
\item{stratified}{a \code{boolean} indicating whether sampling of folds should be stratified
\item{stratified}{a \code{boolean} indicating whether sampling of folds should be stratified
by the values of outcome labels.}
\item{folds}{\code{list} provides a possibility to use a list of pre-defined CV folds
(each element must be a vector of test fold's indices). When folds are supplied,
(each element must be a vector of test fold's indices). When folds are supplied,
the \code{nfold} and \code{stratified} parameters are ignored.}
\item{init_model}{path of model file of \code{lgb.Booster} object, will continue train from this model}
......@@ -73,7 +73,7 @@ List of callback functions that are applied at each iteration.}
\item{...}{other parameters, see parameters.md for more informations}
\item{valids}{a list of \code{lgb.Dataset} object, used for validation}
\item{valids}{a list of \code{lgb.Dataset} objects, used for validation}
\item{params}{List of parameters}
......@@ -83,14 +83,14 @@ List of callback functions that are applied at each iteration.}
\item{obj}{objective function, can be character or custom objective function}
\item{eval}{evaluation function, can be (list of) character or custom eval function}
\item{eval}{evaluation function, can be (a list of) character or custom eval function}
\item{verbose}{verbosity for output
if verbose > 0 , also will record iteration message to booster$record_evals}
if \code{verbose > 0}, also will record iteration message to \code{booster$record_evals}}
\item{eval_freq}{evalutaion output frequence}
\item{eval_freq}{evalutaion output frequency}
\item{init_model}{path of model file of \code{lgb.Booster} object, will continue train from this model}
\item{init_model}{path of model file of \code{lgb.Booster} object, will continue training from this model}
\item{colnames}{feature names, if not null, will use this to overwrite the names in dataset}
......@@ -119,25 +119,30 @@ a trained booster model \code{lgb.Booster}.
Main CV logic for LightGBM
Main training logic for LightGBM
Simple interface for training an lightgbm model.
Its documentation is combined with lgb.train.
}
\examples{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
params <- list(objective="regression", metric="l2")
model <- lgb.cv(params, dtrain, 10, nfold=5, min_data=1, learning_rate=1, early_stopping_rounds=10)
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
\dontrun{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
params <- list(objective="regression", metric="l2")
model <- lgb.cv(params, dtrain, 10, nfold=5, min_data=1, learning_rate=1, early_stopping_rounds=10)
}
\dontrun{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
}
}
......@@ -14,41 +14,42 @@
\item{num_iteration}{number of iteration want to predict with, NULL or <= 0 means use best iteration}
\item{rawscore}{whether the prediction should be returned in the for of original untransformed
sum of predictions from boosting iterations' results. E.g., setting \code{rawscore=TRUE} for
\item{rawscore}{whether the prediction should be returned in the for of original untransformed
sum of predictions from boosting iterations' results. E.g., setting \code{rawscore=TRUE} for
logistic regression would result in predictions for log-odds instead of probabilities.}
\item{predleaf}{whether predict leaf index instead.}
\item{header}{only used for prediction for text file. True if text file has header}
\item{reshape}{whether to reshape the vector of predictions to a matrix form when there are several
\item{reshape}{whether to reshape the vector of predictions to a matrix form when there are several
prediction outputs per case.}
}
\value{
For regression or binary classification, it returns a vector of length \code{nrows(data)}.
For multiclass classification, either a \code{num_class * nrows(data)} vector or
a \code{(nrows(data), num_class)} dimension matrix is returned, depending on
For multiclass classification, either a \code{num_class * nrows(data)} vector or
a \code{(nrows(data), num_class)} dimension matrix is returned, depending on
the \code{reshape} value.
When \code{predleaf = TRUE}, the output is a matrix object with the
When \code{predleaf = TRUE}, the output is a matrix object with the
number of columns corresponding to the number of trees.
}
\description{
Predicted values based on class \code{lgb.Booster}
}
\examples{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
preds <- predict(model, test$data)
\dontrun{
library(lightgbm)
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
data(agaricus.test, package='lightgbm')
test <- agaricus.test
dtest <- lgb.Dataset.create.valid(dtrain, test$data, label=test$label)
params <- list(objective="regression", metric="l2")
valids <- list(test=dtest)
model <- lgb.train(params, dtrain, 100, valids, min_data=1, learning_rate=1, early_stopping_rounds=10)
preds <- predict(model, test$data)
}
}
......@@ -35,13 +35,15 @@ The \code{name} field can be one of the following:
}
}
\examples{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
lgb.Dataset.construct(dtrain)
labels <- getinfo(dtrain, 'label')
setinfo(dtrain, 'label', 1-labels)
labels2 <- getinfo(dtrain, 'label')
stopifnot(all.equal(labels2, 1-labels))
\dontrun{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
lgb.Dataset.construct(dtrain)
labels <- getinfo(dtrain, 'label')
setinfo(dtrain, 'label', 1-labels)
labels2 <- getinfo(dtrain, 'label')
stopifnot(all.equal(labels2, 1-labels))
}
}
......@@ -3,7 +3,7 @@
\name{slice}
\alias{slice}
\alias{slice.lgb.Dataset}
\title{Slice an dataset}
\title{Slice a dataset}
\usage{
slice(dataset, ...)
......@@ -20,16 +20,17 @@ slice(dataset, ...)
constructed sub dataset
}
\description{
Get a new Dataset containing the specified rows of
Get a new \code{lgb.Dataset} containing the specified rows of
orginal lgb.Dataset object
}
\examples{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
dsub <- slice(dtrain, 1:42)
labels1 <- getinfo(dsub, 'label')
\dontrun{
data(agaricus.train, package='lightgbm')
train <- agaricus.train
dtrain <- lgb.Dataset(train$data, label=train$label)
dsub <- slice(dtrain, 1:42)
labels1 <- getinfo(dsub, 'label')
}
}
......@@ -4,9 +4,9 @@ PKGROOT=../../
ENABLE_STD_THREAD=1
CXX_STD = CXX11
LGBM_RFLAGS = -DUSE_SOCKET
LGBM_RFLAGS = -DUSE_SOCKET
PKG_CPPFLAGS= -I$(PKGROOT)/include $(LGBM_RFLAGS)
PKG_CPPFLAGS= -I$(PKGROOT)/include $(LGBM_RFLAGS) -Wno-deprecated-declarations
PKG_CXXFLAGS= $(SHLIB_OPENMP_CFLAGS) $(SHLIB_PTHREAD_FLAGS) -std=c++11
PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) $(SHLIB_PTHREAD_FLAGS)
OBJECTS = ./lightgbm-all.o ./lightgbm_R.o
PKG_LIBS = $(SHLIB_OPENMP_CFLAGS) $(SHLIB_PTHREAD_FLAGS)
OBJECTS = ./lightgbm-all.o ./lightgbm_R.o
/*
* A simple wrapper for access data in R object.
* A simple wrapper for accessing data in R object.
* Due to license issue(GPLv2), we cannot include R's header file, so use this simple wrapper instead.
* However, If R change its define of object, this file need to be updated as well.
* However, if R changes the way it defines objects, this file will need to be updated as well.
*/
#ifndef R_OBJECT_HELPER_H_
#define R_OBJECT_HELPER_H_
......
......@@ -8,11 +8,10 @@
#include "R_object_helper.h"
/*!
* \brief get string message of the last error
* all function in this file will return 0 when succeed
* and -1 when an error occured,
* all functions in this file will return 0 on success
* and -1 when an error occured
* \return err_msg error inforomation
* \return error inforomation
*/
......@@ -21,10 +20,10 @@ DllExport SEXP LGBM_GetLastError_R(SEXP buf_len, SEXP actual_len, SEXP err_msg);
// --- start Dataset interface
/*!
* \brief load data set from file like the command_line LightGBM do
* \brief load data set from file like the command_line LightGBM does
* \param filename the name of the file
* \param parameters additional parameters
* \param reference used to align bin mapper with other dataset, nullptr means don't used
* \param reference used to align bin mapper with other dataset, nullptr means not used
* \param out created dataset
* \return 0 when succeed, -1 when failure happens
*/
......@@ -43,7 +42,7 @@ DllExport SEXP LGBM_DatasetCreateFromFile_R(SEXP filename,
* \param nelem number of nonzero elements in the matrix
* \param num_row number of rows
* \param parameters additional parameters
* \param reference used to align bin mapper with other dataset, nullptr means don't used
* \param reference used to align bin mapper with other dataset, nullptr means not used
* \param out created dataset
* \return 0 when succeed, -1 when failure happens
*/
......@@ -65,7 +64,7 @@ DllExport SEXP LGBM_DatasetCreateFromCSC_R(SEXP indptr,
* \param nrow number of rows
* \param ncol number columns
* \param parameters additional parameters
* \param reference used to align bin mapper with other dataset, nullptr means don't used
* \param reference used to align bin mapper with other dataset, nullptr means not used
* \param out created dataset
* \return 0 when succeed, -1 when failure happens
*/
......@@ -117,7 +116,7 @@ DllExport SEXP LGBM_DatasetGetFeatureNames_R(SEXP handle,
/*!
* \brief save dateset to binary file
* \param handle a instance of dataset
* \param handle an instance of dataset
* \param filename file name
* \return 0 when succeed, -1 when failure happens
*/
......@@ -127,7 +126,7 @@ DllExport SEXP LGBM_DatasetSaveBinary_R(SEXP handle,
/*!
* \brief free dataset
* \param handle a instance of dataset
* \param handle an instance of dataset
* \return 0 when succeed, -1 when failure happens
*/
DllExport SEXP LGBM_DatasetFree_R(SEXP handle,
......@@ -135,9 +134,9 @@ DllExport SEXP LGBM_DatasetFree_R(SEXP handle,
/*!
* \brief set vector to a content in info
* Note: group and group only work for C_API_DTYPE_INT32
* Note: group and group_id only work for C_API_DTYPE_INT32
* label and weight only work for C_API_DTYPE_FLOAT32
* \param handle a instance of dataset
* \param handle an instance of dataset
* \param field_name field name, can be label, weight, group, group_id
* \param field_data pointer to vector
* \param num_element number of element in field_data
......@@ -151,7 +150,7 @@ DllExport SEXP LGBM_DatasetSetField_R(SEXP handle,
/*!
* \brief get size of info vector from dataset
* \param handle a instance of dataset
* \param handle an instance of dataset
* \param field_name field name
* \param out size of info vector from dataset
* \return 0 when succeed, -1 when failure happens
......@@ -163,7 +162,7 @@ DllExport SEXP LGBM_DatasetGetFieldSize_R(SEXP handle,
/*!
* \brief get info vector from dataset
* \param handle a instance of dataset
* \param handle an instance of dataset
* \param field_name field name
* \param field_data pointer to vector
* \return 0 when succeed, -1 when failure happens
......@@ -226,7 +225,7 @@ DllExport SEXP LGBM_BoosterCreateFromModelfile_R(SEXP filename,
SEXP call_state);
/*!
* \brief Merge model in two booster to first handle
* \brief Merge model in two boosters to first handle
* \param handle handle, will merge other handle to this
* \param other_handle
* \return 0 when succeed, -1 when failure happens
......@@ -266,12 +265,12 @@ DllExport SEXP LGBM_BoosterResetParameter_R(SEXP handle,
SEXP call_state);
/*!
* \brief Get number of class
* \brief Get number of classes
* \param handle handle
* \param out number of classes
* \return 0 when succeed, -1 when failure happens
*/
DllExport SEXP LGBM_BoosterGetNumClasses_R(SEXP handle,
DllExport SEXP LGBM_BoosterGetNumClasses_R(SEXP handle,
SEXP out,
SEXP call_state);
......@@ -311,7 +310,7 @@ DllExport SEXP LGBM_BoosterRollbackOneIter_R(SEXP handle,
* \param out iteration of boosting rounds
* \return 0 when succeed, -1 when failure happens
*/
DllExport SEXP LGBM_BoosterGetCurrentIteration_R(SEXP handle,
DllExport SEXP LGBM_BoosterGetCurrentIteration_R(SEXP handle,
SEXP out,
SEXP call_state);
......@@ -320,7 +319,7 @@ DllExport SEXP LGBM_BoosterGetCurrentIteration_R(SEXP handle,
* \param eval_names eval names
* \return 0 when succeed, -1 when failure happens
*/
DllExport SEXP LGBM_BoosterGetEvalNames_R(SEXP handle,
DllExport SEXP LGBM_BoosterGetEvalNames_R(SEXP handle,
SEXP buf_len,
SEXP actual_len,
SEXP eval_names,
......@@ -351,8 +350,8 @@ DllExport SEXP LGBM_BoosterGetNumPredict_R(SEXP handle,
SEXP call_state);
/*!
* \brief Get prediction for training data and validation data
this can be used to support customized eval function
* \brief Get prediction for training data and validation data.
* This can be used to support customized eval function
* \param handle handle
* \param data_idx 0:training data, 1: 1st valid data, 2:2nd valid data ...
* \param out_result, used to store predict result, should pre-allocate memory
......@@ -404,14 +403,14 @@ DllExport SEXP LGBM_BoosterCalcNumPredict_R(SEXP handle,
/*!
* \brief make prediction for an new data set
* Note: should pre-allocate memory for out_result,
* for noraml and raw score: its length is equal to num_class * num_data
* for normal and raw score: its length is equal to num_class * num_data
* for leaf index, its length is equal to num_class * num_data * num_iteration
* \param handle handle
* \param indptr pointer to row headers
* \param indices findex
* \param data fvalue
* \param nindptr number of cols in the matrix + 1
* \param nelem number of nonzero elements in the matrix
* \param nelem number of non-zero elements in the matrix
* \param num_row number of rows
* \param is_rawscore
* \param is_leafidx
......@@ -433,9 +432,9 @@ DllExport SEXP LGBM_BoosterPredictForCSC_R(SEXP handle,
SEXP call_state);
/*!
* \brief make prediction for an new data set
* \brief make prediction for a new data set
* Note: should pre-allocate memory for out_result,
* for noraml and raw score: its length is equal to num_class * num_data
* for normal and raw score: its length is equal to num_class * num_data
* for leaf index, its length is equal to num_class * num_data * num_iteration
* \param handle handle
* \param data pointer to the data space
......@@ -483,4 +482,4 @@ DllExport SEXP LGBM_BoosterDumpModel_R(SEXP handle,
SEXP out_str,
SEXP call_state);
#endif // LIGHTGBM_R_H_
\ No newline at end of file
#endif // LIGHTGBM_R_H_
require(lightgbm)
context("basic functions")
data(agaricus.train, package='lightgbm')
......@@ -11,17 +9,17 @@ windows_flag = grepl('Windows', Sys.info()[['sysname']])
test_that("train and predict binary classification", {
nrounds = 10
bst <- lightgbm(data = train$data, label = train$label, num_leaves = 5,
bst <- lightgbm(data = train$data, label = train$label, num_leaves = 5,
nrounds = nrounds, objective = "binary", metric="binary_error")
expect_false(is.null(bst$record_evals))
record_results <- lgb.get.eval.result(bst, "train", "binary_error")
expect_lt(min(record_results), 0.02)
pred <- predict(bst, test$data)
expect_length(pred, 1611)
expect_equal(length(pred), 1611)
pred1 <- predict(bst, train$data, num_iteration = 1)
expect_length(pred1, 6513)
expect_equal(length(pred1), 6513)
err_pred1 <- sum((pred1 > 0.5) != train$label)/length(train$label)
err_log <- record_results[1]
expect_lt(abs(err_pred1 - err_log), 10e-6)
......@@ -38,10 +36,9 @@ test_that("train and predict softmax", {
expect_false(is.null(bst$record_evals))
record_results <- lgb.get.eval.result(bst, "train", "multi_error")
expect_lt(min(record_results), 0.03)
pred <- predict(bst, as.matrix(iris[, -5]))
expect_length(pred, nrow(iris) * 3)
pred <- predict(bst, as.matrix(iris[, -5]))
expect_equal(length(pred), nrow(iris) * 3)
})
......@@ -82,4 +79,3 @@ test_that("cv works", {
bst <- lgb.cv(params, dtrain, 10, nflod=5, min_data=1, learning_rate=1, early_stopping_rounds=10)
expect_false(is.null(bst$record_evals))
})
context('Test models with custom objective')
require(lightgbm)
data(agaricus.train, package='lightgbm')
data(agaricus.test, package='lightgbm')
dtrain <- lgb.Dataset(agaricus.train$data, label = agaricus.train$label)
......@@ -27,10 +25,6 @@ param <- list(num_leaves=8, learning_rate=1,
num_round <- 10
test_that("custom objective works", {
bst <- lgb.train(param, dtrain, num_round, watchlist, eval=evalerror)
bst <- lgb.train(param, dtrain, num_round, watchlist, eval = evalerror)
expect_false(is.null(bst$record_evals))
})
#ifndef LIGHTGBM_UTILS_LOG_H_
#define LIGHTGBM_UTILS_LOG_H_
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstdarg>
......@@ -32,7 +33,7 @@ enum class LogLevel: int {
/*!
* \brief A static Log class
* \brief A static Log class
*/
class Log {
public:
......@@ -87,14 +88,14 @@ private:
}
}
// a trick to use static variable in header file.
// a trick to use static variable in header file.
// May be not good, but avoid to use an additional cpp file
#if defined(_MSC_VER)
static LogLevel& GetLevel() { static __declspec(thread) LogLevel level = LogLevel::Info; return level; }
#else
static LogLevel& GetLevel() { static thread_local LogLevel level = LogLevel::Info; return level; }
#endif
};
} // namespace LightGBM
......
......@@ -120,7 +120,7 @@ void Application::LoadData() {
GlobalSyncUpByMin<int>(config_.io_config.data_random_seed);
}
DatasetLoader dataset_loader(config_.io_config, predict_fun,
DatasetLoader dataset_loader(config_.io_config, predict_fun,
boosting_->NumberOfClasses(), config_.io_config.data_filename.c_str());
// load Training data
if (config_.is_parallel_find_bin) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment