def test_empty_pool(create_X_y): pool_classifiers = [] X, y = create_X_y with pytest.raises(ValueError): ds = BaseDS(pool_classifiers) ds.fit(X, y)
def test_preprocess_dsel_scores(): ds_test = BaseDS(create_pool_classifiers()) ds_test.fit(X_dsel_ex1, y_dsel_ex1) dsel_scores = ds_test._preprocess_dsel_scores() expected = np.array([[0.5, 0.5], [1.0, 0.0], [0.33, 0.67]]) expected = np.tile(expected, (15, 1, 1)) assert np.array_equal(dsel_scores, expected)
def test_frienemy_safe_region(): ds_test = BaseDS(create_pool_classifiers(), safe_k=3) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.DSEL_processed_ = dsel_processed_ex1 result = ds_test._frienemy_pruning(np.array([0, 1, 2, 6, 7, 8, 14])) assert np.array_equal(result, np.array([[1, 1, 1]]))
def test_frienemy_not_all_classifiers_crosses(): ds_test = BaseDS(create_pool_classifiers(), safe_k=3) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.DSEL_processed_ = dsel_processed_ex1 result = ds_test._frienemy_pruning(neighbors_ex1[0, :]) assert np.array_equal(result, np.array([[1, 1, 0]]))
def test_frienemy_no_classifier_crosses(): X = X_dsel_ex1 y = y_dsel_ex1 ds_test = BaseDS(create_pool_classifiers()) ds_test.fit(X, y) mask = ds_test._frienemy_pruning(neighbors_ex1[0, :]) assert mask.shape == (1, 3) and np.allclose(mask, 1)
def test_frienemy_all_classifiers_crosses(index): ds_test = BaseDS(create_pool_classifiers()) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.DSEL_processed_ = dsel_processed_all_ones result = ds_test._frienemy_pruning(neighbors_ex1[index, :]) assert result.all() == 1.0
def test_empty_pool(): pool_classifiers = [] X = np.random.rand(10, 2) y = np.ones(10) with pytest.raises(ValueError): ds = BaseDS(pool_classifiers) ds.fit(X, y)
def test_check_k_type(k): X = np.random.rand(10, 2) y = np.ones(10) with pytest.raises(TypeError): ds_test = BaseDS(k=k) ds_test.fit(X, y)
def test_different_input_shape(create_X_y): X, y = create_X_y query = np.array([[1.0, 1.0, 2.0]]) ds_test = BaseDS() ds_test.fit(X, y) with pytest.raises(ValueError): ds_test.predict(query)
def test_check_safe_k_value(safe_k): pool_classifiers = create_pool_classifiers() X = np.random.rand(10, 2) y = np.ones(10) with pytest.raises(ValueError): ds_test = BaseDS(pool_classifiers, safe_k=safe_k) ds_test.fit(X, y)
def test_check_k_type(k): pool_classifiers = create_pool_classifiers() X = np.random.rand(10, 2) y = np.ones(10) with pytest.raises(TypeError): ds_test = BaseDS(pool_classifiers, k=k) ds_test.fit(X, y)
def test_frienemy_no_classifier_crosses(example_estimate_competence, create_pool_classifiers): X, y, neighbors = example_estimate_competence[0:3] ds_test = BaseDS(create_pool_classifiers) ds_test.fit(X, y) mask = ds_test._frienemy_pruning(neighbors[0, :]) assert mask.shape == (1, 3) and np.allclose(mask, 1)
def test_DFP_is_used(example_estimate_competence, create_pool_classifiers): X, y, neighbors, _, dsel_processed, _ = example_estimate_competence ds_test = BaseDS(create_pool_classifiers, DFP=True, safe_k=3) ds_test.fit(X, y) ds_test.DSEL_processed_ = dsel_processed DFP_mask = ds_test._frienemy_pruning(neighbors[0, :]) assert np.array_equal(DFP_mask, np.atleast_2d([1, 1, 0]))
def test_preprocess_dsel_scores(create_X_y, create_pool_classifiers): X, y = create_X_y ds_test = BaseDS(create_pool_classifiers) ds_test.fit(X, y) dsel_scores = ds_test._predict_proba_base(X) expected = np.array([[0.5, 0.5], [1.0, 0.0], [0.33, 0.67]]) expected = np.tile(expected, (15, 1, 1)) assert np.array_equal(dsel_scores, expected)
def test_DFP_is_used(): ds_test = BaseDS(create_pool_classifiers(), DFP=True, safe_k=3) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.DSEL_processed_ = dsel_processed_ex1 ds_test.DSEL_target_ = y_dsel_ex1 ds_test.DSEL_data_ = X_dsel_ex1 DFP_mask = ds_test._frienemy_pruning(neighbors_ex1[0, :]) assert np.array_equal(DFP_mask, np.atleast_2d([1, 1, 0]))
def test_import_faiss_mode(): try: import sys sys.modules.pop('deslib.util.faiss_knn_wrapper') except Exception: pass with unittest.mock.patch.dict('sys.modules', {'faiss': None}): with pytest.raises(ImportError): BaseDS(knn_classifier="faiss")
def test_frienemy_safe_region(example_estimate_competence, create_pool_classifiers): X, y, _, _, dsel_processed, _ = example_estimate_competence ds_test = BaseDS(create_pool_classifiers, safe_k=3) ds_test.fit(X, y) ds_test.DSEL_processed_ = dsel_processed result = ds_test._frienemy_pruning(np.array([0, 1, 2, 6, 7, 8, 14])) assert np.array_equal(result, np.array([[1, 1, 1]]))
def test_predict_value(query): pool_classifiers = create_classifiers_disagree() ds = BaseDS(pool_classifiers) X = np.random.rand(10, 2) y = np.ones(10) y[:5] = 0 ds.fit(X, y) with pytest.raises(ValueError): ds.predict(query)
def test_frienemy_all_classifiers_crosses(index, example_all_ones, create_pool_classifiers): X, y, neighbors, _, dsel_processed, _ = example_all_ones ds_test = BaseDS(create_pool_classifiers) ds_test.fit(X, y) ds_test.DSEL_processed_ = dsel_processed result = ds_test._frienemy_pruning(neighbors[index, :]) assert result.all() == 1.0
def test_predict_proba_all_agree(example_estimate_competence, create_pool_all_agree): X, y, _, _, _, dsel_scores = example_estimate_competence query = np.atleast_2d([1, 1]) ds_test = BaseDS(create_pool_all_agree) ds_test.fit(X, y) ds_test.DSEL_scores = dsel_scores proba = ds_test.predict_proba(query) assert np.allclose(proba, np.atleast_2d([0.61, 0.39]))
def test_label_encoder_only_dsel_allagree(): X_dsel_ex1 = np.array([[-1, 1], [-0.75, 0.5], [-1.5, 1.5]]) y_dsel_ex1 = np.array(['cat', 'dog', 'plane']) query = np.atleast_2d([[1, 0], [-1, -1]]) ds_test = BaseDS(create_pool_classifiers_dog(), k=2) ds_test.fit(X_dsel_ex1, y_dsel_ex1) predictions = ds_test.predict(query) assert np.array_equal(predictions, ['dog', 'dog'])
def test_frienemy_not_all_classifiers_crosses_batch(): expected = np.array([[1, 1, 0], [0, 1, 0], [1, 1, 1]]) ds_test = BaseDS(create_pool_classifiers(), safe_k=3) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.DSEL_processed_ = dsel_processed_ex1 # passing three samples to compute the DFP at the same time result = ds_test._frienemy_pruning(neighbors_ex1) assert np.array_equal(result, expected)
def test_predict_proba_all_agree(): query = np.atleast_2d([1, 1]) ds_test = BaseDS(create_pool_classifiers()) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.DSEL_scores = dsel_scores_ex1 backup_all_agree = BaseDS._all_classifier_agree BaseDS._all_classifier_agree = MagicMock(return_value=np.array([True])) proba = ds_test.predict_proba(query) BaseDS._all_classifier_agree = backup_all_agree assert np.allclose(proba, np.atleast_2d([0.61, 0.39]))
def test_predict_proba_instance_called(index): query = np.atleast_2d([1, 1]) ds_test = BaseDS(create_pool_classifiers(), with_IH=True, IH_rate=0.10) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.neighbors = neighbors_ex1[index, :] ds_test.distances = distances_ex1[index, :] ds_test.predict_proba_with_ds = MagicMock(return_value=np.atleast_2d([0.25, 0.75])) proba = ds_test.predict_proba(query) assert np.allclose(proba, np.atleast_2d([0.25, 0.75]))
def test_predict_proba_IH_knn(index): query = np.atleast_2d([1, 1]) ds_test = BaseDS(create_pool_classifiers(), with_IH=True, IH_rate=0.5) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.DSEL_scores = dsel_scores_ex1 ds_test.neighbors = neighbors_ex1[index, :] ds_test.distances = distances_ex1[index, :] ds_test.roc_algorithm_.predict_proba = MagicMock(return_value=np.atleast_2d([0.45, 0.55])) proba = ds_test.predict_proba(query) assert np.allclose(proba, np.atleast_2d([0.45, 0.55]))
def test_label_encoder_only_dsel(): X_dsel_ex1 = np.array([[-1, 1], [-0.75, 0.5], [-1.5, 1.5]]) y_dsel_ex1 = np.array(['cat', 'dog', 'plane']) query = np.atleast_2d([[1, 0], [-1, -1]]) ds_test = BaseDS(create_pool_classifiers_dog_cat_plane(), k=2) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.classify_with_ds = Mock() ds_test.classify_with_ds.return_value = [1, 0] predictions = ds_test.predict(query) assert np.array_equal(predictions, ['dog', 'cat'])
def test_frienemy_not_all_classifiers_crosses(example_estimate_competence, create_pool_classifiers): expected = np.array([[1, 1, 0], [0, 1, 0], [1, 1, 1]]) X, y, neighbors, _, dsel_processed, _ = example_estimate_competence ds_test = BaseDS(create_pool_classifiers, safe_k=3) ds_test.fit(X, y) ds_test.DSEL_processed_ = dsel_processed # passing three samples to compute the DFP at the same time result = ds_test._frienemy_pruning(neighbors) assert np.array_equal(result, expected)
def test_frienemy_safe_region_batch(): n_samples = 10 n_classifiers = 3 expected = np.ones((n_samples, n_classifiers)) ds_test = BaseDS(create_pool_classifiers(), safe_k=3) ds_test.fit(X_dsel_ex1, y_dsel_ex1) ds_test.DSEL_processed_ = dsel_processed_ex1 neighbors = np.tile(np.array([0, 1, 2, 6, 7, 8, 14]), (n_samples, 1)) result = ds_test._frienemy_pruning(neighbors) assert np.array_equal(result, expected)
def test_predict_proba_all_agree(example_estimate_competence, create_pool_classifiers): X, y, _, _, _, dsel_scores = example_estimate_competence query = np.atleast_2d([1, 1]) ds_test = BaseDS(create_pool_classifiers) ds_test.fit(X, y) ds_test.DSEL_scores = dsel_scores backup_all_agree = BaseDS._all_classifier_agree BaseDS._all_classifier_agree = MagicMock(return_value=np.array([True])) proba = ds_test.predict_proba(query) BaseDS._all_classifier_agree = backup_all_agree assert np.allclose(proba, np.atleast_2d([0.61, 0.39]))
def test_IH_is_used(example_estimate_competence, create_pool_classifiers): X, y, neighbors, distances, dsel_processed, _ = example_estimate_competence expected = [0, 0, 1] query = np.ones((3, 2)) ds_test = BaseDS(create_pool_classifiers, with_IH=True, IH_rate=0.5) ds_test.fit(X, y) ds_test.DSEL_processed_ = dsel_processed ds_test._get_region_competence = MagicMock(return_value=(distances, neighbors)) predicted = ds_test.predict(query) assert np.array_equal(predicted, expected)