def test_predict(fitted_random_forest, mocker): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.fit(fitted_random_forest) spy = mocker.spy(mdi, 'interpret') _ = mdi.predict(X=None, weighted=True, normalize=True) spy.assert_called_once_with(X=None, weighted=True, normalize=True)
def test_interpret_values(fitted_decision_tree, fitted_random_forest, fitted_gradient_boosting, fitted_ada_boost): mdi = MeanDecreaseImpurity(use_precompute=False) for e in (fitted_decision_tree, fitted_random_forest, fitted_gradient_boosting, fitted_ada_boost): mdi.fit(e) importances = mdi.interpret(X=None, weighted=True, normalize=True) np.testing.assert_allclose(e.feature_importances_, importances)
def test_interpret_precomputed(fitted_random_forest, mocker): mdi = MeanDecreaseImpurity(use_precompute=True) mdi.fit(fitted_random_forest) spy = mocker.spy(mdi, '_compute_importances') importances = mdi.interpret(X=None, weighted=True, normalize=True) spy.assert_not_called() assert np.array_equal(mdi.estimator.feature_importances_, importances)
def test_interpret_not_precomputed(fitted_random_forest, mocker): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.fit(fitted_random_forest) spy = mocker.spy(mdi, '_compute_importances') importances = mdi.interpret(X=None, weighted=True, normalize=True) spy.assert_called_once_with(X=None, weighted=True, normalize=True) np.testing.assert_allclose(fitted_random_forest.feature_importances_, importances)
def test_fit_ada_boost(fitted_ada_boost): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.fit(fitted_ada_boost) assert mdi.estimator == fitted_ada_boost assert mdi.estimator is fitted_ada_boost assert mdi._base == 'scikit-learn' assert mdi._name == 'feature_importances_' assert mdi._is_forest is True assert mdi.n_features_ == fitted_ada_boost.estimators_[0].n_features_ assert mdi.n_features_ is fitted_ada_boost.estimators_[0].n_features_
def test_fit_tree(fitted_decision_tree): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.fit(fitted_decision_tree) assert mdi.estimator == fitted_decision_tree assert mdi.estimator is fitted_decision_tree assert mdi._base == 'scikit-learn' assert mdi._name == 'feature_importances_' assert mdi._is_forest is False assert mdi.n_features_ == fitted_decision_tree.n_features_ assert mdi.n_features_ is fitted_decision_tree.n_features_
def test__compute_sklearn_forest_importances_for_gradient_boosting( pseudo_gradient_boosting): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.estimator = pseudo_gradient_boosting mdi.n_features_ = 4 importances1 = mdi._compute_sklearn_forest_importances(X=None, weighted=False, normalize=False) importances2 = mdi._compute_sklearn_forest_importances(X=None, weighted=False, normalize=True) importances3 = mdi._compute_sklearn_forest_importances(X=None, weighted=True, normalize=False) importances4 = mdi._compute_sklearn_forest_importances(X=None, weighted=True, normalize=True) expected_importances1 = np.array([0., .21, .21, 0.]) expected_importances2 = np.array([0., .5, .5, 0.]) expected_importances3 = np.array([0., .21, .21, 0.]) expected_importances4 = np.array([0., .5, .5, 0.]) np.testing.assert_allclose(importances1, expected_importances1) np.testing.assert_allclose(importances2, expected_importances2) np.testing.assert_allclose(importances3, expected_importances3) np.testing.assert_allclose(importances4, expected_importances4)
def test__compute_importances_error(iris, fitted_random_forest): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.fit(fitted_random_forest) mdi._base = 'xgboost' with pytest.raises(ValueError): mdi._compute_importances(X=None, weighted=True, normalize=True)
def test_mdi_initialization_attributes(): mdi = MeanDecreaseImpurity(use_precompute=False) assert mdi.use_precompute is False assert mdi.estimator is None assert mdi.n_features_ is None assert mdi._base is None assert mdi._name is None assert mdi._is_forest is None
def test_mdi_initialization(): mdi = MeanDecreaseImpurity(use_precompute=False) assert hasattr(mdi, 'use_precompute') assert hasattr(mdi, 'estimator') assert hasattr(mdi, 'n_features_') assert hasattr(mdi, '_base') assert hasattr(mdi, '_name') assert hasattr(mdi, '_is_forest')
def test__compute_importances(fitted_random_forest, mocker): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.fit(fitted_random_forest) spy = mocker.spy(mdi, '_compute_sklearn_importances') mdi._compute_importances(X=None, weighted=True, normalize=True) spy.assert_called_once_with(X=None, weighted=True, normalize=True)
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_fit_raise_error(iris, random_forest): mdi = MeanDecreaseImpurity(use_precompute=False) with pytest.raises(NotFittedError): mdi.fit(random_forest) svc = SVC(kernel='linear', C=1) svc.fit(iris.data, iris.target) with pytest.raises(TypeError): mdi.fit(svc)
def test__compute_sklearn_importances_tree(fitted_decision_tree, mocker): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.fit(fitted_decision_tree) spy1 = mocker.spy(mdi, '_compute_sklearn_tree_importances') spy2 = mocker.spy(mdi, '_compute_sklearn_forest_importances') mdi._compute_sklearn_importances(X=None, normalize=True, weighted=True) spy1.assert_called_once_with(fitted_decision_tree, X=None, weighted=True, normalize=True) spy2.assert_not_called()
def test__compute_sklearn_importances_forest(fitted_random_forest, mocker): mdi = MeanDecreaseImpurity(use_precompute=False) mdi.fit(fitted_random_forest) spy1 = mocker.spy(mdi, '_compute_sklearn_tree_importances') spy2 = mocker.spy(mdi, '_compute_sklearn_forest_importances') mdi._compute_sklearn_importances(X=None, normalize=True, weighted=True) last_estimator = mdi.estimator.estimators_[-1] spy1.assert_called_with(last_estimator, X=None, weighted=True, normalize=True) spy2.assert_called_once_with(X=None, weighted=True, normalize=True)