Beispiel #1
0
    def __init__(self, X_modified, Y_modified, X_test, Y_test, idx_train,
                 idx_poison):
        self.X_modified = X_modified
        self.Y_modified = Y_modified
        self.X_test = X_test
        self.Y_test = Y_test
        self.idx_train = idx_train
        self.idx_poison = idx_poison

        self.X_train = X_modified[idx_train, :]
        self.Y_train = Y_modified[idx_train]
        self.X_poison = X_modified[idx_poison, :]
        self.Y_poison = Y_modified[idx_poison]

        self.class_map = data.get_class_map()
        self.emp_centroids = data.get_centroids(self.X_modified,
                                                self.Y_modified,
                                                self.class_map)
        self.true_centroids = data.get_centroids(self.X_train, self.Y_train,
                                                 self.class_map)
        self.emp_centroid_vec = data.get_centroid_vec(self.emp_centroids)
        self.true_centroid_vec = data.get_centroid_vec(self.true_centroids)

        # Fraction of bad data / good data (so in total, there's 1+epsilon * good data )
        self.epsilon = self.X_poison.shape[0] / self.X_train.shape[0]
Beispiel #2
0
    def __init__(self, X_modified, Y_modified, X_test, Y_test, idx_train,
                 idx_poison, sub_trn_x, sub_trn_y, nsub_trn_x, nsub_trn_y,
                 sub_tst_x, sub_tst_y, nsub_tst_x, nsub_tst_y):
        self.X_modified = X_modified
        self.Y_modified = Y_modified
        self.X_test = X_test
        self.Y_test = Y_test
        self.idx_train = idx_train
        self.idx_poison = idx_poison
        # subpopulation related info
        self.sub_trn_x = sub_trn_x
        self.sub_trn_y = sub_trn_y
        self.nsub_trn_x = nsub_trn_x
        self.nsub_trn_y = nsub_trn_y
        self.sub_tst_x = sub_tst_x
        self.sub_tst_y = sub_tst_y
        self.nsub_tst_x = nsub_tst_x
        self.nsub_tst_y = nsub_tst_y

        self.X_train = X_modified[idx_train, :]
        self.Y_train = Y_modified[idx_train]
        self.X_poison = X_modified[idx_poison, :]
        self.Y_poison = Y_modified[idx_poison]

        self.class_map = data.get_class_map()
        self.emp_centroids = data.get_centroids(self.X_modified,
                                                self.Y_modified,
                                                self.class_map)
        self.true_centroids = data.get_centroids(self.X_train, self.Y_train,
                                                 self.class_map)
        self.emp_centroid_vec = data.get_centroid_vec(self.emp_centroids)
        self.true_centroid_vec = data.get_centroid_vec(self.true_centroids)

        # Fraction of bad data / good data (so in total, there's 1+epsilon * good data )
        self.epsilon = self.X_poison.shape[0] / self.X_train.shape[0]
Beispiel #3
0
print('\n')

results['test']['leverage'] = leverage

if (min_leverage is not None) and (leverage < min_leverage):
    print('Leverage is below specified min_leverage. Skipping defenses...')

elif no_defense:
    print('Skipping defenses...')

else:

    ### Q-based defenses
    print('## Running Q-based defenses')

    class_map = data.get_class_map()

    for use_emp, use_emp_label in [(True, 'emp'), (False, 'true')]:

        if use_emp:
            print('Using poisoned data to calculate centroids/covariances:')
            centroids = datadef.emp_centroids
        else:
            print('Using true data to calculate centroids/covariances:')
            centroids = datadef.true_centroids
        centroid_vec = data.get_centroid_vec(centroids)

        ## Distance in the direction of the vector between centroids ("slab")
        defense_label = 'centroid-vec'
        if ((defense_to_test is None) or (defense_to_test == defense_label)):
            print(