差分隐私的定义
数据的距离:
对于数据库 x ,它的第一范数为:
两个数据库 x 和 y 的 距离是。对于表示数据库x的大小。表示数据x和y不同元素的个数
:
定义1:一个随机算法M,其值域范围为,对于所有的,和对于所有的x和y, 满足有:
当时,其满足differential private
Laplace 机制
通过Laplace 函数可以个某个查询f增加噪音,实现差分隐私
定义2:Laplace 分布,随机变量x满足以下式子,其中a,b是参数
服从这个分布的随机变量满足
在利用Laplace 增加噪音实现差分隐私时,需要将均值a,设置为0,我们将此事的Laplace 密度函数记作
定义3:函数f 的ℓ1敏感度,对于一个函数 ,有
定义4:Laplace 机制:对于函数 ,Laplace 机制 M 被定义满足如下:
其中是分别独立地从获得的随机变量
实验实现
Laplace 函数图形:
import matplotlib.pyplot as plt
import numpy as np
def laplace_function(x, beta):
result = (1 / (2 * beta)) * np.e ** (-1 * (np.abs(x) / beta))
return result
# 在-5到5之间等间隔的取10000个数
x = np.linspace(-5, 5, 10000)
y1 = [laplace_function(x_, 0.5) for x_ in x]
y2 = [laplace_function(x_, 1) for x_ in x]
y3 = [laplace_function(x_, 2) for x_ in x]
plt.plot(x, y1, color='r', label='beta:0.5')
plt.plot(x, y2, color='g', label='beta:1')
plt.plot(x, y3, color='b', label='beta:2')
plt.title("Laplace distribution")
plt.legend()
plt.show()
Laplace 的分布
import matplotlib.pyplot as plt
import numpy as np
def count_zft():
i=0
sums=0
xx=np.random.laplace(0,1,100)
sums=sum(xx)
return sums
# print(sums)
if __name__=='__main__':
vec = list()
j=0;
while j<100000:
vec.append(count_zft())
j+=1
n, bins, patches = plt.hist(vec, 100, density=True, facecolor='g', alpha=0.75)
plt.xlabel('sum of nosiy')
plt.ylabel('Probability')
plt.title('')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([-40, 40, 0, 0.06])
plt.grid(True)
plt.show()