DecisionTree.jl
DecisionTree.jl is a library for fitting decision trees in Julia.
Basic example
Here is an example:
julia> using JuMP, MathOptAI, DecisionTree
julia> truth(x::Vector) = x[1] <= 0.5 ? -2 : (x[2] <= 0.3 ? 3 : 4)
truth (generic function with 1 method)
julia> features = abs.(sin.((1:10) .* (3:4)'));
julia> size(features)
(10, 2)
julia> labels = truth.(Vector.(eachrow(features)));
julia> predictor = DecisionTree.build_tree(labels, features)
Decision Tree Leaves: 3 Depth: 2
julia> model = Model();
julia> @variable(model, 0 <= x[1:2] <= 1);
julia> y, formulation = MathOptAI.add_predictor(model, predictor, x);
julia> y
1-element Vector{JuMP.VariableRef}: moai_BinaryDecisionTree_value
julia> formulation
BinaryDecisionTree{Float64,Int64} [leaves=3, depth=2] ├ variables [4] │ ├ moai_BinaryDecisionTree_value │ ├ moai_BinaryDecisionTree_z[1] │ ├ moai_BinaryDecisionTree_z[2] │ └ moai_BinaryDecisionTree_z[3] └ constraints [7] ├ moai_BinaryDecisionTree_z[1] + moai_BinaryDecisionTree_z[2] + moai_BinaryDecisionTree_z[3] = 1 ├ moai_BinaryDecisionTree_z[1] --> {x[1] ≤ 0.4743457016210958} ├ moai_BinaryDecisionTree_z[2] --> {x[1] ≥ 0.4743457016210958} ├ moai_BinaryDecisionTree_z[2] --> {x[2] ≤ 0.41966499895337794} ├ moai_BinaryDecisionTree_z[3] --> {x[1] ≥ 0.4743457016210958} ├ moai_BinaryDecisionTree_z[3] --> {x[2] ≥ 0.41966499895337794} └ 2 moai_BinaryDecisionTree_z[1] - 3 moai_BinaryDecisionTree_z[2] - 4 moai_BinaryDecisionTree_z[3] + moai_BinaryDecisionTree_value = 0