在實踐中,通常使用拉普拉斯機制和指數機制來實現差分隱私。拉普拉斯機制用於數值型結果的保護,指數機制用於離散型結果的保護。
拉普拉斯機制
拉普拉斯機制通過向確切的查詢結果中加入服從拉普拉斯分布的隨機噪聲,來實現 ε-差分隱私保護 。記位置參數為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提供ε-差分隱私保護。