예제 #1
0
def fit_attack(X, y, outlier_distance_threshold=1):
    attack = GeneralTikhonovAttack(step_size=5, max_steps=5000,
                                   lasso_lambda=alpha_lambda,
                                   boundary=boundary,
                                   outlier_method='distancethreshold',
                                   outlier_distance_threshold=outlier_distance_threshold)
    attack.fit(X, y, starting_position=attack_starting_position)
    return attack
def fit_attack(X, y):
    attack = GeneralTikhonovAttack(step_size=5, max_steps=5000,
                                   lasso_lambda=0.02,
                                   boundary=boundary,
                                   outlier_method='distancethreshold',
                                   outlier_distance_threshold=1)
    attack.fit(X, y)
    return attack
def fit_attack(X, y):
    attack = GeneralTikhonovAttack(step_size=150,
                                   max_steps=5000,
                                   lasso_lambda=0.02,
                                   boundary=boundary,
                                   outlier_method='kthdistance',
                                   outlier_weight=0.005,
                                   outlier_power=2,
                                   outlier_k=3)
    attack.fit(X, y)
    return attack
예제 #4
0
    x_train = dataset['train'][:, :-1]
    y_train = (dataset['train'][:, -1] * 2) - 1
    x_test_full = dataset['test'][:, :-1]
    use = np.random.choice(x_test_full.shape[0], num_test)
    x_test = x_test_full[use, :]

    # Generate the Attack Points
    boundary = np.concatenate((boundary_mins[i] * np.ones(
        (1, x_test.shape[1])), boundary_maxs[i] * np.ones(
            (1, x_test.shape[1]))))
    if outlier_method == 'distancethreshold':
        attack = GeneralTikhonovAttack(
            boundary=boundary,
            step_size=step_sizes[i],
            max_steps=num_steps[i],
            outlier_method='distancethreshold',
            outlier_weight=outlier_weight,
            outlier_distance_threshold=outlier_distance_threshold,
            outlier_k=outlier_k)
    else:
        attack = GeneralTikhonovAttack(boundary=boundary,
                                       step_size=step_sizes[i],
                                       max_steps=num_steps[i])

    print('fitting attack to training data')
    attack.fit(x_train, y_train)
    successful_load = True
    if LOAD_ATTACK_POINTS:
        print('loading attack points')
        try:
            attack_points = np.loadtxt(
예제 #5
0
for i, (dataset_name, dataset) in enumerate(datasets.items()):

    x_train = dataset['train'][:, :-2]
    y_train = (dataset['train'][:, -1] * 2) - 1
    x_test_full = dataset['test'][:, :-2]
    use = np.random.choice(x_test_full.shape[0], num_test)
    x_test = x_test_full[use, :]

    # Generate the Attack Points
    boundary = np.concatenate((boundary_mins[i] * np.ones((1, x_test.shape[1])),
                               boundary_maxs[i] * np.ones((1, x_test.shape[1]))))
    if outlier_method == 'distancethreshold':
        attack = GeneralTikhonovAttack(boundary=boundary,
                                       step_size=step_sizes[i],
                                       max_steps=num_steps[i],
                                       lasso_lambda=lasso_lambda,
                                       outlier_method='distancethreshold',
                                       outlier_weight=outlier_weight,
                                       outlier_distance_threshold=outlier_distance_threshold,
                                       outlier_k=outlier_k)
    else:
        attack = GeneralTikhonovAttack(boundary=boundary, step_size=step_sizes[i],
                                       max_steps=num_steps[i], lasso_lambda=lasso_lambda)

    attack.fit(x_train, y_train)
    attack_points = np.zeros((num_attack, x_train.shape[1]))
    for a in range(num_attack):
        print('generating attack point {} of {} for {}'.format(a+1, num_attack, dataset_name))
        x_attack, y_attack = attack.get_attack_point()
        attack_points[a, :] = x_attack

    print(attack_points)
예제 #6
0
def fit_attack(X, y):
    attack = GeneralTikhonovAttack(lasso_lambda=0.02, boundary=boundary)
    attack.fit(X, y)
    return attack
    boundary_max = 20
elif dataset_name is 'congressional-voting':
    data_train_x = congressional_voting_train[:, :-2]
    data_train_y = (congressional_voting_train[:, -1] * 2) - 1
    data_test_x = congressional_voting_test[:, :-2]
    data_test_y = (congressional_voting_test[:, -1] * 2) - 1
    step_size = 500
    max_steps = 1000
    boundary_min = -20
    boundary_max = 20

boundary = np.concatenate((boundary_min * np.ones(
    (1, data_test_x.shape[1])), boundary_max * np.ones(
        (1, data_test_x.shape[1]))))
attack = GeneralTikhonovAttack(boundary=boundary,
                               step_size=step_size,
                               max_steps=max_steps)
attack.fit(data_test_x, data_test_y)
attack_x, attack_y = attack.get_attack_point_trajectory()

print(attack_x[-1, :])

plt.figure(figsize=(12, 11))
for i in range(num_d):
    for j in range(num_d):
        print((i * num_d) + j + 1)
        subplot = plt.subplot(num_d, num_d, (i * num_d) + j + 1)
        if i == j:
            plt.hist(data_test_x[:, i])
        else:
            plt_color = np.where(data_test_y == 1, 'b', 'r')
data_train_y = (datasets[dataset_name]['train'][:, -1] * 2) - 1
data_test_x = datasets[dataset_name]['test'][:, :-2]
data_test_y = (datasets[dataset_name]['test'][:, -1] * 2) - 1

# Setup Defender
defender = OnlineLasso(alpha=alpha_lambda)

# Setup Classifiers
lasso = OnlineLasso(alpha=alpha_lambda)
steps = [('KthNeighbor', KthNeighbor(outlier_distance_threshold=distance_threshold)),
         ('Lasso', OnlineLasso(alpha=alpha_lambda))]
lasso_outlier = Pipeline(steps)

# Setup Attacks
attack_lasso = GeneralTikhonovAttack(lasso_lambda=alpha_lambda,
                                     step_size=5000,
                                     max_steps=1000)
attack_lasso_outlier = GeneralTikhonovAttack(lasso_lambda=alpha_lambda,
                                             step_size=5000,
                                             max_steps=1000,
                                             outlier_method='distancethreshold',
                                             outlier_distance_threshold=distance_threshold)

# Setup Attack Pairs
attack_pairs = AttackPairs()
attack_pairs.add(lasso, attack_lasso, 1)
attack_pairs.add(lasso_outlier, attack_lasso_outlier, 1)
attack_pairs.fit_all(data_train_x, data_train_y)

# Setup Ensemble
ensemble = PoisonEnsemble(attack_pairs, data_test_x, defender=defender)