差分隐私拉普拉斯机制进行数据的加密与解加密(简单类型)

import numpy as np

def laplace_mechanism(data, sensitivity, epsilon):
    # 计算噪声比例
    beta = sensitivity / epsilon
    # 生成符合拉普拉斯分布的噪声
    noise = np.random.laplace(loc=0.0, scale=beta, size=data.shape)
    # 加密数据
    encrypted_data = data + noise
    return encrypted_data

def laplace_mechanism_inverse(encrypted_data, sensitivity, epsilon):
    # 计算噪声比例
    beta = sensitivity / epsilon
    # 生成符合拉普拉斯分布的噪声
    noise = np.random.laplace(loc=0.0, scale=beta, size=encrypted_data.shape)
    # 解密还原数据
    decrypted_data = encrypted_data - noise
    return decrypted_data

# 加载数据集
data = np.array([[5.1, 3.5, 1.4, 0.2],
                [4.9, 3.0, 1.4, 0.2],
                [4.7, 3.2, 1.3, 0.2],
                [4.6, 3.1, 1.5, 0.2],
                [5.0, 3.6, 1.4, 0.2],
                [5.4, 3.9, 1.7, 0.4],
                [4.6, 3.4, 1.4, 0.3],
                [5.0, 3.4, 1.5, 0.2]])

epsilon = 1.0  # 加密参数,可根据需求进行调整
sensitivity = 1.0  # 敏感度,对于每一列数据,这里假设为1

# 数据加密
encrypted_data = laplace_mechanism(data, sensitivity, epsilon)
print("加密数据:")
print(encrypted_data)

# 数据解密还原
decrypted_data = laplace_mechanism_inverse(encrypted_data, sensitivity, epsilon)
print("解密还原后的数据:")
print(decrypted_data)

要想满足解误差足够小,需要复杂算法和调参,暂时没有思路,四舍五入精度不够。

运行结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值