
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的控制流程。