实现差异隐私的实施技术

fud*_*udu 5 python database theory statistics privacy

我目前正在使用差异隐私概念对数据集进行实验。因此,我正在尝试使用UCI Machine Repository中的样本数据集和python编程语言来实现差异隐私机制之一,即Laplace机制 。
假设我们有一个简单的计数查询,我们想知道按其“职业”分组的“ <= 50k”收入人数

SELECT 
   adult.occupation, COUNT(adult.salary_group) As NumofPeople 
FROM 
   adult
WHERE 
   adult.salary_group = '<=50K'
GROUP BY 
   adult.occupation, adult.salary_group;
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试使用的Laplace函数

import numpy as np

def laplaceMechanism(x, epsilon):
    x +=  np.random.laplace(0, 1.0/epsilon, 1)[0]
return x
Run Code Online (Sandbox Code Playgroud)

因此,我的问题是,如果我们获取数据,我该如何将其应用到我得到的数据上epsilon=2,我知道拉普拉斯机制的工作原理是将la place分布中的随机噪声添加到从查询中获得的真实答案中。一点见识将不胜感激...

Dav*_*ean 5

假设您已将链接中的csv加载到数据库中以执行sql查询,则可以通过以下方式首先将查询结果加载到pandas数据框中来应用Laplacian函数pandas.readsql()

import pandas as pd

query =  '''SELECT 
   adult.occupation, COUNT(adult.salary_group) As NumofPeople 
FROM 
   adult
WHERE 
   adult.salary_group = '<=50K'
GROUP BY 
   adult.occupation, adult.salary_group;'''

df = pd.read_sql(query, '<database-connection-string>')
Run Code Online (Sandbox Code Playgroud)

然后,您可以pandas.Series.apply()使用args来传递epsilon 来应用函数:

df['NumOfPeople]' = df['NumOfPeople'].apply(laplaceMechanism, args=(2,))
Run Code Online (Sandbox Code Playgroud)

上面的方法显然会NumOfPeople用调整后的值替换该列,您可以选择将新系列分开,将它们作为具有不同名称的新列附加到数据框,或者首先克隆该数据框以保留旧数据框。