562
社区成员




本次实训基于蚂蚁集团开源隐私计算框架SecretFlow,利用其安全多方计算(MPC)、联邦学习(FL)等能力,实现跨平台二手车数据的联合建模,解决数据孤岛问题的同时保障隐私安全。目标是通过官方文档示例验证联邦学习在二手车价格预测中的可行性,对比传统集中式训练与联邦训练的效果差异。
A_cars.csv
)。B_cars.csv
)。price
)为标签,其余为特征,需在训练中避免原始数据泄露。bash
pip install secretflow # 安装SecretFlow框架
pip install pandas torch # 依赖库
python
import secretflow as sf
sf.init(parties=['alice', 'bob'], # 模拟两个参与方
num_cpus=8, # CPU核心数
log_to_driver=False) # 关闭日志输出
数据读取与分区
python
from secretflow.data.horizontal import read_csv
# 模拟参与方各自读取本地数据
alice = sf.PYU('alice')
bob = sf.PYU('bob')
data_a = alice(lambda: pd.read_csv('A_cars.csv'))() # 平台A数据
data_b = bob(lambda: pd.read_csv('B_cars.csv'))() # 平台B数据
特征工程
python
def preprocess(data):
# 保留价格标签,其余object类型字段独热编码
cat_cols = data.select_dtypes(include=['object']).columns.drop('price')
data_encoded = pd.get_dummies(data, columns=cat_cols)
# 清洗价格字段(去除非数字字符)
data_encoded['price'] = pd.to_numeric(data_encoded['price'].str.replace('[^\d.]', '', regex=True))
return data_encoded
# 各参与方本地预处理
data_a_prep = alice(preprocess)(data_a)
data_b_prep = bob(preprocess)(data_b)
特征对齐
通过 SecretFlow 的安全协议对齐双方特征空间,仅保留交集字段:
python
from secretflow.utils import align_columns
# 安全对齐特征列
data_a_aligned, data_b_aligned = align_columns(data_a_prep, data_b_prep, on='price')
采用横向联邦神经网络(HORNN),构建 3 层全连接网络:
python
from secretflow.ml.nn import HORNN
from torch import nn, optim
class PricePredictor(nn.Module):
def __init__(self, input_dim):
super().__init__()
self.layers = nn.Sequential(
nn.Linear(input_dim, 128),
nn.ReLU(),
nn.Dropout(0.2),
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 1)
)
def forward(self, x):
return self.layers(x)
# 定义模型、优化器和损失函数
model_fn = lambda: PricePredictor(input_dim=sf.reveal(data_a_aligned[0]).shape[1]-1) # 输入维度为特征数
optimizer_fn = lambda params: optim.Adam(params, lr=1e-3)
loss_fn = nn.MSELoss()
python
honn = H