决策树模型#

SecretFlow使用多方安全计算的秘密分享技术实现了可证安全的梯度下降决策树模型 Xgb() ,目前支持线性回归问题训练和二分类问题训练。

数据设定#

垂直划分的数据集

  • 所有数据方的样本一致

  • 但是拥有样本的不同特征

  • 只有一方持有标签

../../_images/v_dataset.png

XGBoost 训练算法#

详细原理及推导可见 官方文档 。单棵树分裂的主要过程如下:

  • 预计算:根据损失函数定义、样本标签、当前预测值,计算每个样本可以求得其一阶导 \(g_{i}\) 和二阶导 \(h_{i}\)

  • 结点分裂:通过枚举所有分裂方案,选出带来最优增益值的方式执行分裂。分裂方案包含分裂特征和分裂阈值,可以将当前结点样本集合 \(I\) 分裂为 左子树样本集合 \(I_{L}\) 和右子树样本集合 \(I_{R}\), $lambda$和$gamma$分别为叶节点权值和叶节点数的惩罚因子,并由如下公式计算出此分裂方案的增益值:

    ../../_images/gain_formula.png

    其中:\(\lambda\)\(\gamma\) 分别为叶节点权值和叶节点数的惩罚因子。

  • 权重计算:由落入该结点的样本计算得到,公式如下:

    ../../_images/weight_formula.png

回归问题和分类问题的训练流程是相同的,除了:

  1. 损失函数的选择(回归-MSE,分类-Logloss)。

  2. 分类问题需要将预测值通过sigmoid函数转化为概率。

SS-XGB 训练算法#

SS-XGB Xgb() 使用秘密分享计算分裂增益值和叶权重。

我们使用秘密分享协议提供的加/乘等操作来实现安全的多方联合计算。特别需要关注的问题是:如何在计算分桶加和时,不泄漏任何样本分布相关的信息。

通过引入一个密态下的向量𝑆就可以解决这个问题。

../../_images/indicator_vecto.jpg

向量𝑆中标记为1的样本是被选中的样本需要加和,0相反。为了保证样本分布不泄漏,这个向量也是通过秘密分享协议保护的。在秘密分享协议的保护下,计算向量𝑆和梯度向量的内积,即可得到梯度在分桶内的累加和。

通过这个方法我们就可以保护样本的分布信息不泄漏。更多的算法细节和安全分析:Large-Scale Secure XGB for Vertical Federated Learning

用例#

在本示例中使用单节点模式做示范。集群模式的部署方式: Deployment

API详情:Xgb()