LDP中的UE(一元编码)和LATENT中方法UER实现
UE 中概率如下
LATENT中方法UER概率如下
对于公式理解,哪个概率对应着1变1,1变0...见下图
代码实现思路就是先把十进制转为二进制,对二进制串根据概率扰动,最后再转为十进制
UE代码
# -*- coding: utf-8 -*-
"""
@Time : 2022/1/16 14:03
@Author : Mr Wang
@FileName: RR.py
@SoftWare: PyCharm
"""
from decimal import Decimal
import numpy as nprnd_list = [0] * 100 # 存随机数
binary_list = [0]*100 # 转化为二进制列表
final = [0] * 100 # 随机响应后的无符号十进制def random():import randomfor i in range(0, 100):rnd = random.uniform(-100.0, 100.0)rnd5 = round(rnd, 2) # 小数控制位数rnd_list[i] = rnd5# print(rnd_list)def change(n, pre=24):'''把一个带小数的十进制数n转换成二进制小数点后面保留pre位小数'''string_number1 = str(n) # number1 表示十进制数,number2表示二进制数flag = Falsefor i in string_number1: # 判断是否含小数部分if i == '.':flag = Truebreakif flag:string_integer, string_decimal = string_number1.split('.') # 分离整数部分和小数部分integer = int(string_integer)decimal = Decimal(str(n)) - integerl1 = [0, 1]l2 = []decimal_convert = ""while True:if integer == 0: breakx, y = divmod(integer, 2) # x为商,y为余数l2.append(y)integer = xstring_integer = ''.join([str(j) for j in l2[::-1]]) # 整数部分转换成二进制i = 0while decimal != 0 and i < pre:result = int(decimal * 2)decimal = decimal * 2 - resultdecimal_convert = decimal_convert + str(result)i = i + 1string_number2 = string_integer + '.' + decimal_convertreturn string_number2else: # 若十进制只有整数部分l1 = [0, 1]l2 = []while True:if n == 0: breakx, y = divmod(n, 2) # x为商,y为余数l2.append(y)n = xstring_number = ''.join([str(j) for j in l2[::-1]])return int(string_number)def change2(n, pre=2):'''把一个带小数的二进制数n转换成十进制小数点后面保留pre位小数'''string_number1 = str(n) # number1 表示二进制数,number2表示十进制数decimal = 0 # 小数部分化成二进制后的值flag = Falsefor i in string_number1: # 判断是否含小数部分if i == '.':flag = Truebreakif flag: # 若二进制数含有小数部分string_integer, string_decimal = string_number1.split('.') # 分离整数部分和小数部分for i in range(len(string_decimal)):decimal += 2 ** (-i - 1) * int(string_decimal[i]) # 小数部分化成二进制number2 = int(str(int(string_integer, 2))) + decimalreturn round(number2, pre)else: # 若二进制数只有整数部分return int(string_number1, 2) # 若只有整数部分 直接一行代码二进制转十进制def perturb(epsilon, value, m, n=2):p = np.e ** (epsilon/3200) / (np.e **(epsilon/3200) + n - 1) # 概率p 3200=32*100 敏感度 # 以p的概率生成value,1-p的概率非valuep = np.array([p, 1 - p])index = np.random.choice([value, 1 - value], p=p.ravel())return str(index)def main():binary_perturb = [0]*100# UER方法中的合并字符串,选取100个for i in range(0, 100):# # 数据处理binary_list[i] = change(abs(rnd_list[i]))# 分割填充0,确保32位integer = str(binary_list[i]).split('.')[0]fraction = str(binary_list[i]).split('.')[1]fraction = fraction.ljust(24, '0')integer = integer.rjust(7, '0')str0 = integer + '.' + fractionbinary_list[i] = str0if rnd_list[i] < 0:str0 = '1' + str0else:str0 = '0' + str0str00=str0.replace('.','')binary_list[i]=str00aa=''.join(binary_list)# print(binary_list)# print(aa)bb=[0]*3200for i in range(len(aa)):bb[i]=perturb(1, int(aa[i]), i)# print(bb)oplist=[]# 重新拆分成100个32位for i in range(0,100):for j in range(i*32,(i+1)*32):oplist.append(bb[j])oplist[8:8]=['.']# print(oplist)str1=''.join(oplist)binary_perturb[i]=str1str1 = str1[1:]# print(str1)if oplist[0] == '1':final[i] = 0 - change2(str1)else:final[i] = change2(str1)oplist=[]# print(binary_perturb)# print(final)total = 0for i in range(0, 100):total = total + np.abs(final[i] - rnd_list[i])return totalif __name__ == '__main__':# 计算100次平均误差total=[]for i in range(0,100):random()t=main()total.append(t)print(total)sum=0for i in range(0, 100):sum=sum+total[i]print(sum/100)
UER代码
# -*- coding: utf-8 -*-
"""
@Time : 2022/1/16 15:17
@Author : Mr Wang
@FileName: LATENT.py
@SoftWare: PyCharm
"""
from decimal import Decimal
import numpy as nprnd_list = [0] * 100 # 存随机数
binary_list = [0] * 100 # 转化为二进制列表
final = [0] * 100 # 随机响应后的十进制def random():import randomfor i in range(0, 100):rnd = random.uniform(-100.0, 100.0)rnd5 = round(rnd, 2) # 小数控制位数rnd_list[i] = rnd5# print(rnd_list)def change(n, pre=24):'''把一个带小数的十进制数n转换成二进制小数点后面保留pre位小数'''string_number1 = str(n) # number1 表示十进制数,number2表示二进制数flag = Falsefor i in string_number1: # 判断是否含小数部分if i == '.':flag = Truebreakif flag:string_integer, string_decimal = string_number1.split('.') # 分离整数部分和小数部分integer = int(string_integer)decimal = Decimal(str(n)) - integerl1 = [0, 1]l2 = []decimal_convert = ""while True:if integer == 0: breakx, y = divmod(integer, 2) # x为商,y为余数l2.append(y)integer = xstring_integer = ''.join([str(j) for j in l2[::-1]]) # 整数部分转换成二进制i = 0while decimal != 0 and i < pre:result = int(decimal * 2)decimal = decimal * 2 - resultdecimal_convert = decimal_convert + str(result)i = i + 1string_number2 = string_integer + '.' + decimal_convertreturn string_number2else: # 若十进制只有整数部分l1 = [0, 1]l2 = []while True:if n == 0: breakx, y = divmod(n, 2) # x为商,y为余数l2.append(y)n = xstring_number = ''.join([str(j) for j in l2[::-1]])return int(string_number)def change2(n, pre=2):'''把一个带小数的二进制数n转换成十进制小数点后面保留pre位小数'''string_number1 = str(n) # number1 表示二进制数,number2表示十进制数decimal = 0 # 小数部分化成二进制后的值flag = Falsefor i in string_number1: # 判断是否含小数部分if i == '.':flag = Truebreakif flag: # 若二进制数含有小数部分string_integer, string_decimal = string_number1.split('.') # 分离整数部分和小数部分for i in range(len(string_decimal)):decimal += 2 ** (-i - 1) * int(string_decimal[i]) # 小数部分化成二进制number2 = int(str(int(string_integer, 2))) + decimalreturn round(number2, pre)else: # 若二进制数只有整数部分return int(string_number1, 2) # 若只有整数部分 直接一行代码二进制转十进制def perturb1(epsilon, value, m, n=2):a = 5p = a * np.e ** (epsilon / 3200) / (a * np.e ** (epsilon / 3200) + n - 1) # 概率q 0-->0# 以q的概率生成value,1-q的概率非valuep = np.array([p, 1 - p])index = np.random.choice([value, 1 - value], p=p.ravel())return str(index)def perturb2(value, m):a = 5p = 1 / (1 + a ** 3) # 概率p 1-->1# 以p的概率生成value,1-p的概率非valuep = np.array([p, 1 - p])index = np.random.choice([value, 1 - value], p=p.ravel())return str(index)def perturb3(value, m):a = 5p = a / (1 + a) # 概率p 1-->1# 以p的概率生成value,1-p的概率非valuep = np.array([p, 1 - p])index = np.random.choice([value, 1 - value], p=p.ravel())return str(index)def main():binary_perturb = [0] * 100#UER方法中的合并字符串,选取100个for i in range(0, 100):# 数据处理binary_list[i] = change(abs(rnd_list[i]))# 分割填充0,确保32位integer = str(binary_list[i]).split('.')[0]fraction = str(binary_list[i]).split('.')[1]fraction = fraction.ljust(24, '0')integer = integer.rjust(7, '0')str0 = integer + '.' + fractionbinary_list[i] = str0if rnd_list[i] < 0:str0 = '1' + str0else:str0 = '0' + str0str00 = str0.replace('.', '')binary_list[i] = str00aa = ''.join(binary_list)# print(binary_list)# print(aa)bb = [0] * 3200sum1 = 0for i in range(len(aa)):if aa[i] == '0':# sum1=sum1+1bb[i] = perturb1(1, int(aa[i]), i)else:if i % 2 == 1:bb[i] = perturb2(int(aa[i]), i)if i % 2 == 0:bb[i] = perturb3(int(aa[i]), i)# print(bb)# print(sum1)oplist = []#重新拆分成100个32位for i in range(0, 100):for j in range(i * 32, (i + 1) * 32):oplist.append(bb[j])oplist[8:8] = ['.']# print(oplist)str1 = ''.join(oplist)binary_perturb[i] = str1str1 = str1[1:]# print(str1)if oplist[0] == '1':final[i] = 0 - change2(str1)else:final[i] = change2(str1)oplist = []# print(binary_perturb)# print(final)total = 0for i in range(0, 100):total = total + np.abs(final[i] - rnd_list[i])# print(total)return totalif __name__ == '__main__':#计算100次平均误差total = []for i in range(0, 100):random()t = main()total.append(t)print(total)sum = 0for i in range(0, 100):sum = sum + total[i]print(sum / 100)
也可以用这种方法实现概率
def perturb_bit(bit):p = .75q = .25sample = np.random.random()if bit == 1:if sample <= p:return 1else:return 0elif bit == 0:if sample <= q:return 1else: return 0
LDP中的UE(一元编码)和LATENT中方法UER实现相关推荐
- [转载]Java web应用中的常见字符编码问题的解决方法
以下是 Java web应用的常见编码问题 1. html页面的编码 在web应用中,通常浏览器会根据http header: Content-type的值来决定用什么encoding, 比如遇到Co ...
- JSP中获取HTML中的中文内容是乱码的解决方法---开发中遇到的问题
1.转换字符编码方式 在JSP中,<%=request.getParameter("username")%>应改为: <%=new String(request. ...
- .Net基础——程序集与CIL HttpClient封装方法 .Net Core 编码规范 C#中invoke和beginInvoke的使用 WebServeice 动态代理类...
.Net基础--程序集与CIL 1. 程序集和CIL: 程序集是由.NET语言的编译器接受源代码文件产生的输出文件,通常分为 exe和dll两类,其中exe包含Main入口方法可以双击执行,dll则需 ...
- java中哈夫曼编码所用的函数_数据结构(java语言描述)哈夫曼编码
原理:哈夫曼编码是根据将已给出的权值作为叶子结点,生成一颗哈夫曼树,然后使得权重最小. 首先生成已给权重的所有的叶子结点,然后取所有节点中最小和次小的结点作为左右孩子生成一个哈夫曼树,计算出父节点的权 ...
- 4G EPS 中建立 UE 和 MME 之间的 NAS(非接入服务)信令连接
目录 文章目录 目录 前文列表 建立 NAS(非接入服务)信令连接 前文列表 <4G EPS 中的小区搜索> <4G EPS 中的 PLMN 选择> <4G EPS 中的 ...
- DDos攻击,使用深度学习中 栈式自编码的算法
转自:http://www.airghc.top/2016/11/10/Dection-DDos/ 最近研究了一篇论文,关于检测DDos攻击,使用了深度学习中 栈式自编码的算法,现在简要介绍一下内容 ...
- 字符编码在python中的处理与储存_python----字符编码与文件处理
字符编码 计算机工作就要通电,也就是说'电'驱使计算机干活,而电只有高电压(二进制1),低电压(二进制0),也就是说计算机只认数字. 编程的目的就是让计算机干活,编程的结果就是一堆字符,也就是我们编程 ...
- 1、代码中设置编码、编辑器中设置Python的编码
1Python中文编码 1.1代码中设置编码 Python中默认的编码格式是ASCII格式,在没有修改编码格式时无法正确打印汉字,所以在读取中文的时候会报错. 解决办法为只要在文件开头加入 # -- ...
- 计算机中有关数及编码的知识,计算机中有关数及编码的知识
计算机中有关数及编码的知识 1.计算机是智能化的电器设备 计算机就其本身来说是一个电器设备,为了能够快速存储.处理.传递信息,其内部采用了 大量的电子元件,在这些电子元件中,电路的通和断.电压高低,这 ...
最新文章
- PyTorch学习之六个学习率调整策略
- 小黑盒不显示服务器,steam上买的游戏小黑盒不显示 | 手游网游页游攻略大全
- python使用fpdf生成数据报告pdf文件
- android getitem,android – ItemDecoration重写getItemOffsets()和动画
- 计算机键盘为啥要这样分布,你知道电脑键盘为什么这么排列吗?
- c语言结构体中整形数组初始化,c – 将{0,0}在结构体中初始化数组?
- 转:Linux 2.4.x内核软中断机制
- java 文本变量_如何将一变量作为可配置文件 java
- CentOS增加用户到sudo用户组
- 关于null,undefined,空字符串的判断
- hashmap什么时候由链表转为红黑树
- FPGA设计入门-----1位全加器的设计
- 三星 android驱动安装失败,三星安卓手机usb驱动安装教程
- 大数据新闻推送你怎么看_如何看待大数据精准推送,使人的视界越来越窄?
- 手机html怎么做苹果兼容性,兼容苹果手机的前端设置
- 计算机word公式平均数,平均值word公式怎么用?
- 第五章 数组程序(Ivor Horton)
- 小程序保存视频/图片到相册并且授权
- windows系统可以用android,如何在电脑上使用Android系统?
- 【人工智能】从数据预处理到排序算法,全方位解读 Uber 人工智能客服 COTA