數據分桶是一種數據預處理技術,是一種將多個連續值分組為較少數量的“桶”的方法。
基于數據分桶的聯邦學習模型訓練方法,該方法通過將參與方的本地數據分為多個子數據集,使每個子數據集可以在本地進行模型訓練,以降低計算負載和通信開銷。同時,通過基于加密技術的模型聚合,保護數據隱私和模型安全。本發明主要應用于數據隱私敏感、計算負載大的場景,如醫療、金融等行業。
數據分桶 參與方將本地數據按照特定的規則進行分類分桶,得到多個子數據集。具體地,可以采用哈希函數、聚類等方式對數據進行分桶。在分桶的過程中,需要充分考慮到計算資源限制、數據隱私和通信效率等因素。
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腳本
三、總結
數據分桶是一種常見的數據預處理方法,在實際應用種,我們可以根據具體的需求選擇合適的數據分桶方法,以達到更好的效果。