隐私计算实训营第二期第七课:XGB算法与SGB算法开发实践

隐私计算实训营第二期-第七课

  • 第七课:XGB算法与SGB算法开发实践
    • 1 决策树模型
      • 1.1 决策树的训练和预测过程
      • 1.2 决策树的发展过程
    • 2 GBDT模型
      • 2.1 Boosting核心思想
      • 2.2 GBDT原理
    • 3 XGB模型
      • 3.1 XGB核心思想
      • 3.2 XGB优点
    • 3 隐语纵向树模型
      • 3.1 数据纵向分割
      • 3.2 隐私保护的树模型算法
      • 3.3 SS-XGB和SGB实现原理
      • 3.4 开发流程
      • 3.5 隐语实现上的优势
    • 4 作业实战
      • 4.1 使用SS-XGB进行训练
      • 4.2 作业结果

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

首先必须感谢蚂蚁集团及隐语社区带来的隐私计算实训第二期的学习机会!
本节课由蚂蚁隐私计算部算法工程师邹沛成老师讲解。

在这里插入图片描述

本节课主要介绍隐语纵向树模型,据土豪包括数据纵向分割,XGB树模型,
以及以隐私计算的实现XGB模型的两种方式:秘密分享方式的SS-XGB,
联邦学习方式的SGB,内容目录如下:

在这里插入图片描述
在学习SS-XGB和SGB之前,我们应该了解基本的决策树模型、梯度提升决策树
GBDT模型以及XGBoost(eXtreme Gradient Boosting)模型。发现一个很好的
图解机器学习学习网站,下面这几个基本的模型都可以在这里学习到。我们借用
其中这几个模型讲解的图示,详细的学习链接请点击: 图解机器学习.

1 决策树模型

决策树(Decision tree)是基于已知各种情况(特征取值)的基础上,通过构建
树型决策结构来进行分析的一种方式,是常用的有监督的分类算法。决策树模型
模拟人类决策过程。以下面买衣服为例,一个顾客在商店买裤子,于是有了下面
的对话和决策:

在这里插入图片描述
决策树模型核心是下面几部分:

  1. 结点和有向边组成。
  2. 结点有内部结点和叶结点俩种类型。
  3. 内部结点表示一个特征,叶结点表示一个类。

其中,每个内部结点表示一个属性的测试,每个分支表示一个测试输出,每个叶
结点代表一种类别。

在这里插入图片描述

1.1 决策树的训练和预测过程

决策树的训练过程就是确定最优的划分属性,预测过程就是沿着划分属性依次判定,
直到到达叶节点的决策结果。

在这里插入图片描述

1.2 决策树的发展过程

决策树的训练过程就是确定最优的划分属性,预测过程就是沿着划分属性依次判定,
直到到达叶节点的决策结果。

决策树在发展过程中出现了很多的模型,这些模型主要是由在确定划分属性时不同
的信息增益函数定义带来的,典型的模型如ID3、C4.5、CART、RF、GBDT、XGB。

在这里插入图片描述

2 GBDT模型

实际中很少使用单棵的决策树,尤其是当属性特征比较多时,决策树的高度将变的
很高,拟合的难度也很大,因此产生了集成多棵弱决策树的集成思想。GBDT就是
这样的其中一种集成方式。

GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,是一种迭代
的决策树算法,又叫 MART(Multiple Additive Regression Tree),它通过构造一
组弱的学习器(单棵树),并把多棵决策树的结果累加起来作为最终的预测输出。

在这里插入图片描述

2.1 Boosting核心思想

集成的方式主要有两种,一种是Boosting(串行,每次以前一个决策树为基础,代表
模型为GBDT,XGB),另一种是Bagging(Bootstrap aggregating的缩写, 并行,
将每个决策值累加起来,代表模型为随机森林RF)。

在这里插入图片描述

2.2 GBDT原理

GBDT的原理比较简单:

  • 所有弱分类器的结果相加等于预测值。
  • 每次都以当前预测为基准,下一个弱分类器去拟合误差函数对预测值的残差,
    残差即为预测值与真实值之间的误差。
  • GBDT的弱分类器使用的是树模型。

比如下面我们用 GBDT 去预测年龄:
第一个弱分类器(第一棵树)预测一个年龄(20岁),计算发现误差有6岁;
第二棵树预测拟合残差,预测值10,计算发现差距还有4岁;
第三棵树继续预测拟合残差,预测值3,发现差距只有1岁了;
第四课树用1岁拟合剩下的残差,完成预测。
最终,四棵树的结论加起来,得到30岁这个标注答案。
实际工程实现里,GBDT 是计算负梯度,用负梯度近似残差。

在这里插入图片描述

3 XGB模型

XGB是 eXtreme Gradient Boosting 的缩写称呼,它是一个非常强大的 Boosting
算法工具包,具有优秀的性能(并行计算效率、缺失值处理、控制过拟合、预测
泛化能力),现在很多机器学习方案依旧会首选这个模型。

3.1 XGB核心思想

前面说了Boosting的核心思想在于逐步累加决策值,对于训练的目标函数而言就是
逐步累加一个新的函数。

在这里插入图片描述
将上面的目标函数可以做如下变形,得到一个包含有二次项的目标函数:

在这里插入图片描述
训练的目的就是使目标函数最低,进一步使用泰勒展开来化简:

在这里插入图片描述

把常数项提出来(因为这是上一步的目标函数值),则当前步的目标函数可以
简化为:

在这里插入图片描述
后面还需要重新定义树,并计算目标函数的最优值:

在这里插入图片描述

具体生成树的时候,使用贪婪算法来生成树:

在这里插入图片描述

3.2 XGB优点

与GBDT模型比起来,XGB有如下的优点:

在这里插入图片描述

3 隐语纵向树模型

有了上面的基本认识,下面我们看隐语的纵向树模型

在这里插入图片描述

3.1 数据纵向分割

首先是垂直划分的数据集:

  • 所有数据方的样本一致
  • 但是拥有样本的不同特征
  • 只有一方持有标签

在这里插入图片描述

3.2 隐私保护的树模型算法

隐语提供了两种隐私保护方法,基于秘密分享的SS-XGB和基于联邦学习的SGB。
其中SS-XGB安全性高,适用于网络带宽高,时延低的环境。SGB核心是使用同态
加密,适用于算力高的环境。

在这里插入图片描述
两种算法的详细区别如下
首先是关注的密码协议不同:
一个是MPC协议,另一个是同态加密协议。

在这里插入图片描述
其次是参数不同:一个是仅含有XGB参数,另一个还需要设置联邦 学习的参数。

在这里插入图片描述

然后模型评估保存也不相同:一个是密态模型下的密态评估,各方持有分片。
一个是标签持有放单方面评估,预测结果为标签持有方是明文。

在这里插入图片描述

3.3 SS-XGB和SGB实现原理

主要分为三步对算法进行改造,算法原理参见: SS-XGB算法原理论文.

在这里插入图片描述

同样,SGB也有相应的算法改造过程:算法原理参见: SGB算法原理论文.

在这里插入图片描述

3.4 开发流程

在这里插入图片描述

在这里插入图片描述

3.5 隐语实现上的优势

隐语在实现上有如下的优势:

在这里插入图片描述

4 作业实战

本节课有如下的实践要求:

在这里插入图片描述

4.1 使用SS-XGB进行训练

1、建立网络

import secretflow as sf
import spu
import osnetwork_conf = {"parties": {"alice": {"address": "alice:8100",},"bob": {"address": "bob:8100",},},
}party = os.getenv("SELF_PARTY", "alice")
sf.shutdown()
sf.init(address="127.0.0.1:6379",cluster_config={**network_conf, "self_party": party},log_to_driver=True,
)

2、定义参数

alice, bob = sf.PYU("alice"), sf.PYU("bob")
spu_conf = {"nodes": [{"party": "alice","address": "alice:8101","listen_addr": "alice:8101",},{"party": "bob","address": "bob:8101","listen_addr": "bob:8101",},],"runtime_config": {"protocol": spu.spu_pb2.SEMI2K,"field": spu.spu_pb2.FM128,"sigmoid_mode": spu.spu_pb2.RuntimeConfig.SIGMOID_REAL,},
}
#这里我们将使用spu的训练方式

3、读取数据

import pandas as pd
import os
from secretflow.data.vertical import read_csv as v_read_csv, VDataFrame
from secretflow.data.core import partitioncurrent_dir = os.getcwd()
# load alice and bob data as a single vdataframe
data = v_read_csv({alice: f"{current_dir}/bank_0_8.csv", bob: f"{current_dir}/bank_8_16.csv"},keys="id",drop_keys="id",
)
# load alice's label data
alice_y_pyu_object = alice(lambda path: pd.read_csv(path, index_col = 0))(f"{current_dir}/bank_y.csv") 
label = VDataFrame(partitions={alice: partition(alice_y_pyu_object)})

4、编码非数值的特征

# from data descryptions we know we need to encode data
from secretflow.preprocessing import LabelEncoder
encoder = LabelEncoder()
data['job'] = encoder.fit_transform(data['job'])
data['marital'] = encoder.fit_transform(data['marital'])
data['education'] = encoder.fit_transform(data['education'])
data['default'] = encoder.fit_transform(data['default'])
data['housing'] = encoder.fit_transform(data['housing'])
data['loan'] = encoder.fit_transform(data['loan'])
data['contact'] = encoder.fit_transform(data['contact'])
data['poutcome'] = encoder.fit_transform(data['poutcome'])
data['month'] = encoder.fit_transform(data['month'])
label = encoder.fit_transform(label)

5、分割数据

from secretflow.data.split import train_test_split as train_test_split_fed
X_train_fed, X_test_fed = train_test_split_fed(data, test_size=0.2, random_state=94)
y_train_fed, y_test_fed = train_test_split_fed(label, test_size=0.2, random_state=94)

6、进行训练

from secretflow.ml.boost.ss_xgb_v import Xgb
from secretflow.data.split import train_test_split as train_test_split_fed
import timespu = sf.SPU(spu_conf) #这里我们更改为spu的训练方式# init
ss_xgb = Xgb(spu)start = time.time()
# 定义参数
params = {'num_boost_round': 14,'max_depth': 5,'learning_rate': 0.3,'sketch_eps': 0.1,'objective': 'logistic','reg_lambda': 0.1,'subsample': 1,'colsample_by_tree': 1,'base_score': 0.5,
}
# 训练模型
model = ss_xgb.train(params, X_train_fed, y_train_fed)

7、打印结果

from secretflow.device.driver import reveal
from sklearn.metrics import roc_auc_score# we reveal and look at the evaluation score in cleartext, but there are safer alternativesprint("train set AUC score: ",roc_auc_score(reveal(y_train_fed.partitions[alice].data), reveal(model.predict(X_train_fed))),"test set AUC score: ",roc_auc_score(reveal(y_test_fed.partitions[alice].data), reveal(model.predict(X_test_fed))),
)

4.2 作业结果

至此完成作业,输出结果为:

在这里插入图片描述
另外一个作业类似,需要先把数据集进行重新组合,一边有15个特征,另一边有1一个特征,训练代码改动不大,训练结果如下图。
分析:对比AUC值发现特征的分布不同并没有额外的AUC收益,这可以理解,因为训练效果的提高本质上是由于特征增加带来的,而不是特征在两边的分布数量差异。

在这里插入图片描述
至此,本节课程完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/39183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

和小红书一起参会! 了解大模型与大数据融合的技术趋势

在过去的两年中,“大模型”无疑成为互联网行业的焦点话题,曾经炙手可热的大数据架构似乎淡出公众视野。然而,大数据领域并未停滞不前,反而快速演进,传统依赖众多开源组件的大数据平台正逐步过渡到以融合与简化为核心特…

SQL语句的案例分析

根据提供的图片内容,这段文字看起来像是一个SQL查询的一部分,特别是一个用于删除数据的语句。以下是对这段SQL的核心内容整理: ### 核心内容整理: 1. **删除操作**: - 使用DELETE语句来删除数据。 2. **子查询**…

Java 并发集合:CopyOnWrite 写时复制集合介绍

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 016 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…

如何查看xpf文件

xpf文件是什么 XPF文件是“XML Paper Specification File”的缩写,它是一种文件保存格式,具有以下特点和相关信息: 一、定义与用途 定义:XPF文件用于保留文档的固定布局,包括文本、图片以及其他文档元素的确切位置。…

mysql-sql-第十三周

学习目标: sql 学习内容: 37.查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 及格为>60,中等为:70-80,优良为:80-90,优秀…

C#实现字符串模糊匹配

在C#中实现字符串的模糊匹配可以借助正则表达式或者一些模糊匹配算法来实现。 方法一:使用正则表达式 如果你的模糊匹配是基于简单的通配符(如*和?),可以通过正则表达式来实现。 using System; using System.Text.RegularExpr…

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值、没有关系的组件传值)

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)_vue 父传子-CSDN博客 vue 组件间传值:父传子 / 子传父 / 子传子 / 祖传孙 - 简书

刚入行的测试新人,应该如何规划自己的职业发展路径?

作为一个刚入行的测试新人,应该如何规划自己的职业发展路径?如何规划自己的技术路线?软件测试的段位都有哪些?他们之间的薪资差异如何? 听说这些问题,是目前想要入行软件测试的同学们最关心的。那么我们今天…

2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、数学模型及VISSIM仿真实现

2024 年江西省研究生数学建模竞赛题目交通信号灯管理 1 题目 交通信号灯是指挥车辆通行的重要标志,由红灯、绿灯、 黄灯组成。红灯停、绿灯行,而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一…

第2章.现场设备的物联网模式--数字孪生

2.2 数字孪生 DT是部署在现场的物联网设备的虚拟复制品。这个概念与创建物理实体或过程的模型(模拟)以了解其表现行为的过程非常相似。本书中使用的DT符号如下图所示: 图2.3——DT模式的符号 DT是物联网背景下的一种重要模式,因为…

【JavaScript脚本宇宙】打造完美用户体验:六大模态库全解析

从美观到高效:六大模态库实战指南 前言 随着现代Web开发的不断进步和用户体验要求的提升,模态窗口(Modal)已成为网页设计中不可或缺的一部分。模态窗提供了一种直观而有效的方式来展示重要信息、提示用户操作或承载交互内容。本…

【计算机网络】计算题(作业)

【一】 1、如下图所示网络。A在t0时刻开始向C发送一个2Mbits的文件;B在t0.1e秒(e为无限趋近于0的小正实数)向D发送一个1Mbits的文件。忽略传播延迟和结点处理延迟。 请回答下列问题:‏ (1)如果图中网络采…

检索增强生成RAG系列5--RAG提升之路由(routing)

在系列3和系列4我讲了关于一个基本流程下,RAG的提高准确率的关键点,那么接下来,我们再次讲解2个方面,这2个方面可能与RAG的准确率有关系,但是更多的它们是有其它用途。本期先来讲解RAG路由。 目录 1 基本思想2 Logica…

亲测解决argument --/--list: conflicting option string: --list

在设置一个变量的时候,需要输入一个list。按照教程设置后,如果设置了两个list变量,会出现这个错误。 环境 python3.12 + win11 解决方法 去掉"–list"即可。 Group.add_argument("--xiaohu", "--list", nargs="+",type=int, de…

等保测评应该选择什么样的SSL证书

选择适合等保测评的SSL证书,需考虑证书的加密强度、认证机制以及是否满足国家相关的密码技术要求 1、证书类型:应选择符合国家或行业标准的SSL证书,这些证书通常采用RSA、DSA或ECC等国际认可的加密算法。同时,考虑到国内特定的合规…

使用explain优化慢查询的业务场景分析

问:你最害怕的事情是什么?答:搓澡问:为什么?答:因为有些人一旦错过,就不在了 Explain 这个词在不同的上下文中有不同的含义。在数据库查询优化的上下文中,“EXPLAIN” 是一个常用的 …

基于Hadoop平台的电信客服数据的处理与分析②项目分析与设计---需求分析-项目场景引入

任务描述 需求分析是软件生命周期中一个非常重要的过程,它决定着整个软件项目的质量,也是整个软件开发的成败所在。本环节任务是完成软件需求规格说明书。 知识点 :软件需求规格说明书的编写 重 点 :软件需求规格说明书内容的…

基于gcn的半监督分类代码整理2

一、说明 对论文《Semi-Supervised Classification with Graph Convolutional Network》的代码整理。 第一部分主要说明了数据预处理和初始化等工作,这节主要说明gcn和mlp模型建模以及数据训练过程,以下是笔记和代码逻辑的整理。 注:本人是…

Android启动时间分析

在Android启动过程中,“NHLOS” 和 “LK” 是两个与启动时间相关的术语,它们分别指的是: 各阶段时间 I Minidump: Enabled with max number of regions 200 I KPI : Bootloader start count = 59264 I KPI : Bootloader end count = 101746 I KPI : Boo…

【Spring Boot】spring boot环境搭建

1、环境准备 JDK安装:确保安装了Java Development Kit (JDK) 1.8或更高版本。JDK是Java编程的基础,Spring Boot项目需要它来编译和运行。Maven或Gradle安装:选择并安装Maven或Gradle作为项目构建工具。Maven通过pom.xml文件来管理项目的依赖…