在查询结果里加入符合拉普拉斯分布的噪声(也可以在输入或中间值加噪声),用于保护数值型敏感结果;
当 u=0,b=1 时,结果大部分都在 0 附近,也就是 ε 如果符合拉普拉斯的函数,那么数据集的偏移量大部分在 0 范围之间活动。如下图所示:
已知区间 (-1/2, 1/2] 中均匀分布上的随机变量 U,随机变量
为参数 μ 与 b 的拉普拉斯分布。
也就是将数值结果加上对应的随机变量 X 就可以得到对应的噪声数据。
一维
我们假设某个查询(例如select sum (privacy_num) from table where ...)正常应该返回3000,全部临近数据集的全局敏感度GS=1(可理解为:增减一条记录,原始的查询结果在2999~3001之间变动),隐私保护预算ε=1,GSf/ε作为尺度参数b.具体的代码如下所示:
# -*- coding: utf-8 -*- #指定字符集
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# 生成噪声数据
def get_noisy_digit(GSf, epsilon):
beta = GSf/epsilon
u = np.random.random()-0.5
noisy_digit = 0.0-beta*np.sign(u)*np.log(1.0-2*np.abs(u))
return np.rint(noisy_digit)
if __name__ =='__main__':
GSf = 1
epsilon = 1
# 统计误差在 5 之内出现的次数
count_err=0
output=[]
for i in range(100):
result = 3000
noisy = get_noisy_digit(GSf, epsilon)
if np.abs(noisy)<=5.0:
count_err+=1
result+=noisy
output.append(result)
print(count_err,"time error <5.0")
sns.set(style="white",palette="muted",color_codes=True)
sns.distplot(output)
plt.show()
执行之后的结果如下所示: (99, 'time error <5.0')
总共 100 次,99 次的误差范围是在 5 之内,如上图所示大部分数据是在原数据值附近,只是有一些偏差,但是不影响后续的数据计算结果。
所以在查询结果里加入符合拉普拉斯分布的噪声(也可以在输入或中间值加噪声),用于保护数值型敏感结果。
二维
在上面的例子中,我们只用了一个维度,但实际查询往往是多维的(返回结果包含多个值),这里我们增加一个维度,假设某次查询的结果是(3000, 10),全局敏感度增加为5,我们看看第二个维度的输出干扰情况,具体代码如下所示:
# -*- coding: utf-8 -*- #指定字符集
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# 生成噪声数据
def get_noisy_digit(GSf, epsilon):
beta = GSf/epsilon
u = np.random.random()-0.5
noisy_digit = 0.0-beta*np.sign(u)*np.log(1.0-2*np.abs(u))
return np.rint(noisy_digit)
if __name__ =='__main__':
GSf = 5
epsilon = 1
# 统计误差在 5 之内出现的次数
output=[]
for i in range(1000):
result = [3000,10]
noisy1 = get_noisy_digit(GSf, epsilon)
result[0]+=noisy1
noisy2 = get_noisy_digit(GSf, epsilon)
result[1]+=noisy2
output.append(result[0])
sns.set(style="white",palette="muted",color_codes=True)
sns.distplot(output)
plt.show()
一维的结果如下所示:
二维的结果如下所示:
二维的范围从 2 到 16,相对于10 来说已经发生较大的变化,噪声过大可能就偏离原来的数值。
表明差分隐私的全局敏感度对于单个返回值的场景表现较好,但不太适合复杂的具有多个返回值的复杂查询场景,特别是多个返回值不在同一量级时;如果使用局部敏感度,可能会造成隐私泄露;这时可能需要引入新的敏感度或算法。