数据分桶是一种数据预处理技术,是一种将多个连续值分组为较少数量的“桶”的方法。
基于数据分桶的联邦学习模型训练方法,该方法通过将参与方的本地数据分为多个子数据集,使每个子数据集可以在本地进行模型训练,以降低计算负载和通信开销。同时,通过基于加密技术的模型聚合,保护数据隐私和模型安全。本发明主要应用于数据隐私敏感、计算负载大的场景,如医疗、金融等行业。
数据分桶 参与方将本地数据按照特定的规则进行分类分桶,得到多个子数据集。具体地,可以采用哈希函数、聚类等方式对数据进行分桶。在分桶的过程中,需要充分考虑到计算资源限制、数据隐私和通信效率等因素。
1、什么情况下需要数据分桶处理
数据量分布范围广,数据量大,这些数据可能包含各种类型的特征值,有些特征值分布不均,影响模型效果,分桶有利于提高后续交互压力,提高计算性能
2、数据分桶原理
数据分桶的原理很简单,就是将连续型特征的取值范围划分成若干个区间,并将每个数据点映射到对应的区间中。这样,连续型特征就被转换为了离散的类别。常见的数据分桶方法有等宽分桶和等频分桶
2.1等宽分桶
1.确定分桶量
2.确定分桶宽度
3.根据分桶宽度将对应的数据分配到相应的分桶中
2.2等频分桶
1.确定分桶数量
2.根据分桶数量将数据排序
3.将排序后的数据均匀分到每个分桶中
3、分桶在联邦学习中的应用
全量imei预计在5亿左右,单个文件比较大,上传慢,客户有15亿左右的数据,双方需要在fate平台上完成psi,如果数据不提前预处理,开销非常大,故采用分桶方式,大大提高效率
客户双方约定以下方式
加密方式:
- 手机号->md5->加盐->sha256
- 盐值稍后邮件发送
分桶方式:
- table['bucket_id'] = table[hash_key].apply(lambda x: mmh3.hash(x, 42) % n_bucket) # 42 is random seed
- 分50个桶, n_bucket = 50
- namespace: aaaa
- table_name: bbbbbbbbbb_$n, $n = 0 to 49 to do
具体可以参考以下py脚本
三、总结
数据分桶是一种常见的数据预处理方法,在实际应用种,我们可以根据具体的需求选择合适的数据分桶方法,以达到更好的效果。