|
1 | 1 | import numpy as np |
2 | 2 |
|
3 | | -def add_laplace_noise(data, epsilon): |
4 | | - """Adds Laplace noise to data for differential privacy.""" |
5 | | - sensitivity = 1 # Assuming sensitivity of 1 for your data |
6 | | - scale = sensitivity / epsilon |
7 | | - noise = np.random.laplace(scale=scale) |
8 | | - return data + noise |
| 3 | +class DifferentialPrivacy: |
| 4 | + def __init__(self, epsilon): |
| 5 | + """Initialize the differential privacy mechanism with a given epsilon.""" |
| 6 | + self.epsilon = epsilon |
| 7 | + |
| 8 | + def add_noise(self, data): |
| 9 | + """Add Laplace noise to the data for differential privacy.""" |
| 10 | + sensitivity = self.calculate_sensitivity(data) |
| 11 | + noise = np.random.laplace(0, sensitivity / self.epsilon, size=len(data)) |
| 12 | + return data + noise |
| 13 | + |
| 14 | + def calculate_sensitivity(self, data): |
| 15 | + """Calculate the sensitivity of the data.""" |
| 16 | + # For simplicity, we assume the sensitivity is 1 for each entry |
| 17 | + return 1 |
9 | 18 |
|
10 | 19 | # Example Usage: |
11 | 20 | if __name__ == "__main__": |
12 | | - # Original data (example: number of users in each city) |
13 | | - original_data = np.array([100, 250, 150, 300]) |
14 | | - |
15 | | - # Privacy parameter (epsilon) |
16 | | - epsilon = 1.0 |
| 21 | + # Sample data |
| 22 | + data = np.array([100, 200, 300, 400, 500]) |
17 | 23 |
|
18 | | - # Add Laplace noise |
19 | | - noisy_data = add_laplace_noise(original_data, epsilon) |
| 24 | + # Initialize differential privacy with epsilon = 0.5 |
| 25 | + dp = DifferentialPrivacy(epsilon=0.5) |
20 | 26 |
|
21 | | - print("Original data:", original_data) |
22 | | - print("Noisy data:", noisy_data) |
| 27 | + # Add noise to the data |
| 28 | + private_data = dp.add_noise(data) |
| 29 | + print("Original data:", data) |
| 30 | + print("Private data with noise:", private_data) |
0 commit comments