def _combine(self, scores): """ Wrapping for PyOD the ensembler. Args: scores (np.float array of shape (num_anomaly_detectors, )) List of scores from multiple anomaly detectors. Returns: float: Resulting anomaly score. """ return maximization(scores)
def define_combination_methods(normalizer_name, k, norm_results): combination_methods = { normalizer_name + ' Average_' + str(k): average(norm_results), normalizer_name + ' Maximization_' + str(k): maximization(norm_results), normalizer_name + ' Aom_' + str(k): aom(norm_results, int(k / 2)), normalizer_name + ' Moa_' + str(k): moa(norm_results, int(k / 2)) } return combination_methods
def __train_classifiers(self): scaler = MinMaxScaler(feature_range=(0, 1)) X = scaler.fit_transform(self.df.copy()) classifiers = self.__load_classifiers() scores = np.zeros([X.shape[0], len(classifiers)]) for i, (clf_name, clf) in enumerate(classifiers.items()): try: clf.fit(X) scores[:, i] = clf.decision_scores_ except Exception as e: print("Failed for ", clf_name) print("because of ", e) standard_scores = standardizer(scores) combined_scores = maximization(standard_scores) return combined_scores
train_scores = np.zeros([X_train.shape[0], n_clf]) test_scores = np.zeros([X_test.shape[0], n_clf]) for i in range(n_clf): k = k_list[i] clf = KNN(n_neighbors=k, method='largest') clf.fit(X_train_norm) train_scores[:, i] = clf.decision_scores_ test_scores[:, i] = clf.decision_function(X_test_norm) # decision scores have to be normalized before combination train_scores_norm, test_scores_norm = standardizer(train_scores, test_scores) # combination by average y_by_average = average(test_scores_norm) evaluate_print('Combination by Average', y_test, y_by_average) # combination by max y_by_maximization = maximization(test_scores_norm) evaluate_print('Combination by Maximization', y_test, y_by_maximization) # combination by aom y_by_aom = aom(test_scores_norm, n_buckets=5) evaluate_print('Combination by AOM', y_test, y_by_aom) # combination by moa y_by_moa = moa(test_scores_norm, n_buckets=5) evaluate_print('Combination by MOA', y_test, y_by_moa)
def test_maximization(self): score = maximization(self.scores) assert_allclose(score, np.array([2, 4, 6]))
print('Combining {n_clf} kNN detectors'.format(n_clf=n_clf)) for i in range(n_clf): k = k_list[i] clf = KNN(n_neighbors=k, method='largest') clf.fit(X_train_norm) train_scores[:, i] = clf.decision_scores_ test_scores[:, i] = clf.decision_function(X_test_norm) # Decision scores have to be normalized before combination train_scores_norm, test_scores_norm = standardizer(train_scores, test_scores) # Combination by average y_by_average = average(test_scores_norm) evaluate_print('Combination by Average', y_test, y_by_average) # Combination by max y_by_maximization = maximization(test_scores_norm) evaluate_print('Combination by Maximization', y_test, y_by_maximization) # Combination by aom y_by_aom = aom(test_scores_norm, n_buckets=5) evaluate_print('Combination by AOM', y_test, y_by_aom) # Combination by moa y_by_moa = moa(test_scores_norm, n_buckets=5) evaluate_print('Combination by MOA', y_test, y_by_moa)