def test_get_sklearn_nodes_from_weighted_X(pseudo_tree): X = np.array([[1, 0, 1, 0], [0, 1, 1, 0], [1, 1, 1, 0], [0, 0, 0, 0], [1, 0, 1, 1], [0, 1, 1, 1], [1, 1, 1, 1], [0, 0, 0, 1]]) nodes = get_sklearn_nodes_from(pseudo_tree, X=X, weighted=True) expected_nodes = [ Node(index=0, left=1, right=4, feature=0, value=[.7, .3], impurity=.42, n_node_samples=10.4), Node(index=1, left=2, right=3, feature=1, value=[.7, .3], impurity=.42, n_node_samples=5.2), Leaf(index=2, value=[1., 0.], impurity=0., n_node_samples=2.), Leaf(index=3, value=[0., 1.], impurity=0., n_node_samples=4.), Node(index=4, left=5, right=6, feature=2, value=[.7, .3], impurity=.42, n_node_samples=5.2), Leaf(index=5, value=[1., 0.], impurity=0., n_node_samples=0.), Leaf(index=6, value=[0., 1.], impurity=0., n_node_samples=8.) ] assert nodes == expected_nodes
def test_get_sklearn_nodes_from_non_weighted(pseudo_tree): nodes = get_sklearn_nodes_from(pseudo_tree, weighted=False) expected_nodes = [ Node(index=0, left=1, right=4, feature=0, value=[.7, .3], impurity=.42, n_node_samples=100), Node(index=1, left=2, right=3, feature=1, value=[.7, .3], impurity=.42, n_node_samples=50), Leaf(index=2, value=[1., 0.], impurity=0., n_node_samples=35), Leaf(index=3, value=[0., 1.], impurity=0., n_node_samples=15), Node(index=4, left=5, right=6, feature=2, value=[.7, .3], impurity=.42, n_node_samples=50), Leaf(index=5, value=[1., 0.], impurity=0., n_node_samples=35), Leaf(index=6, value=[0., 1.], impurity=0., n_node_samples=15) ] assert nodes == expected_nodes
def test__compute_impurity_importance_from(): node = Node(index=1, left=2, right=3, feature=0, value=[.7, .3], impurity=.42, n_node_samples=100) left = Leaf(index=2, value=[1., 0.], impurity=0., n_node_samples=70) right = Leaf(index=3, value=[0., 1.], impurity=0., n_node_samples=30) impurity_importance = MeanDecreaseImpurity._compute_impurity_importance_from( node, left, right) expected_impurity_importance = 42. assert math.isclose(impurity_importance, expected_impurity_importance)
def test_leaf_initialization_attributes(leaf_initializers): leaf = Leaf(**leaf_initializers) for attribute, value in leaf_initializers.items(): assert getattr(leaf, attribute) == value assert math.isclose( leaf.weighted_impurity, leaf_initializers['n_node_samples'] * leaf_initializers['impurity'])
def test_leaf_initialization(leaf_initializers): leaf = Leaf(**leaf_initializers) assert hasattr(leaf, 'index') assert hasattr(leaf, 'value') assert hasattr(leaf, 'impurity') assert hasattr(leaf, 'n_node_samples') assert hasattr(leaf, 'weighted_impurity')
def test__get_node_from(node_initializers): node = _get_node_from(**node_initializers) expected_node = Node(**node_initializers) assert node == expected_node assert not (node is expected_node) leaf_initializers = copy.deepcopy(node_initializers) leaf_initializers['left'], leaf_initializers['right'] = -1, -1 leaf = _get_node_from(**leaf_initializers) del leaf_initializers['left'] del leaf_initializers['right'] del leaf_initializers['feature'] expected_leaf = Leaf(**leaf_initializers) assert leaf == expected_leaf assert not (leaf is expected_leaf)
def test_leaf_inequality(leaf_initializers, leaf_initializers_for_inequality): leaf1, leaf2 = Leaf(**leaf_initializers), Leaf( **leaf_initializers_for_inequality) assert leaf1 != leaf2 assert not (leaf1 is leaf2)
def test_leaf_equality(leaf_initializers): leaf1, leaf2 = Leaf(**leaf_initializers), Leaf(**leaf_initializers) assert leaf1 == leaf2 assert not (leaf1 is leaf2)