Exemple #1
0
    def uncertainty_values(self, data, target, X_train, y_train, X_full,
                           y_full, train_idx):
        print("START: ST")
        # initializing the active learner
        learner = ActiveLearner(estimator=RandomForestClassifier(),
                                query_strategy=margin_sampling,
                                X_training=X_train,
                                y_training=y_train)
        print('%f' % learner.score(X_full, y_full))
        index = 0
        # learning until the accuracy reaches a given threshold
        while learner.score(X_full, y_full) < 0.90:
            stream_idx = np.random.choice(range(len(X_full)))
            if classifier_uncertainty(learner, X_full[stream_idx].reshape(
                    1, -1)) >= 0.4:

                print("[ %1.3f, %1.3f]" %
                      (classifier_uncertainty(
                          learner, X_full[stream_idx].reshape(1, -1))[0],
                       classifier_margin(learner, X_full[stream_idx].reshape(
                           1, -1))[0]))

                learner.teach(X_full[stream_idx].reshape(1, -1),
                              y_full[stream_idx].reshape(-1, ))
                learner_score = learner.score(X_full, y_full)
                # print('Item no. %d queried, new accuracy: %f' % (stream_idx, learner_score))
                # print('%f' % (learner_score))
                if index == 50:
                    break
                index = index + 1
        print("START: ST")
Exemple #2
0
def jetze_sampler(classifier, X, n_instances=1, **uncertainty_measure_kwargs):
    """
    Sample randomly with weights based on the margin
    :param classifier:
    :param X:
    :param n_instances:
    :param uncertainty_measure_kwargs:
    :return:
    """
    margin = classifier_margin(classifier, X, **uncertainty_measure_kwargs)

    sample_weights = margin / np.sum(margin)

    query_idx = np.random.choice(range(len(margin)),
                                 size=n_instances,
                                 p=sample_weights)
    return query_idx, X[query_idx]
# linear_combination will return 1.0*classifier_uncertainty + 1.0*classifier_margin
linear_combination = make_linear_combination(
    classifier_uncertainty, classifier_margin,
    weights=[1.0, 1.0]
)
# product will return (classifier_uncertainty**0.5)*(classifier_margin**0.1)
product = make_product(
    classifier_uncertainty, classifier_margin,
    exponents=[0.5, 0.1]
)

# visualizing the different utility metrics
with plt.style.context('seaborn-white'):
    utilities = [
        (1, classifier_uncertainty(learner, X), 'Classifier uncertainty'),
        (2, classifier_margin(learner, X), 'Classifier margin'),
        (3, linear_combination(learner, X), '1.0*uncertainty + 1.0*margin'),
        (4, product(learner, X), '(uncertainty**0.5)*(margin**0.5)')
    ]

    plt.figure(figsize=(18, 14))
    for idx, utility, title in utilities:
        plt.subplot(2, 2, idx)
        plt.scatter(x=X[:, 0], y=X[:, 1], c=utility, cmap='viridis', s=50)
        plt.title(title)
        plt.colorbar()

    plt.show()


# defining the custom query strategy, which uses the linear combination of