首先研究HR算法在概率分布估计中的实现,我们再考虑如何将其应用于频繁项挖掘中。

一、确定输入数据类型

def generate_uniform_distribution(k):
raw_distribution = [1] * k
sum_raw = sum(raw_distribution)
prob = [float(y)/float(sum_raw) for y in raw_distribution]
return prob
prob1 = generate_uniform_distribution(k)
in_list = np.random.choice(10, 10, p=prob)

比如我们假设k=10,我们得到均匀分布概率为p= [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]

我们从[0,10)以概率p选取10个数作为输入的样本,也就是输入的值,比如in_list=[6 6 2 9 7 4 0 5 2 8]

in_list是一个在均匀分布下随机样本,类似于一个列表,只不过存储的相同数据类型。

二、编码和扰动输入

1)一些初始化值:

InputSize=AphbetSize
OutSize=int(math.pow(2,math.ceil(math.log(AphbetSize+1,2))))
OutBit=int(math.ceil(math.log(AphbetSize+1,2))) PrivacyParameters=1/(1+math.exp(PrivacyParameters)) 

当AphbetSize=10,输出的结果OutSize=16,输出值的大小比输入的可能值要大;

当AphbetSize=10,输出结果OutBit=4,输入阈值较大时,输出位仍然会很小。

2)进行编码

bitin=bin(int(in_symbol)+1)[2:].zfill(outbit)

当输入in_symbol=6,outBit=4,得到bitin=0111;我们将输入的第一位6编码成了0111,将其放入矩阵的第一列;

out1=random.randint(0,math.pow(2,self.outbit)-1)
bitout1=bin(out1)[2:].zfill(self.outbit)

在可能的输出大小OutSize中随机选择一位,并转化成和输出位相等的二进制字符串,比如随机选择了out1=5,bitout1=0101

3)扰动过程:

for i in range(0,self.outbit):
if int(bitin[i]) == 1:
out2 = out1 ^ (pow(2,self.outbit - i -1))
break

当输入的二进制串(0111)的从左边第一个为1时,对out1进行扰动 得到潜在的输出out2。

选择输出out1还是out2:

ra = random.random()
if ra >PrivacyParameters:
return out2
else:
return out1

ra=random.random()从0-1中随机选择一个小数

将其和隐私参数比较,如果ra大于隐私参数,则不进行扰动输出out1,否则进行扰动输出out2

4)扰动结果

我们最后对[6 6 2 9 7 4 0 5 2 8]进行迭代得到编码和扰动后的输出:[0, 2, 5, 7, 9, 1, 7, 15, 9, 12]

三、解码字符串

        l = len(out_list)
count, edges = np.histogram(out_list, range(self.outsz + 1))
dist = count / float(l)

得到的字符串仅仅是一个和outbit相等的概率分布 p=[0.5  0.25 0.   0.25]

HR算法具体过程的更多相关文章

  1. Java基础-使用JAVA代码剖析MD5算法实现过程

    Java基础-使用JAVA代码剖析MD5算法实现过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  2. Spark Mllib里的协调过滤的概念和实现步骤、LS、ALS的原理、ALS算法优化过程的推导、隐式反馈和ALS-WR算法

    不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 (广泛采用) 协调过滤的概念 在现今的推荐技术和算法中,最被大家广泛认可和 ...

  3. 算法笔试过程中的几个输入输出python语句

    title: python在线笔试学习笔记 localimage: image1 urlname: writenexam categories: summary tags: [writen, exam ...

  4. Rxjs入门实践-各种排序算法排序过程的可视化展示

    Rxjs入门实践-各种排序算法排序过程的可视化展示 这几天学习下<算法>的排序章节,具体见对排序的总结,想着做点东西,能将各种排序算法的排序过程使用Rxjs通过可视化的方式展示出来,正好练 ...

  5. [dev][ipsec][dpdk] strongswan/dpdk源码分析之ipsec算法配置过程

    1 简述 storngswan的配置里用一种固定格式的字符串设置了用于协商的预定义算法.在包协商过程中strongswan将字符串转换为固定的枚举值封在数据包里用于传输. 协商成功之后,这组被协商选中 ...

  6. 算法导论(第三版) Exercises4.2(求最大和子数组的算法优化过程)

    4.1-1 如所有元素都为负,则返回所有元素中最大的负数. 4.1-2(暴力法求最大和子数组) struct subarray { int start, end, sum; }; void brute ...

  7. 推荐系统 BPR 算法求解过程

    数据假设: 每个用户之间的偏好行为相互独立 同一用户对不同物品的偏序相互独立 则优化问题为极大化如下目标: [Reference] 1.论文翻译:BPR:面向隐偏好数据的贝叶斯个性化排序学习模型 2. ...

  8. FP-Tree算法详细过程(Java实现)

    我就不说FP-Tree的作用.优点什么的了,直接用例子来解释构建FP-Tree和找出所有频繁项集,第一次写博客,不对之处还请指出. 输入文件: testInput.txt T1 T2 T3 T4 T5 ...

  9. bp算法推导过程

    参考:张玉宏<深度学习之美:AI时代的数据处理与最佳实践>265-271页

随机推荐

  1. 二、kubernetes环境搭建

    主要内容 1.环境准备(2主机) 2.安装流程 3.问题分析 4.总结 环境配置(2主机) 系统:CentOS 7.3 x64 网络:局域网(VPC) 主机: master:172.16.0.17 m ...

  2. vue-resource: jsonp请求百度搜索的接口

    1. yarn add vue-resource 2. main.js引入vue-resource import Vue from 'vue' import MintUI from 'mint-ui' ...

  3. vhdl 边沿

    rising_eage falling_eage clock'event and clock='1' 两种方式

  4. murongxixi的凸优化笔记

    http://www.cnblogs.com/murongxixi/p/3598645.html 在前两节里已经涉及到集合的相对内部与闭包的概念,这一节我们深入研究它们的性质和计算,之后介绍凸函数的连 ...

  5. window.onpopstate

    概述 window.onpopstate是popstate事件在window对象上的事件句柄. 每当处于激活状态的历史记录条目发生变化时,popstate事件就会在对应window对象上触发. 如果当 ...

  6. jsp页面给字体加颜色

    jsp页面给字体加颜色<span style="color:red">要加颜色的部分</span>

  7. Javascript和Jquery语法对比总结

    目的 相信大家都知道jq是js的一个类库,是为了方便我们开发前端,但是笔者在刚开始学习js和jq时经常将两者的语法记混和混用,所以整理下两者实现相同功能之前的语法区别. 声明变量 javascript ...

  8. Volatile的应用

    .java 的执行过程 Java代码在编译后会变成Java字节码 字节码被类加载器加载到JVM里 JVM执行字节码,转化为汇编指令在CPU上执行 Java中所使用的并发机制依赖于JVM的实现和CPU的 ...

  9. BZOJ2738矩阵乘法——整体二分+二维树状数组

    题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入   第一行两个数N,Q,表示矩阵大小和询问组数:接下来N行N列一共N*N个数,表示这个矩阵:再接下来Q行每行5 ...

  10. python字符编码与文件打开

    一 字符编码 储备知识点: 1.计算机系统分为三层: 应用程序 操作系统 计算机硬件 2.运行Python程序的三个步骤 1.先启动python解释器 2.再将python文件当做普通的文本文件读入内 ...