def irfil_inversion()

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