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
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]