第 7 课:XGB算法与SGB算法开发实践

FAFU_ppg 2024-06-21 09:37:16

 

一、背景——纵向数据分割场景和树模型

什么是纵向树模型?

        基于纵向分割数据集训练的决策树模型

SS-XGB(基于秘密分享XGB)

  • 实现了XGB的经典功能
  • 采用MPC 进行密态计算(无信息泄漏,可证安全)
  • 网络条件好时效率高

SGB(基于联邦和同态加密)

  • 吸收了部分来自XGB 和 lightGBM功能
  • 采用同态加密来保护标签数据(非可证安全)
  • 计算量大,算力高时效率高

二、使用——隐语纵向树模型

使用树模型的三个简单步骤:

  • 准备——设备和数据
  • 训练—— 参数设置和执行
  • 评估——计算指标和决策

SS-XGB:

  • 准备SPU和数据 SPU
  • 设置训练参数
  • 模型评估

SGB: 

  • 准备HEU和数据
  • 设置训练参数
  • 模型评估&保存

SS-XGB准备:

  • 需要重点关注MPC协议
  • 仅含训练参数
  • 各方持有分片,不联合 ,无法得到任何信息

SGB准备:

  • 需要重点关注同态加密协议
  • 安全和联邦参数6个、训练参数18个
  • 各方持有部分明文参数:分裂点、叶子权重

三、原理和实现

算法提炼

经典算法到MPC算法

  • 确定保护的数据部分:确定哪些数据在密秘分享下进行,其中任何数据都被MPC保护
  • 准备安全原语:设计一些为MPC优化的算子
  • 改造数据结构和算法:改造原有的XGB算法

经典算法到联邦算法

  • 确定保护的数据部分:确定哪些数据在加密下进行,其中任何数据都被同态加密保护
  • 准备安全原语:使用合适的同态加密协议和操作
  • 改造数据结构和算法:改造现有的XGB算法

开发实战

组件封装

  1. 定义组件主体 ——确定组件封装的功能和信息
  2. 定义参数和IO——根据算子已经实现的功能定义组件参数和输入输出
  3. 定义调用方法——建立安全设备,调用引擎方法和存贮结果

算法修改

  1. 阅读代码——确定大的结构,熟悉主要算法流程
  2. 修改算法和对应模块——明确要修改的算法步骤,找到对应的代码模块
  3. 测试——修改单元测试,覆盖修改部分

模型导出

  1. 阅读代码——确认是否提供了模型保存的方法
  2. 按照接口存读模型
  3. 自定义模型序列化方法——理解模型数据类型;自定义哪一方获取什么样的数据

四、SS-XGB / SGB 在隐语实现的独特优势

  • 设备抽象:提供PYU\SPU\HEU的设备抽象
  • 分层架构——原语:重点算子优化破瓶颈
  • 分层架构——算法:Python实现,灵活易读易维护
  • 开源共建

 

使用-隐语纵向树模型

使用树模型的三个简单步骤

隐语算法通用使用方法:准备(设备和数据)、训练(参数设置和执行)、评估(计算指标和决策)

SS-XGB: 教程提点

预习教程:官网SS-XGB教程链接

 SGB: 教程提点

预习教程:官网SGB教程链接

两种算法使用有何区别?

准备设备和数据:MPC 和 联邦算法的对比

 设置训练参数:XGB vs SGB 多功能集合的树模型算法实现

模型产出:评估和保存 :密态模型和联邦模型

原理和实现-从理论到工程

 SS-XGB / SGB 算法是如何炼成的?

经典算法到MPC算法:算法改造三部曲,参考论文(ss XGB)。

https://arxiv.org/pdf/2005.08479.pdf

经典算法到联邦算法: 算法改造三部曲,参考论文(SecureBoost)

https://arxiv.org/pdf/2005.08479.pdf

 

如何修改源码实现合适的功能?

开发实战

组件封装:如何在组件中封装算法?

组件封装三部曲


算法修改:如何增加训练参数、修改功能

算法修改三部曲:以SGB为例

 

模型导出:如何把存储模型?

模型导出三部曲

 SS-XGB / SGB 在隐语实现有什么独特优势?

隐语的优势:SS XGB/SGB on secretflow

  • 设备抽象:提供PYU\SPU\HEU的设备抽象-> 可维护
  • 分层架构—原语:重点算子优化破瓶颈
  • 分层架构—算法:Python实现,灵活易读易维护
  • 开源共建:众人拾柴火焰高

实践

1.用ss-XGB来完成刚才老师演示的SGB流程。


 
  1. # 模型训练

  2. from secretflow.ml.boost.ss_xgb_v import Xgb

  3. from secretflow.data.split import train_test_split as train_test_split_fed

  4. import time

  5.  
  6. spu = sf.SPU(spu_conf)

  7.  
  8. # 初始化Xgb对象

  9. ss_xgb = Xgb(spu)

  10.  
  11. start = time.time()

  12. # 定义参数

  13. params = {

  14. 'num_boost_round': 14,

  15. 'max_depth': 5,

  16. 'learning_rate': 0.3,

  17. 'sketch_eps': 0.1,

  18. 'objective': 'logistic',

  19. 'reg_lambda': 0.1,

  20. 'subsample': 1,

  21. 'colsample_by_tree': 1,

  22. 'base_score': 0.5,

  23. }

  24. # 训练模型

  25. model = ss_xgb.train(params, X_train_fed, y_train_fed)

2.当用ss-XGB跑完相同的流程后,它的test AUC是多少?

如果SGB去除早停,对比SGB和ssXGB都是14棵树的情况下,AUC相差不大

 

3.如果Alice有15个特质,Bob有1个特质,如果用SGB和ss-XGB做联合建模,我们是否还会获得额外的 AUC的收益?

SGB-早停

SGB-非早停

ssXGB 

 对比:从结果看没有额外收益 

 

...全文
76 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

563

社区成员

发帖
与我相关
我的任务
社区描述
隐语开源社区,隐私计算开发者交流和讨论的平台。
密码学可信计算技术安全 企业社区
社区管理员
  • 隐语SecretFlow
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

【最新活动】

3月18日:隐私计算实训营第一期

试试用AI创作助手写篇文章吧