java、python--差分隐私拉普拉斯分布(Laplace)实现

近在研究差分隐私,先用java实现了拉普拉斯分布,做了个Hive交互式接口。后来又用python画图,准备做个非交互式数据发布。

差分隐私的原理我先简单介绍一下,Apple 用它来实现信息安全。这里举一个例子来帮助理解,考虑一个医疗数据场景:


       上图显示了一个医疗数据集D,其中每条记录表示一个患者是否患有癌症,当数据集作为科研数据或者社会调研被发布出来时,他对用户仅提供前n 行的统计查询服务,这里选取计数查询,用count (n) 表示前n 行里有多少个人患有癌症。

       这里攻击者A 知道Jack 排在第3行(医疗数据记录一般按一定顺序排列,例如身份证号等),由于不能直接访问D(注意 D 仅提供 count (n) 查询服务), A 一开始并不知道Jack 的第二列属性值是否为1,但是A 可以通过如下攻击获取Jack 的个人隐私信息(是否患有癌症):count (3) - count (2)。

       那么差分隐私技术在该案例中是如何保证信息安全的呢?我们可以把删除掉Jack 一行的数据集(或修改)看成D',要求A 根据D 获取的count 值,与根据D' 获取的count 值的概率分布差不多,假设count (3) 的输出可能来自{1.5, 2},那么count (2) 以近似的概率输出{1.5, 2} 中的任意值,Laplace 机制便能实现此功能,具体证明这里就不说了都是复杂的数学公式。 ϵ-DP的 ϵ 值就是用来控制概率分布的相似性,当 ϵ 越小时,exp( ϵ ) 越接近于1。

       拉普拉斯分布图:

   


       废话不说上代码,java代码:

[java]  view plain  copy
  1. import org.apache.commons.math3.distribution.LaplaceDistribution;  
  2. double laplaceMechanismCount(long realCountResult, double epsilon) {  
  3. LaplaceDistribution ld = new LaplaceDistribution(01 / epsilon);  
  4. double noise = ld.sample();  
  5. return realCountResult + noise;  
  6. }  
      python代码:

[python]  view plain  copy
  1. import numpy as np  
  2. loc, scale = 0.1.  
  3. s = np.random.laplace(loc, scale, 1)  
  4. ss=s[0]  
  5. print ss  
其中epsilon和scale调节保护性的大小。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值