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分布中的随机噪声添加到从查询中获得的真实答案中。一点见识将不胜感激...
假设您已将链接中的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用调整后的值替换该列,您可以选择将新系列分开,将它们作为具有不同名称的新列附加到数据框,或者首先克隆该数据框以保留旧数据框。
| 归档时间: |
|
| 查看次数: |
2598 次 |
| 最近记录: |