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

news2024/12/24 21:15:31

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

  • 第七课: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 os

network_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 partition

current_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 time
 
spu = 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 alternatives

print(
    "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.coloradmin.cn/o/1884990.html

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

相关文章

学习笔记——动态路由——IS-IS中间系统到中间系统(背景)

一、IS-IS技术背景 1、前言 IS-IS最初是国际标准化组织ISO(the International Organization for Standardization)为它的无连接网络协议CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议。 和OSPF一样,IS-IS也是一种基于链路状态并使用最短路径优先…

医疗器械FDA认证中,如何准备SBOM文件?

在医疗器械FDA认证过程中,准备SBOM(软件物料清单)文件是确保医疗器械软件部分符合FDA要求的关键步骤。以下是准备SBOM文件的清晰指南: 一、了解SBOM文件的目的和重要性 SBOM文件用于详细列出医疗器械所使用的所有软件组件、版本…

程序员节视频创意盛宴,邀您共赴创意之旅!

🌟 程序员节专属创意大赛震撼启幕! 🎉 亲爱的程序员及编程爱好者们,是时候拿起你们的镜头,捕捉那些日常中闪光的编程瞬间,向世界展示代码编织的奇迹与无限创意了!💻✨ &#x1f3c…

惠海 H6900B 2.7V3.7V4.2V5V9V升12V24V48VLED升压恒流芯片IC

惠海H6900B LED升压恒流芯片IC是一款功能丰富的LED驱动解决方案,为高亮度LED灯串设计。以下是针对该产品的进一步分析和解释: 产品特点 高效率:高达95%以上的效率意味着在驱动LED时,只有很少的能量转化为热量,从而提…

【Kaggle】Telco Customer Churn 数据编码与模型训练

💬在上一部分中,我们已经完成了对数据集背景解读、数据预处理与探索性分析。在数据背景解读中,我们介绍了数据集来源、电信用户流失分析的基本业务背景,并详细解释了每个字段的基本含义;在数据预处理过程中&#xff0c…

全国WMS厂商大盘点,哪家未来能杀出重围?

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 一、引言 随着物流行业的快速发展,仓储管理作为其重要的一环,正逐步受到越来越多企业的重视。当前,市…

可燃气体报警器检测标准对比:不同标准的优缺点分析

在工业生产及家庭生活中,可燃气体报警器发挥着至关重要的作用。它能够实时监测空气中可燃气体浓度,一旦超过安全阈值,便会发出警报,避免火灾和爆炸事故的发生。 接下来,佰德将重点探讨可燃气体报警器的检测标准&#…

三层交换基础

一、什么是三层交换 三层交换是一种在OSI模型第三层,即网络层上工作的网络设备技术,它整合了二层交换机的功能和路由器的部分功能,以实现更高效的网络数据转发和路由选择。三层交换技术的核心在于结合了二层交换技术和三层转发技术&#xff…

Java服务器代码远程调试(IDEA版)

Java服务器代码远程调试 配置启动脚本参数配置IDEA远程调试工具操作步骤 注意:远程调试的代码需要与本地代码一致,远程调试目的是解决本地环境无法支持调试的情况下,解决线上(测试)环境调试问题。 配置启动脚本参数 n…

Java Lambda语法介绍

目录 一、概述 二、Lambda语法的历史 2.1 Lambda名字的含义 2.2 Lambda的历史 三、Lambda语法的核心接口 3.1 Lambda的四大核心接口 3.1.1 概述 3.1.2 Consumer 接口 3.1.3 Supplier 接口 3.1.4 Function 接口,> 3.1.5 Predicate 接口 四、Lambda的引用 4.1 概…

统计鸟:小而美的网站流量统计工具,免费好用

目前常见的网站流量统计平台有百度统计、Google Analytics、51.LA、友盟等,但Google Analytics在国内打不开、友盟已收费、百度统计限制较多、51.LA也很可能走向收费,无奈的我总算在网上搜到一款小众而好用的网站流量统计工具——统计鸟,现给…

探索Toshiba东芝TLP265J光耦合器

在当今的电子元件市场中,寻找高质量和高可靠性的光耦合器解决方案对许多工程师和设计师来说至关重要。TLP265J这款产品在性能、安全性和可靠性方面均表现卓越,适用于多种工业和商业应用。本文将深入探讨TLP265J的特点、应用领域以及其技术优势&#xff0…

探索PcapPlusPlus开源库:网络数据包处理与性能优化

文章目录 0. 本文概要1. PcapPlusPlus介绍1.1 概述1.2主要特性和功能1.3 PcapPlusPlus 主要模块关系和依赖1.4 网络协议层处理过程 2. 实例2.1 基于 PcapPlusPlus 的应用程序设计和封装流程:2.2 多线程示例代码2.3 代码说明: 3. 程序性能进一步优化3.1 避…

基于人脸识别的考勤系统(Qt+opencv+Arm)测试报告

目录 1、项目描述 2、服务器端测试 2.1、注册人脸 A、填写基本信息 B、点击打开摄像头采集信息 C、点击拍照,提示数据库保存人脸信息成功 D、点击注册,提示注册成功 至此,服务器启动测试完毕 3、客户端测试 3.1、人脸验证测试 3.2、服务器端点…

2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、实现代码及参考论文

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

生产环境 CentOS 7 k8s v1.28.0离线部署

背景描述:CentOS 7 Kubernetes 离线部署 随着云计算和微服务架构的普及,Kubernetes(K8s)已经成为容器编排的标准工具。它能够自动化应用的部署、扩展和管理,使得开发和运维的工作更加高效和可靠。然而,在一…

(亲测有效)2024代替电视家的app,电视家停了还有什么软件可以看电视?

嘿,大家好,我是阿星,今天又来跟大家聊聊那些让人眼前一亮的电视直播软件。咱们这回不聊那些老掉牙的,来点新鲜的,让咱们的电视屏幕也能跟上潮流,享受一下科技带来的便利和乐趣。 首先,得提一提…

【Sklearn-驯化】一文分析教你如何使用k-means进行数据聚类

【Sklearn-驯化】一文分析教你如何使用k-means进行数据聚类 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内容文档关注&#…

工业读码器与商用扫码器的区别

条码二维码在数字信息化应用越来越广泛,扫码器成为了数据收集和处理的重要工具,无论是工厂生产和物流包裹朔源追踪,还是商场超市扫码收银和餐饮娱乐等场景,均能看到扫码器的辅助,市场上的扫码器种类繁多,在…

深入解析:Java爬虫的本质是什么?

深入解析:Java爬虫的本质是什么? 引言: 随着互联网的快速发展,获取网络数据已成为许多应用场景中的重要需求。而爬虫作为一种自动化程序,能够模拟人类浏览器的行为,从网页中提取所需信息,成为了…