searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

数据分桶在联邦学习中的应用

2023-09-22 06:17:55
19
0

数据分桶是一种数据预处理技术,是一种将多个连续值分组为较少数量的“桶”的方法。

基于数据分桶的联邦学习模型训练方法,该方法通过将参与方的本地数据分为多个子数据集,使每个子数据集可以在本地进行模型训练,以降低计算负载和通信开销。同时,通过基于加密技术的模型聚合,保护数据隐私和模型安全。本发明主要应用于数据隐私敏感、计算负载大的场景,如医疗、金融等行业。

数据分桶 参与方将本地数据按照特定的规则进行分类分桶,得到多个子数据集。具体地,可以采用哈希函数、聚类等方式对数据进行分桶。在分桶的过程中,需要充分考虑到计算资源限制、数据隐私和通信效率等因素。

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脚本

import pandas as pd 
import mmh3
 
# 读数据到pandas dataframe
df = pd.read_csv('test.txt')
 
def hash_bucket_only_id(table, n_bucket, hash_key):
 
# 每条数据assign一个bucket_id
    table['bucket_id'] = table[hash_key].apply(lambda x: mmh3.hash(x, 42) % n_bucket)  # 42 is random seed
    for i in range(n_bucket):
        table[table['bucket_id'] == i][[hash_key]].to_csv('imei_hash/imei_' + hash_key + '_for_psi_hash_bucket_' + str(i) + '.csv',
                                                     header=True, index=False)
    return
 
# 一共分成50桶
n_bucket = 50
 
# 执行hash分桶
hash_bucket_only_id(df, n_bucket, 'hash_id')

 

三、总结

数据分桶是一种常见的数据预处理方法,在实际应用种,我们可以根据具体的需求选择合适的数据分桶方法,以达到更好的效果。

0条评论
0 / 1000
jie洁杰
4文章数
0粉丝数
jie洁杰
4 文章 | 0 粉丝
jie洁杰
4文章数
0粉丝数
jie洁杰
4 文章 | 0 粉丝
原创

数据分桶在联邦学习中的应用

2023-09-22 06:17:55
19
0

数据分桶是一种数据预处理技术,是一种将多个连续值分组为较少数量的“桶”的方法。

基于数据分桶的联邦学习模型训练方法,该方法通过将参与方的本地数据分为多个子数据集,使每个子数据集可以在本地进行模型训练,以降低计算负载和通信开销。同时,通过基于加密技术的模型聚合,保护数据隐私和模型安全。本发明主要应用于数据隐私敏感、计算负载大的场景,如医疗、金融等行业。

数据分桶 参与方将本地数据按照特定的规则进行分类分桶,得到多个子数据集。具体地,可以采用哈希函数、聚类等方式对数据进行分桶。在分桶的过程中,需要充分考虑到计算资源限制、数据隐私和通信效率等因素。

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脚本

import pandas as pd 
import mmh3
 
# 读数据到pandas dataframe
df = pd.read_csv('test.txt')
 
def hash_bucket_only_id(table, n_bucket, hash_key):
 
# 每条数据assign一个bucket_id
    table['bucket_id'] = table[hash_key].apply(lambda x: mmh3.hash(x, 42) % n_bucket)  # 42 is random seed
    for i in range(n_bucket):
        table[table['bucket_id'] == i][[hash_key]].to_csv('imei_hash/imei_' + hash_key + '_for_psi_hash_bucket_' + str(i) + '.csv',
                                                     header=True, index=False)
    return
 
# 一共分成50桶
n_bucket = 50
 
# 执行hash分桶
hash_bucket_only_id(df, n_bucket, 'hash_id')

 

三、总结

数据分桶是一种常见的数据预处理方法,在实际应用种,我们可以根据具体的需求选择合适的数据分桶方法,以达到更好的效果。

文章来自个人专栏
数据处理
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0