java、python--差分隐私拉普拉斯分布(Laplace)实现
2017-08-22 11:15
211 查看
最近在研究差分隐私,先用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代码:
差分隐私的原理我先简单介绍一下,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代码:
import org.apache.commons.math3.distribution.LaplaceDistribution; double laplaceMechanismCount(long realCountResult, double epsilon) { LaplaceDistribution ld = new LaplaceDistribution(0, 1 / epsilon); double noise = ld.sample(); return realCountResult + noise; }python代码:
import numpy as np loc, scale = 0., 1. s = np.random.laplace(loc, scale, 1) ss=s[0] print ss其中epsilon和scale调节保护性的大小。
相关文章推荐
- 在python project中实现类似java project里的properties文件功能
- Jython--python语言在Java中的完全实现
- quicksort快速排序(3种语言实现 c/java/python)
- C语言MD5加密算法的简单调用实现(另附:Java/Python/Shell/Golang方法)
- paip. uapi 过滤器的java php python 实现aop filter
- IP地址与整形转换 java,python实现
- Python代码实现Java本地化资源字符串的检查,防止出现空指针异常
- 求两个数的最大公约数(C ,Python,java实现)
- DBSCAN算法的Java,C++,Python实现
- paip.提升安全性----Des加密 java php python的实现总结
- paip.提高效率---集合的存取括号方式 uapi java python php js 的实现比较
- 简明Python教程命令行地址簿的Python与Java实现
- 代码注释率统计的Python及Java实现
- paip.函数方法回调机制跟java php python c++的实现
- 插入排序(3种语言实现 c/java/python)
- Learning Python -- Java 通过JyThon调用Python实现的规则
- Python实现JAVA中的PrepareStatement功能
- 用python , java 实现全排列
- thrift JAVA服务端 python客户端的实现
- heapsort堆排序(3种语言实现 c/java/python)