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")
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