X a n o n y m i z e d = X o r i g i n a l − n o i s e X _{anonymized} = X_{original} - noise Xanonymized=Xoriginal−noise
其中, X a n o n y m i z e d X _{anonymized} Xanonymized 是脱敏后的数据, X o r i g i n a l X_{original} Xoriginal 是原始数据, n o i s e noise noise 是添加的噪声。
E ( M ) = E k e y ( M ) E(M) = E_{key}(M) E(M)=Ekey(M)
D ( E ) = D k e y ( E ) D(E) = D_{key}(E) D(E)=Dkey(E)
其中, E ( M ) E(M) E(M) 是加密后的数据, D ( E ) D(E) D(E) 是解密后的数据, E k e y ( M ) E _{key}(M) Ekey(M) 是使用密钥 k e y key key举行加密的数据, D k e y ( E ) D_{key}(E) Dkey(E)
是使用密钥 k e y key key举行解密的数据。
θ l o c a l = θ g l o b a l − ∇ L ( θ g l o b a l , D i ) \theta _{local} = \theta_{global} - \nabla L(\theta _{global}, D_ i) θlocal=θglobal−∇L(θglobal,Di)
θ g l o b a l = θ g l o b a l + 1 N ∑ i = 1 N θ l o c a l \theta _{global} = \theta_{global} + \frac{1}{N} \sum _{i=1}^{N} \theta_{local} θglobal=θglobal+N1i=1∑Nθlocal
其中, θ l o c a l \theta _{local} θlocal 是每个设备的模型参数, θ g l o b a l \theta_{global} θglobal 是全局模型参数, L L L 是损失函数, D i D_i Di
是设备 i i i的训练数据, N N N 是设备数量。
data = pd.read _csv('train_ data.csv') data _encrypted =
pd.DataFrame(data.values.astype(str).tolist(), columns=data.columns) data_
encrypted.columns = [f'{col}_encrypted' for col in data.columns] data_
encrypted = data _encrypted.apply(lambda x: cipher_ suite.encrypt(x.encode()),
axis=1)
## 保存加密后的训练数据
data _encrypted.to_ csv('train _data_ encrypted.csv', index=False)
## 解密训练数据
data _decrypted = pd.DataFrame(data_ encrypted.values.tolist(),
columns=data.columns) data _decrypted.columns = [col for col in data.columns]
data_ decrypted = data _decrypted.apply(lambda x: cipher_
suite.decrypt(x.decode()), axis=1)