in scripts/make_figures.py [0:0]
def irfil_inversion(results_path, dataset, save_path):
noise_scale = "0.001"
its = 10
irfil_results = load_results(results_path, f"{dataset}_least_squares_irfil.json")
etas = np.array(irfil_results["etas"])
eta_means = np.array(irfil_results["eta_means"])[:its]
eta_stds = np.array(irfil_results["eta_stds"])[:its]
plotting.line_plot(
eta_means[None, :], np.arange(its),
xlabel="Steps of IRFIL",
ylabel="Mean $\\bar{\eta}$",
errors=eta_stds[None, :],
size=(4.85, 5.05),
filename=os.path.join(args.save_path, f"{dataset}_mean_fil"),
)
def compute_correct_ratio(etas, num_bins, predictions, target):
order = etas.argsort()
bin_size = len(target) // num_bins + 1
bin_accs = []
for prediction in predictions:
prediction = np.array(prediction)
correct = (prediction == target)
bin_accs.append([correct[order[lower:lower + bin_size]].mean()
for lower in range(0, len(correct), bin_size)])
return np.array(bin_accs)
inversion_results = load_results(
results_path,
f"{dataset}_least_squares_whitebox_private_inversion_irfil.json")
target = np.array(inversion_results[0]["target"])
num_bins = 10
ratio_means = []
ratio_stds = []
its = [0, 2, 10]
for it in its:
predictions = inversion_results[it][noise_scale]['predictions']
ratios = compute_correct_ratio(etas, num_bins, predictions, target)
ratio_means.append(ratios.mean(axis=0))
ratio_stds.append(ratios.std(axis=0))
ratio_means = np.array(ratio_means)
ratio_stds = np.array(ratio_stds)
plotting.line_plot(
ratio_means, np.arange(num_bins),
legend=["Iteration {}".format(it) for it in its],
xlabel="FIL ($\eta$) percentile",
ylabel="Attribute inversion accuracy",
errors=ratio_stds,
size=(5, 5),
filename=os.path.join(
args.save_path,
f"{dataset}_whitebox_eta_percentile"),
)