联邦学习:算法详解与系统实现
上QQ阅读APP看书,第一时间看更新

4.2.2 算法详述

我们首先来看负责处理算法的整体流程控制的子过程RandomForestPhase1,伪代码逻辑展示在算法4.1中。这个过程需要实现的功能是,当决策树可以继续分裂增长时,选择最优分裂点将特征空间分成两部分;当发现决策树无论如何分裂都不能带来更好的分类效果时,停止整个流程。

算法4.1 主算法(主动方执行)

输入:

 样本空间I;

 特征维度D;

输出:

 决策树

1:检查算法终止条件是否满足,例如实例少于某预设值

2:while逻辑为真do

3: 加密算法4.2所需的输入并发送给被动方,接收后者传回的计算结果

4: 调用算法4.3寻找当前的最优分裂,并返回对应的值

5: if终止信号为真then

6:  跳出(终止)循环;

7: else

8:  调用算法4.4将实例空间分为IL和IR,然后创建一个新的记录[recordid,serverid](出于参考的目的)

9: end if

10: 循环地用IL建立左子树,用IR建立右子树

11:end while

接下来的流程RandomForestPhase2将在被动方执行,其执行的是算法4.2,主要目的是对特征排序并计算决策树分裂点的信息增益。这一步是在算法4.1中判断决策树分裂是否可以带来效果的先决步骤。

算法4.2 通过特征排序并返回聚合值(被动方执行)

输入:

特征维度(被动方信息)d;

当前节点的实例空间I;

分位数l;

{〈yi〉}i∈I

输出:

Y

1:for k=0→d do

2: 通过特征k上的分位数提出Sk={sk1,sk2,···,skl}

3:end for

4:for k=0→d do

5:Ykv=

6:end for

其中,y表示主动方拥有的标签,〈〉意味着同态加密算符。在本例中,我们使用Paillier算法实现同态加密操作,保证被动方只能使用加密后的标签。当标签被主动方(原本就拥有使用标签权限的参与方)使用时,可以跳过使用同态加密算符的步骤。

接下来的流程RandomForestPhase3将回到拥有标签的主动方执行,其执行的是算法4.3,目的是通过被动方各个分裂点的信息增益挑选出一个最优的分裂点。

其中,第10行计算评分(score)的过程是在计算左子树的方差(variance)和右子树的方差的加和。由于整个信息增益可以分解成原始方差减去左右子树方差的和,当我们消去原始方差这样一个共同项之后,通过左右子树加和的极值就可以推导出评分的最优值,也就算出了最优的分裂点。

找到最优分裂点后,需要执行流程RandomForestPhase4,其执行的是算法4.4,以拓展树的深度。在主/被动方根据最优分裂点将数据切分成两部分后,继续回到算法4.1的控制流程。