Description
I'm currently implementing a plot recipe for decision trees in order to be able to visualize all decision trees within the MLJ-package.
The goal is a plot recipe that
- has no dependency on
Plots.jl
- is independent of any specific decision tree implementation
Goal 1 is an inherent characteristic of plot recipes. So we have reached it just by using plot recipes. Goal 2 is realised by requiring each decision tree implementation which wants its trees to be visualized to implement a narrow part of the AbstractTrees
-interface (namely children
and printnode
).
I have already done such an implementation for DecisionTree.jl
(see https://github.com/JuliaAI/DecisionTree.jl/blob/dev/src/abstract_trees.jl). The plot recipe itself exists also (see JuliaAI/DecisionTree.jl#147; the recipe is btw so general that it can be applied to each tree implementing the above mentioned interface, it isn't restricted to decision trees).
The only missing part to make all that work, is a type for dispatch. If we have a tree
which we would like to plot (e.g. an instance of DecisionTree
) then we want to be able to call plot(tree)
. In order for plot
to chose the correct plot recipe, tree
must be of the type that is associated with the plot recipe.
As we want a recipe that is independent of any specific decision tree implementation, this type has to be independent of all these implementations. Therefore I have defined a new abstract type AbstractNode
.
The question is now, where this new type should be placed. A very natural place would be AbstractTrees.jl
(as the AbstractTrees
-interface is already used as a common denominator).
Therefore the question: Could such an abstract type be added to AbstractTrees.jl
?
BTW: If AbstractTrees.jl
wouldn't be "just" an interface but define also a type (like AbstractTree
), the whole problem wouldn't exist at all).
@ablaom: Do you want to add some remarks?
Activity