HR算法具体过程

 

首先研究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]

 

转载于:https://www.cnblogs.com/Optimism/p/10569777.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值