def __setstate__(self, state): self.eprobs = state[0] self.IS_LEAF = state[1] self.column = state[2] self.cutoff = state[3] self._less_tree = state[4] self._ge_tree = state[5] self.g = DirectedGraph() self.g.add_node(self) self.probs = 0.5 * self.eprobs self.probs = self.probs / numpy.sum(self.probs) if self._less_tree != None: assert self._ge_tree != None self.g.union(self._less_tree.g) self.g.union(self._ge_tree.g) self._less_tree.g = self.g self._ge_tree.g = self.g less_edge = self.__symbolic_column_name__( self.column) < self.cutoff ge_edge = self.__symbolic_column_name__(self.column) >= self.cutoff self.g.connect(self, self._ge_tree, edgeValue=str(ge_edge)) self.g.connect(self, self._less_tree, edgeValue=str(less_edge))
def __init__(self, X, oracle, target=0.6, maxdepth=5, g=None, eprobs=None, bias=0.0): if g == None: g = DirectedGraph() if eprobs == None: eprobs = numpy.array([1.0, 1.0]) self.g = g self.eprobs = eprobs self.IS_LEAF = False self.column = None self.cutoff = None self._less_tree = None self._ge_tree = None probs = 0.5 * self.eprobs probs = probs / numpy.sum(probs) self.probs = probs met_target = numpy.all( [p <= 1.0 - target or p >= target for p in probs]) self.g.add_node(self) if met_target: self._make_leaf() elif X.shape[0] < 10: self._make_leaf() elif maxdepth <= 1: self._make_leaf() else: self._make_split(X, oracle, target, maxdepth, bias)