差分隐私 JAVA版实现
差分隐私(Differential Privacy)是Dwork[3] 在2006年针对数据库的隐私泄露问题提出的一种新的隐私定义。主要是通过使用随机噪声来确保,查询请求公开可见信息的结果,并不会泄露个体的隐私信息,即提供一种当从统计数据库查询时,最大化数据查询的准确性,同时最大限度减少识别其记录的机会,简单来说,就是保留统计学特征的前提下去除个体特征以保护用户隐私。
百度出来的所有差分隐私都只是对差分隐私名词的解决,并没有可以实际使用的代码,本人出于对算法的好奇,花了好几天的时间整理,同时也参考了很多其它的例子,并整理了当前算法的java版本,可直接使用到项目当中
代码如下:
private static ImmutableSortedMap<Integer, Integer> getPrivateCounts(Collection<Visit> visits) {
Map<Integer, Count> dpCounts = new HashMap<>();
for (int i = OPENING_HOUR; i <= CLOSING_HOUR; i++) {
Count dpCount = Count.builder()
.epsilon(LN_3)
.maxPartitionsContributed(10)
.build();
dpCounts.put(i, dpCount);
}
visits.forEach(v -> dpCounts.get(v.entryTime().getHour()).increment());
return ImmutableSortedMap.copyOf(
dpCounts.entrySet().stream()
.collect(
toMap(Map.Entry::getKey, e -> (int) e.getValue().computeResult())));
}
工程结构
1、工程中有一个lib文件夹,里面是包含需要的相关包,比如第一张图,没有引入相关jar,代码报错
2、加下相关加包
2、运行项目当中的Main
3、结果信息,加了差分隐私加密后,如下结果
4、源码下载址:https://pan.baidu.com/s/1HID13ob_SHDhk8U5gwmaFg?pwd=rbyg
专注JAVA系统优化、系统结构调整、系统问题排查医治、系统升级、架构设计、SQL语句优化、小程序、APP、企业应用软件开发,请 + hekf888,欢迎关注,时常发布技术分享博文