API of Treelite Python package.
Treelite: a model compiler for decision tree ensembles
treelite.
DMatrix
(data, data_format=None, missing=None, feature_names=None, feature_types=None, verbose=False, nthread=None)¶Data matrix used in treelite.
data (str
/ numpy.ndarray
/ scipy.sparse.csr_matrix
/ pandas.DataFrame
) – Data source. When data is str
type, it indicates
that data should be read from a file.
data_format (str
, optional) – Format of input data file. Applicable only when data is read from a
file. If missing, the svmlight (.libsvm) format is assumed.
missing (float
, optional) – Value in the data that represents a missing entry. If set to None
,
numpy.nan
will be used.
verbose (bool
, optional) – Whether to print extra messages during construction
feature_names (list
, optional) – Human-readable names for features
feature_types (list
, optional) – Types for features
nthread (int
, optional) – Number of threads
treelite.
Model
(handle=None)¶Decision tree ensemble model
handle (ctypes.c_void_p
, optional) – Initial value of model handle
compile
(dirpath, params=None, compiler='ast_native', verbose=False)¶Generate prediction code from a tree ensemble model. The code will be C99
compliant. One header file (.h) will be generated, along with one or more
source files (.c). Use create_shared()
method to package
prediction code as a dynamic shared library (.so/.dll/.dylib).
Example
The following populates the directory ./model
with source and header
files:
model.compile(dirpath='./my/model', params={}, verbose=True)
If parallel compilation is enabled (parameter parallel_comp
), the files
are in the form of ./my/model/header.h
, ./my/model/main.c
,
./my/model/tu0.c
, ./my/model/tu1.c
and so forth, depending on
the value of parallel_comp
. Otherwise, there will be exactly two files:
./model/header.h
, ./my/model/main.c
export_lib
(toolchain, libpath, params=None, compiler='ast_native', verbose=False, nthread=None, options=None)¶Convenience function: Generate prediction code and immediately turn it into a dynamic shared library. A temporary directory will be created to hold the source files.
toolchain (str
) – which toolchain to use. You may choose one of ‘msvc’, ‘clang’, and ‘gcc’.
You may also specify a specific variation of clang or gcc (e.g. ‘gcc-7’)
libpath (str
) – location to save the generated dynamic shared library
params (dict
, optional) – parameters to be passed to the compiler. See
this page for the list of compiler
parameters.
compiler (str
, optional) – name of compiler to use in C code generation
verbose (bool
, optional) – whether to produce extra messages
nthread (int
, optional) – number of threads to use in creating the shared library.
Defaults to the number of cores in the system.
options (list
of str
, optional) – Additional options to pass to toolchain
Example
The one-line command
model.export_lib(toolchain='msvc', libpath='./mymodel.dll',
params={}, verbose=True)
is equivalent to the following sequence of commands:
model.compile(dirpath='/temporary/directory', params={}, verbose=True)
treelite.create_shared(toolchain='msvc', dirpath='/temporary/directory',
verbose=True)
# move the library out of the temporary directory
shutil.move('/temporary/directory/mymodel.dll', './mymodel.dll')
export_protobuf
(filename)¶Export a tree ensemble model as a Protocol Buffers format. Protocol Buffers (google/protobuf) is a language- and platform-neutral mechanism for serializing structured data. See src/tree.proto for format spec.
filename (str
) – path to save Protocol Buffers output
Example
model.export_protobuf('./my.buffer')
export_srcpkg
(platform, toolchain, pkgpath, libname, params=None, compiler='ast_native', verbose=False, options=None)¶Convenience function: Generate prediction code and create a zipped source package for deployment. The resulting zip file will also contain a Makefile.
platform (str
) – name of the operating system on which the headers and sources shall be
compiled. Must be one of the following: ‘windows’ (Microsoft Windows),
‘osx’ (Mac OS X), ‘unix’ (Linux and other UNIX-like systems)
toolchain (str
) – which toolchain to use. You may choose one of ‘msvc’, ‘clang’, and ‘gcc’.
You may also specify a specific variation of clang or gcc (e.g. ‘gcc-7’)
pkgpath (str
) – location to save the zipped source package
libname (str
) – name of model shared library to be built
params (dict
, optional) – parameters to be passed to the compiler. See
this page for the list of compiler
parameters.
compiler (str
, optional) – name of compiler to use in C code generation
verbose (bool
, optional) – whether to produce extra messages
nthread (int
, optional) – number of threads to use in creating the shared library.
Defaults to the number of cores in the system.
options (list
of str
, optional) – Additional options to pass to toolchain
Example
The one-line command
model.export_srcpkg(platform='unix', toolchain='gcc',
pkgpath='./mymodel_pkg.zip', libname='mymodel.so',
params={}, verbose=True)
is equivalent to the following sequence of commands:
model.compile(dirpath='/temporary/directory/mymodel',
params={}, verbose=True)
generate_makefile(dirpath='/temporary/directory/mymodel',
platform='unix', toolchain='gcc')
# zip the directory containing C code and Makefile
shutil.make_archive(base_name=pkgpath, format='zip',
root_dir='/temporary/directory',
base_dir='mymodel/')
from_xgboost
(booster)¶Load a tree ensemble model from an XGBoost Booster object
booster (object of type xgboost.Booster
) – Python handle to XGBoost model
model – loaded model
Model
object
Example
bst = xgboost.train(params, dtrain, 10, [(dtrain, 'train')])
xgb_model = Model.from_xgboost(bst)
load
(filename, model_format)¶Load a tree ensemble model from a file
model – loaded model
Model
object
Example
xgb_model = Model.load('xgboost_model.model', 'xgboost')
num_feature
¶Number of features used in the model
num_output_group
¶Number of output groups of the model
num_tree
¶Number of decision trees in the model
set_tree_limit
(n)¶Set first n trees to be kept, the remaining ones will be dropped
treelite.
ModelBuilder
(num_feature, num_output_group=1, random_forest=False, **kwargs)¶Builder class for tree ensemble model: provides tools to iteratively build an ensemble of decision trees
num_feature (int
) – number of features used in model being built. We assume that all
feature indices are between 0
and (num_feature - 1
)
num_output_group (int
, optional) – number of output groups; >1
indicates multiclass classification
random_forest (bool
, optional) – whether the model is a random forest; True
indicates a random forest
and False
indicates gradient boosted trees
**kwargs – model parameters, to be used to specify the resulting model. Refer to this page for the full list of model parameters.
Node
¶Handle to a node in a tree
set_categorical_test_node
(feature_id, left_categories, default_left, left_child_key, right_child_key)¶Set the node as a test node with categorical split. A list defines all
categories that would be classified as the left side. Categories are
integers ranging from 0
to n-1
, where n
is the number of
categories in that particular feature.
feature_id (int
) – feature index
left_categories (list
of int
) – list of categories belonging to the left child.
default_left (bool
) – default direction for missing values
(True
for left; False
for right)
left_child_key (int
) – unique integer key to identify the left child node
right_child_key (int
) – unique integer key to identify the right child node
set_leaf_node
(leaf_value)¶Set the node as a leaf node
set_numerical_test_node
(feature_id, opname, threshold, default_left, left_child_key, right_child_key)¶Set the node as a test node with numerical split. The test is in the form
[feature value] OP [threshold]
. Depending on the result of the test,
either left or right child would be taken.
feature_id (int
) – feature index
opname (str
) – binary operator to use in the test
threshold (float
) – threshold value
default_left (bool
) – default direction for missing values
(True
for left; False
for right)
left_child_key (int
) – unique integer key to identify the left child node
right_child_key (int
) – unique integer key to identify the right child node
set_root
()¶Set the node as the root
Tree
¶Handle to a decision tree in a tree ensemble Builder
append
(tree)¶Add a tree at the end of the ensemble
tree (Tree
object) – tree to be added
Example
builder = ModelBuilder(num_feature=4227)
tree = ... # build tree somehow
builder.append(tree) # add tree at the end of the ensemble
commit
()¶Finalize the ensemble model
model – finished model
Model
object
Example
builder = ModelBuilder(num_feature=4227)
for i in range(100):
tree = ... # build tree somehow
builder.append(tree) # add one tree at a time
model = builder.commit() # now get a Model object
model.compile(dirpath='test') # compile model into C code
insert
(index, tree)¶Insert a tree at specified location in the ensemble
Example
builder = ModelBuilder(num_feature=4227)
tree = ... # build tree somehow
builder.insert(0, tree) # insert tree at index 0
treelite.
Annotator
¶Branch annotator class: annotate branches in a given model using frequency patterns in the training data
annotate_branch
(model, dmat, nthread=None, verbose=False)¶Annotate branches in a given model using frequency patterns in the training data. Each node gets the count of the instances that belong to it. Any prior annotation information stored in the annotator will be replaced with the new annotation returned by this method.
model (object of type Model
) – decision tree ensemble model
dmat (object of type DMatrix
) – data matrix representing the training data
nthread (int
, optional) – number of threads to use while annotating. If missing, use all physical
cores in the system.
verbose (bool
, optional) – whether to produce extra messages
Create shared library.
toolchain (str
) – which toolchain to use. You may choose one of ‘msvc’, ‘clang’, and ‘gcc’.
You may also specify a specific variation of clang or gcc (e.g. ‘gcc-7’)
dirpath (str
) – directory containing the header and source files previously generated
by Model.compile()
. The directory must contain recipe.json
which specifies build dependencies.
nthread (int
, optional) – number of threads to use in creating the shared library.
Defaults to the number of cores in the system.
verbose (bool
, optional) – whether to produce extra messages
options (list
of str
, optional) – Additional options to pass to toolchain
libpath – absolute path of created shared library
Example
The following command uses Visual C++ toolchain to generate
./my/model/model.dll
:
model.compile(dirpath='./my/model', params={}, verbose=True)
create_shared(toolchain='msvc', dirpath='./my/model', verbose=True)
Later, the shared library can be referred to by its directory name:
predictor = Predictor(libpath='./my/model', verbose=True)
# looks for ./my/model/model.dll
Alternatively, one may specify the library down to its file name:
predictor = Predictor(libpath='./my/model/model.dll', verbose=True)
treelite.
save_runtime_package
(destdir)¶Save a copy of the (zipped) runtime package, containing all glue code necessary to deploy compiled models into the wild
destdir (str
) – directory to save the zipped package
treelite.
generate_makefile
(dirpath, platform, toolchain, options=None)¶Generate a Makefile for a given directory of headers and sources. The resulting Makefile will be stored in the directory. This function is useful for deploying a model on a different machine.
dirpath (str
) – directory containing the header and source files previously generated
by Model.compile()
. The directory must contain recipe.json
which specifies build dependencies.
platform (str
) – name of the operating system on which the headers and sources shall be
compiled. Must be one of the following: ‘windows’ (Microsoft Windows),
‘osx’ (Mac OS X), ‘unix’ (Linux and other UNIX-like systems)
toolchain (str
) – which toolchain to use. You may choose one of ‘msvc’, ‘clang’, and ‘gcc’.
You may also specify a specific variation of clang or gcc (e.g. ‘gcc-7’)
options (list
of str
, optional) – Additional options to pass to toolchain
treelite.gallery.sklearn.
import_model
(sklearn_model)¶Load a tree ensemble model from a scikit-learn model object
sklearn_model (object of type RandomForestRegressor
/ RandomForestClassifier
/ GradientBoostingRegressor
/ GradientBoostingClassifier
) – Python handle to scikit-learn model
model – loaded model
Model
object
Example
import sklearn.datasets
import sklearn.ensemble
X, y = sklearn.datasets.load_boston(return_X_y=True)
clf = sklearn.ensemble.RandomForestRegressor(n_estimators=10)
clf.fit(X, y)
import treelite.gallery.sklearn
model = treelite.gallery.sklearn.import_model(clf)