def al_stream(self, data, target, X_train, y_train, X_full, y_full, train_idx):
        # initializing the active learner
        acc = []
        learner = ActiveLearner(
            estimator=RandomForestClassifier(),
            query_strategy=margin_sampling,
            X_training=X_train, y_training=y_train
        )

        # print('Initial prediction accuracy: %f' % learner.score(X_full, y_full))
        index = 0
        # learning until the accuracy reaches a given threshold
        xx = 0;
        while learner.score(X_full, y_full) < 0.90:
            print(xx)
            xx = xx + 1
            stream_idx = np.random.choice(range(len(X_full)))
            if classifier_entropy(learner, X_full[stream_idx].reshape(1, -1)) >= 0.2:
                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('%0.3f' % (learner_score), end=",")
                if index == self.query_number:
                    break
                index = index + 1
                acc.append(learner_score)
        return acc
Esempio n. 2
0
def rob_sampler(classifier, X, n_instances=1, **uncertainty_measure_kwargs):
    """
    Sample randomly with sample weights based on entropy
    :param classifier:
    :param X:
    :param n_instances:
    :param uncertainty_measure_kwargs:
    :return:
    """
    entropy = classifier_entropy(classifier, X, **uncertainty_measure_kwargs)

    sample_weights = entropy / np.sum(entropy)

    query_idx = np.random.choice(range(len(entropy)),
                                 size=n_instances,
                                 p=sample_weights)
    return query_idx, X[query_idx]