在实践中,通常使用拉普拉斯机制和指数机制来实现差分隐私。拉普拉斯机制用于数值型结果的保护,指数机制用于离散型结果的保护。
拉普拉斯机制
拉普拉斯机制通过向确切的查询结果中加入服从拉普拉斯分布的随机噪声,来实现 ε-差分隐私保护 。记位置参数为0、尺度参数为b的拉普拉斯分布为Lap(b),那么其概率密度函数为: p(x)=exp(-|x|/b)/2b 。
对于拉普拉斯机制,我们进行以下定义:给定数据集D,设有函数f:D->Rd,其敏感度为Δf,那么随机算法M(D)=f(D)+Y提供ε-差分隐私保护,其中Y~Lap(Δf/ε)为随机噪声,服从尺度参数为Δf/ε的拉普拉斯分布。
示例代码:
import numpy as np
def lap_one():
realResult = 50
loc, scale = 0, 1
s = np.random.laplace(loc, scale, 10)
print(s)
result = realResult + s[0]
print(result)
def noisy_count(sensitivety, epsilon):
beta = sensitivety/epsilon
u1 = np.random.random()
u2 = np.random.random()
if u1 <= 0.5:
noisy_value = -beta*np.log(1.-u2)
else:
noisy_value = beta*np.log(u2)
return noisy_value
def laplace_mech(data,sensitivety,epsilon):
for i in range(len(data)):
data[i] += noisy_count(sensitivety,epsilon)
return data
if __name__ == "__main__":
sensitivety = 2
epsilon = 2
real_data = [1, 2, 3, 4, 5]
dp_data = laplace_mech(real_data, sensitivety, epsilon)
for item in dp_data:
print(int(item))
指数机制
设查询函数的输出域为Range,域中的每个值r∈Range为一实体对象。在指数机制下,函数q(D,r)->R成为输出值r的可用性函数,用来评估输出值r的优劣程度。
对于指数机制,我们进行以下定义:设随机算法M输入为数据集D,输出为一实体对象r∈Range,q(D,r)->R为可用性函数,Δq为函数q(D,r)->R的敏感度。若算法M以正比于exp(εq(D,r)/2Δq)的概率从Range中选择并输出r,那么算法M提供ε-差分隐私保护。