def test_proba_with_ds_diff_sizes(create_pool_classifiers):
    query = np.ones((10, 2))
    predictions = np.ones((5, 3))
    probabilities = np.ones((5, 3, 2))
    des_test = BaseDES(create_pool_classifiers)

    with pytest.raises(ValueError):
        des_test.predict_proba_with_ds(query, predictions, probabilities)
def test_predict_proba_hybrid(create_pool_classifiers):
    query = np.array([-1, 1])
    pool_classifiers = create_pool_classifiers + create_pool_classifiers
    des_test = BaseDES(pool_classifiers, mode='hybrid')
    des_test.n_classes_ = 2

    selected_indices = [0, 1, 5]
    competences = np.array([[0.55, 1.0, 0.2, 0.60, 0.75, 0.3]])

    expected = np.array([0.5744, 0.4256])

    des_test.estimate_competence = MagicMock(return_value=competences)

    selected_classifiers = np.zeros((1, 6), dtype=bool)
    selected_classifiers[0, selected_indices] = 1
    des_test.select = MagicMock(return_value=selected_classifiers)

    predictions = []
    probabilities = []
    for clf in des_test.pool_classifiers:
        predictions.append(clf.predict(query)[0])
        probabilities.append(clf.predict_proba(query)[0])

    query = np.atleast_2d(query)
    predictions = np.atleast_2d(predictions)
    probabilities = np.array(probabilities)
    probabilities = np.expand_dims(probabilities, axis=0)

    predicted_proba = des_test.predict_proba_with_ds(query, predictions,
                                                     probabilities)
    assert np.isclose(predicted_proba, expected, atol=0.01).all()
def test_predict_proba_selection(create_pool_classifiers):
    query = np.array([-1, 1])
    pool_classifiers = create_pool_classifiers + create_pool_classifiers
    des_test = BaseDES(pool_classifiers, mode='selection')
    selected_indices = np.array([0, 1, 5])
    selected_classifiers = np.zeros((1, 6), dtype=bool)
    selected_classifiers[0, selected_indices] = 1
    des_test.select = MagicMock(return_value=selected_classifiers)

    des_test.n_classes_ = 2
    expected = np.array([0.61, 0.39])

    predictions = []
    probabilities = []
    for clf in des_test.pool_classifiers:
        predictions.append(clf.predict(query)[0])
        probabilities.append(clf.predict_proba(query)[0])

    query = np.atleast_2d(query)
    predictions = np.atleast_2d(predictions)
    probabilities = np.array(probabilities)
    probabilities = np.expand_dims(probabilities, axis=0)

    predicted_proba = des_test.predict_proba_with_ds(query, predictions,
                                                     probabilities)
    assert np.isclose(predicted_proba, expected, atol=0.01).all()
Exemple #4
0
def test_predict_proba_weighting_hard_voting(create_pool_classifiers):
    query = np.array([[-1, 1]])
    expected = np.array([0.4117, 0.5883])
    competences = np.array([[0.5, 1.0, 0.2]])
    predictions = np.array([[0, 1, 0]])
    pool_classifiers = create_pool_classifiers

    des_test = BaseDES(pool_classifiers, mode='weighting', voting='hard')
    des_test.estimate_competence = MagicMock(return_value=competences)
    des_test.n_classes_ = 2

    predicted_proba = des_test.predict_proba_with_ds(predictions)
    assert np.isclose(predicted_proba, expected, atol=0.01).all()
Exemple #5
0
def test_predict_proba_selection_hard_voting(create_pool_classifiers):
    query = np.array([[-1, 1]])
    expected = np.array([0.66, 0.33])
    predictions = np.array([[0, 1, 0, 0, 1, 0]])
    pool_classifiers = create_pool_classifiers + create_pool_classifiers
    selected_indices = np.array([[True, True, False, False, False, True]])

    des_test = BaseDES(pool_classifiers, mode='selection', voting='hard')
    des_test.n_classes_ = 2
    des_test.select = MagicMock(return_value=selected_indices)

    predicted_proba = des_test.predict_proba_with_ds(predictions)
    assert np.isclose(predicted_proba, expected, atol=0.01).all()
Exemple #6
0
def test_predict_proba_hybrid_hard_voting(create_pool_classifiers):
    query = np.array([[-1, 1]])
    expected = np.array([0.4594, 0.5405])
    competences = np.array([[0.55, 1.0, 0.2, 0.60, 0.75, 0.3]])
    predictions = np.array([[0, 1, 0, 0, 1, 0]])
    selected_indices = np.array([[True, True, False, False, False, True]])
    pool_classifiers = create_pool_classifiers + create_pool_classifiers

    des_test = BaseDES(pool_classifiers, mode='hybrid', voting='hard')
    des_test.n_classes_ = 2
    des_test.estimate_competence = MagicMock(return_value=competences)
    des_test.select = MagicMock(return_value=selected_indices)

    predicted_proba = des_test.predict_proba_with_ds(predictions)
    assert np.isclose(predicted_proba, expected, atol=0.01).all()
Exemple #7
0
def test_predict_proba_weighting_soft_voting(create_pool_classifiers):
    query = np.array([[-1, 1]])
    expected = np.array([0.5769, 0.4231])
    competences = np.array([[0.5, 1.0, 0.2]])
    predictions = np.array([[0, 1, 0]])
    probabilities = np.array([[[0.5, 0.5], [1., 0.], [0.33, 0.67]]])
    pool_classifiers = create_pool_classifiers

    des_test = BaseDES(pool_classifiers, mode='weighting', voting='soft')
    des_test.estimate_competence = MagicMock(return_value=competences)
    des_test.n_classes_ = 2

    predicted_proba = des_test.predict_proba_with_ds(predictions,
                                                     probabilities)
    assert np.isclose(predicted_proba, expected, atol=0.01).all()
Exemple #8
0
def test_predict_proba_selection_soft_voting(create_pool_classifiers):
    query = np.array([[-1, 1]])
    expected = np.array([0.61, 0.39])
    predictions = np.array([[0, 1, 0, 0, 1, 0]])
    probabilities = np.array([[[0.5, 0.5], [1., 0.], [0.33, 0.67],
                               [0.5, 0.5], [1., 0.], [0.33, 0.67]]])
    selected_indices = np.array([[True, True, False, False, False, True]])
    pool_classifiers = create_pool_classifiers + create_pool_classifiers

    des_test = BaseDES(pool_classifiers, mode='selection', voting='soft')
    des_test.select = MagicMock(return_value=selected_indices)
    des_test.n_classes_ = 2

    predicted_proba = des_test.predict_proba_with_ds(predictions,
                                                     probabilities)
    assert np.isclose(predicted_proba, expected, atol=0.01).all()
def test_predict_proba_weighting(create_pool_classifiers):
    query = np.array([-1, 1])
    pool_classifiers = create_pool_classifiers
    des_test = BaseDES(pool_classifiers, mode='weighting')
    competences = np.array([[0.5, 1.0, 0.2]])
    des_test.estimate_competence = MagicMock(return_value=competences)

    des_test.n_classes_ = 2
    expected = np.array([0.5769, 0.4231])

    predictions = []
    probabilities = []
    for clf in des_test.pool_classifiers:
        predictions.append(clf.predict(query)[0])
        probabilities.append(clf.predict_proba(query)[0])

    query = np.atleast_2d(query)
    predictions = np.atleast_2d(predictions)
    probabilities = np.array(probabilities)
    probabilities = np.expand_dims(probabilities, axis=0)

    predicted_proba = des_test.predict_proba_with_ds(query, predictions,
                                                     probabilities)
    assert np.isclose(predicted_proba, expected, atol=0.01).all()