예제 #1
0
    def test_compute_dp_sum(self):
        params = dp_computations.MeanVarParams(
            eps=0.5,
            delta=1e-10,
            min_value=2,
            max_value=3,
            max_partitions_contributed=1,
            max_contributions_per_partition=1,
            noise_kind=NoiseKind.LAPLACE)
        l0_sensitivity = params.l0_sensitivity()
        linf_sensitivity = params.max_contributions_per_partition * max(
            params.min_value, params.max_value)

        # Laplace Mechanism
        l1_sensitivity = dp_computations.compute_l1_sensitivity(
            l0_sensitivity, linf_sensitivity)
        results = [
            dp_computations.compute_dp_sum(sum=10, dp_params=params)
            for _ in range(N_ITERATIONS)
        ]
        self._test_laplace_noise(results, 10, params.eps, l1_sensitivity)

        # Gaussian Mechanism
        params.noise_kind = NoiseKind.GAUSSIAN
        l2_sensitivity = dp_computations.compute_l2_sensitivity(
            l0_sensitivity, linf_sensitivity)
        results = [
            dp_computations.compute_dp_sum(sum=10, dp_params=params)
            for _ in range(N_ITERATIONS)
        ]
        self._test_gaussian_noise(results, 10, params.eps, params.delta,
                                  l2_sensitivity)
예제 #2
0
 def mean_var_params(self):
     return dp_computations.MeanVarParams(
         self.eps, self.delta, self.aggregate_params.min_value,
         self.aggregate_params.max_value,
         self.aggregate_params.max_partitions_contributed,
         self.aggregate_params.max_contributions_per_partition,
         self.aggregate_params.noise_kind)
예제 #3
0
 def test_l0_sensitivity(self):
     params = dp_computations.MeanVarParams(
         eps=1,
         delta=1e-10,
         min_value=2,
         max_value=3,
         max_partitions_contributed=4,
         max_contributions_per_partition=5,
         noise_kind=NoiseKind.LAPLACE)
     self.assertEqual(params.l0_sensitivity(), 4)
예제 #4
0
    def test_compute_dp_var(self):
        params = dp_computations.MeanVarParams(
            eps=10,
            delta=1e-10,
            min_value=1,
            max_value=20,
            max_partitions_contributed=1,
            max_contributions_per_partition=1,
            noise_kind=NoiseKind.LAPLACE)

        (count_eps,
         count_delta), (_, _), (_, _) = dp_computations.equally_split_budget(
             params.eps, params.delta, 3)
        l0_sensitivity = params.l0_sensitivity()
        count_linf_sensitivity = params.max_contributions_per_partition

        # Laplace Mechanism
        results = [
            dp_computations.compute_dp_var(count=100000,
                                           sum=1000000,
                                           sum_squares=20000000,
                                           dp_params=params)
            for _ in range(N_ITERATIONS)
        ]
        count_values, sum_values, sum_squares_values, var_values = zip(
            *results)
        self._test_laplace_noise(
            count_values, 100000, count_eps,
            dp_computations.compute_l1_sensitivity(l0_sensitivity,
                                                   count_linf_sensitivity))
        self.assertAlmostEqual(np.mean(sum_values), 1000000, delta=1)
        self.assertAlmostEqual(np.mean(sum_squares_values), 20000000, delta=2)
        self.assertAlmostEqual(np.mean(var_values), 100, delta=0.1)

        # Gaussian Mechanism
        params.noise_kind = NoiseKind.GAUSSIAN
        results = [
            dp_computations.compute_dp_var(count=100000,
                                           sum=1000000,
                                           sum_squares=20000000,
                                           dp_params=params)
            for _ in range(N_ITERATIONS)
        ]
        count_values, sum_values, sum_squares_values, var_values = zip(
            *results)
        self._test_gaussian_noise(
            count_values, 100000, count_eps, count_delta,
            dp_computations.compute_l2_sensitivity(l0_sensitivity,
                                                   count_linf_sensitivity))
        self.assertAlmostEqual(np.mean(sum_values), 1000000, delta=5)
        self.assertAlmostEqual(np.mean(sum_squares_values), 20000000, delta=5)
        self.assertAlmostEqual(np.mean(var_values), 100, delta=0.5)