第六章:用FATE从零实现纵向线性回归

news2025/1/17 14:04:55

第六章 用FATE从零实现纵向线性回归

    • 6.1 数据集的获取与描述
    • 6.2纵向数据集切分
    • 6.3 纵向联邦训练
      • 6.3.1 数据输入
      • 6.3.2 样本对齐
      • 6.3.3 模型训练
    • 6.4 模型评估
  • 代码

本章利用FATE从零开始实现一个简单的纵向线性回归模型,本章以实验为主。

与第5章一样,本章的实验运行在FATE单机版环境上,因此要求读者预先安装FATE单机版。FATE单机版的安装步骤可参考4.2节或FATE的GitHub官方文档。

6.1 数据集的获取与描述

我们使用波士顿房价预测数据集(Boston Housing)作为本章的实验数据集。Boston Housing数据隼已经内置在中,可以直接加载查看。

img

使用sklearn库加载数据集之后,利用看前5个样本数据,如图6-1所示。Boston Housing数据集一共有506条样本数据,前13列分别对应13维的特征数据,最后一列"MEDV"农示房屋的均值价格(单位:1000美元)。

img

6.2纵向数据集切分

为了能够有效地模拟纵向联邦的案例,首先在本地将BostonHousing数据集切分为纵向联邦的形
式。假设当前有两方参与纵向朕邦训练,如图6-2所示。

img

从BostonHousing数据集中抽取前406条作为训练数据,将后面100条作为评估测试数据。

  • 训练数据集切分:从406条训练数据中随机抽取360条数据和前8个特征作为公司A的本地数据,文件保存为housing_1_train.csv。同样,从这406条训练数据中抽取380条数据和后5个特征,以及标签MEDV,作为公司B的本地数据,文件保存为housing_2_train.csv。将这两份数据分别发送到公司A和公司B,该过程如图6-3所示。

    img

  • 测试数据集切分:从100条评估测试数据中随机抽取80条数据和前8个特征作为公司A的本地测试数据,文件保存为housing_1_eval.csv。再从这100条测试数据集中随机抽取85条数据和后5个特征,以及标签MEDV,作为公司B的本地测试数据,文件保存为housing_2_eval.csv。同样,将这两份数据分别发送给公司A和公司B。

在进行本章的实验时,可以根据自己的需要来切玢数据。按上述方案切分后,最终两家公司的数据分布表6-1。我们观察到在训练集中,两家公司的用户交集85%左右,而测试集的用户交集大约为68%。

表6-1两家公司的数据分布情况

img

需要特别注意的是,使用以上切分方的目的是模拟纵向建模。事实上,在现实的纵向联邦建模中,不同粗构的特征数据本身基本没有太多的交集,因此,在业务开发过程中,基本不会涉及数据切分的工作。

6.3 纵向联邦训练

为两方准备好数据之后,就可以利用FATE来构建纵向联邦训练了。在FATE中构建纵向联邦模型的流程与横向联邦很相似,通常会涉及下面四项工作。

  • 数据输入:将文件(如CSV、TXT等文本文件〕转换为FATE支持的DTable格式。前面已经阐述DTabIe是FATE底层的数据结构,所有的悍作都是在DTable格式中进行的,其作用类似于RDD在Spark中的作用。
  • 样本对齐:这是纵向联邦特有的工作。两个参与方中的本地数据,它们的用户集合不相同,因此,需要先求出它们的用户交集,再利用这部分交集数据进行模型训练。
  • 模型训练:求取了交集数据之后,就可以进行纵向联邦模型训练了,具体的算法步骤可以参考相关文献。
  • 模型评估:与横向联邦模型评估、集中式模型评估个同的是,纵向联邦模型评估所需要的评估数据也分布在两个参与方中,因此模型评估也需要联合双方才能进行。

与横向联邦训练一样,FATE为纵向联邦提供了丰富的接口,开发人员不需要重新开始编码,只需要通过提供dsl和conf配置文件,就能完成上面的四步操作。为了后面章节的叙述统一,假设安装的FATE单机版本目录为

img

6.3.1 数据输入

FATE提供了将本地文件转化为FATE支持的DTable格式的工具。先将上一节切分的四个文件上传到$fate_dir/examples/data目录。

  • housing_1_train.csv,housing_1_eval.csv:公司A的本地训练数据和本地测试数据;
  • housing_2_train.csv,housing_2_eval.csv:公司B的本地训练数据和本地测试数据。

与5.4.1节类似,我们定义上传数据配置文件,将其命名为upload_data.json,其内容如下面的代码块所示。我们需要修改其中的三个字段,即file,table_name和name_space,其余字段使用默认值即可。这三个字段的含义已经在第5章中进行了阐述,这里不再重复讲解。

img

以上传housing_1_train.csv文件为例,需要将file设置为该文件当前所在的目录,同时自定义对应的DTable表名和命名空间,修改后的文件如下所示。

img

修改完成后,在命令行中执行下面的命令(upload),FATE会自动将原始的本地文件housing_1_train.CSV转为DTable表hetero_housing_1_train。

img

如果执行成功,那么系统将返回下面的信息,读者可以将board_url字段中的网址输入浏览器中查看执行结果。同理,对于其余三个文件,可以按照上面的过程执行自行修改file,table_name和namespace三个字段,这里不再详述。

img

img

6.3.2 样本对齐

样本对齐(图6-4),即在不泄露双方数据的前提下,求取出双方用户的交集,从而确定模型训练的训练数据集。纵向联邦的样本对齐也是私有集交集(Private Set Intersection,PSI)技术的一种。

img

FATE提供了多方安全的样本对齐法,算法基于RSA加密法和散列函数来实现。利用FATE建模时,不需要自己实现样本对齐算法,FATE为模型训练提供了样本对齐的接口。

6.3.3 模型训练

经过前面的工作,我们已经准备好了模型训练所需要的数据,能够看到FATE官方提供的很多模型参考例子,如图6-5所示。

使用纵向线性回归模型来预测房价。进入$fate_dir/examples/dsl/v1/hetero_linear_regression目录,在该目录下,有很多已经定义的d引和conf配置文件,挑选下面两个文件来修改。

  • test_hetero_linr_train_job_dsl.json:用来描述任务模块,将任务模块以有向无环图的形式组合在一起。

img

​ 图6-5 模型参考例子

  • test_hetero_linr_train_job_conf.json:用来设置各个组件的参数,比如输入模块的数据表名;篡法模块的学习率、batch大小、迭代次数等。

首先来查看dsI配置文件,在命令行中打开当前的dsl引文件。当前的dsl已经定义了四个组件
模块,对于模型训练来说,这四个组件构成了最基本的纵向朕邦训练要素,在本案例中直接使用即可。

  • dataio_0、数据I/O组件,用于将本地数据转换为DTableo
  • intersection_0:样本对齐组件,用于求取两方的数
  • hetero_linr_0:纵向线性回归模型组件,这里我们使用线性回归,如果使用其他篡法,设置为相应的模块即可。比如,如果想使用纵向的神经网络模型,则设置为hetero_nn_0。
  • evaluation_o:模型评估组件。如果没有提供测试数据集,则将自动使用训练数据集作为测试数据集。

接下来查看conf配置文件,该文件包括了所有运行相关的参数信息,在一般情况下使用默认值即可,需要修改的地方包括以下两处。

  • roleparameters字段:找到role_parameters字段,该字段下包括guest和host,分别对应于两个参与方,其中guest代表带有标签信息的公司B,host代表没有标签的公司A。guest有三个参数需要修改。首先是train_data下面的name和namespace,代表训练数据的DTable表名和命名空间,将其修改为up-date.json文件中的name和namespace;此外label_name表示的是标签列对应的属性名,比如本案例中的标签列名是"y"。

img

同样修改host方本地训练数据的DTable表名和命名空间,但host方没有标签信息,因此不需要添加label_name。

img

  • algorithmparameters字段:algorithm_parameters字段是用来设置模型训练的超参数信息的,比如模型优化函数、学习率、迭代次数、batch大小等,读者可以根据实际需要修改。

img

img

修改完文件配置后,在命令行中输入submit_job执行模型训练,该命令只需要提供dsl和conf配置文件即可。

img

如果一切运行正常,可以得到下面的输出信息。可以在浏览器中输入board_url字段下的网址,查看当前的任务运行情况。

img

6.4 模型评估

与5.4.3节中横向联邦评估一样,在上面的训练实例中,仅提供了模型训练的数据信息。在这种情况下,模型评估使用的是训练数据。如果想使用独立的测试数据来进行模型评估,就需要添加新的数据模块。

首先修改ds汶件。需要在dsl中增加新的测试数据输入模块dataio_1和测试数据样本对齐模块intersection_1,读者也可以对比观察在模型评估中添加的项与前面模型训练时添加的项。

img

img

一个简单的测试数据输入模块组件dataio_1和测试数据样本对齐模块intersection_1的设置示例,如下所示。

img

最终的模型组件的区别如图6-6所示。两者的区别在于,模型的评估数据需要单独的数据输入转换
和样本对齐。

然后,需要修改conf配置文件,添加评估测试数据集对应的DTable表名和命名空间,如下所示。

img

img

修改文件配置后,为了和没有测试数据的任务区分,将dsl文件另存为test_hetero_linr_evaluate_job_dsl.json,将conf文件另存为test_hetero_linr_evaluate_job_conf.json,在命令行中执行相同的submit_job命令。

img

代码

https://download.csdn.net/download/unseven/88217526

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

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

相关文章

GEWE框架 ipad协议

GEWE框架 是一套完整的的第三方服务平台,包含微信API服务、企微API服务、SCRM系统定制、企微系统定制、服务类软件定制等模块,本文档主要讲述个微API服务相关,以下简称API,它能处理用户微信中的各种事件,提供了开发者…

使用VSCode的 Dev Containers 插件搭配Docker 容器进行开发环境的搭建

需要安装插件 https://marketplace.visualstudio.com/items?itemNamems-vscode-remote.remote-containers 安装Docker 这样做的好处 每一个项目可以运行一个容器,在容器内开发,相关之间node环境隔离,彻底解决本地包版本依赖关错乱问题共用…

日精注塑机联网

不改造程序的话,日精支持输出CSV和txt数据作为其他软件的接口。 改造后可以支持63协议。 在软件层面日精也有专用的软件,可以看到其实设备厂家提供的软件功能已经非常丰富了,但这类软件最大的缺点是只能自己家的机器使用,要想其他…

基于Pytorch构建AlexNet网络对cifar-10进行分类

AlexNet网络是CV领域最经典的网络结构之一了,在2012年横空出世,并在当年夺下了不少比赛的冠军。也是在那年之后,更多的更深的神经网络被提出,比如优秀的vgg,GoogLeNet。AlexNet和LeNet的设计非常类似,但AlexNet的结构比…

获取通达信股票代码接口--通达信逐笔接口(一)

通达信逐笔接口也是能获取股票的逐笔交易数据,但需要提前通达信逐笔接口提前安装通达信软件系统,打开相关的数据权限或者接口使用权限才能执行。一般执行步骤: 1. 初始化接口:在代码中引入相关的库文件并初始化获取通达信股票代码…

每日一题 24两两交换链表中的节点

题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出&#xff1a…

数据暴涨时代,该如何数据治理?_光点科技

随着信息技术的迅猛发展,数据已经成为现代社会的核心资源。在这个被称为"数据暴涨时代"的时代里,大量的数据源源不断地被产生和积累,但如何有效地管理、分析和利用这些数据成为了一个迫切需要解决的问题。数据治理,作为…

【JVM】如何判定一个对象已死以及“标记-清除”、“标记-复制”、“标记-整理”三种垃圾收集算法

文章目录 0、如何判定一个对象的生死?1、上文提到的引用又是什么1、强引用:2、软引用:3、弱引用:4、虚引用: 2、垃圾收集算法1、标记-清除2、标记-复制优化:👇 3、标记-整理 0、如何判定一个对象…

2023雷军年度演讲听后感

(点击即可收听) 2023雷军年度演讲-文字完整版 2023年8月14号晚,雷军的第四次演讲,热些沸腾 相比前三次演讲,第一次在2020 年 8 月 11 日,以“相信自己,一往无前”为主题进行了分享,第二次,第三次分别是在2021 年和 202…

node 版本与 node-sass node-loader 版本的对应关系

node 版本与 node-sass 版本的对应关系: 其一、查看文档的地址: https://www.npmjs.com/package/node-sass 其二、对应关系的表格: 对应版本 node16 “node-sass”: “6.0.1” “sass-loader”: “10.2.0” node: v14.19.0; node-sass: ^4…

【js】js中apply()、bind()、call()用法

这三个方法的作用基本上相同,用法上有一些不同,下面先对比一下它们的用法: apply:调用一个具有给定 this 值的函数,以及以一个数组(或一个类数组对象)的形式提供的参数。 语法: ap…

allure相关笔记

allure.epic:最高级别的分类,表示一个大的功能、模块或业务场景。功能模块 allure.feature:表示一个功能模块或业务子场景,位于史诗下。主流程 allure.story:表示一个具体的测试场景,位于特性下。具体主流程…

分享几个自己常用的JS库加快开发效率

分享经常用的几个js库,主要涉及到前端的视频播放(直播)、时间格式化、时间范围选择、连续翻滚、防抖等js库。可以很好的解决前端的一些问题。 1.videojs 是一个通用的在网页上嵌入视频播放器的 JS 库,Video.js 自动检测浏览器对 …

零代码新思路,基于LogicFlow的页面逻辑编排

在滴滴客服业务里,通过零代码的方式来配置页面已有丰富的落地经验,大大提高了服务用户的效率和质量。但是传统零代码在页面逻辑配置上表现并不好,很难做到灵活扩展。因此,滴滴客服技术团队探索出一种新思路,用流程编排…

20W IP网络吸顶喇叭 POE供电吸顶喇叭

SV-29852T 20W IP网络吸顶喇叭产品简介 产品用途: ◆室内豪华型吸顶喇叭一体化网络音频解码扬声器,用于广播分区音频解码、声音还原作用 ◆应用场地如火车站、地铁、教堂、工厂、仓库、公园停车场等;室内使用效果均佳。 产品特点&#xff…

多传感器外参标定

文章目录 lidar和imu标定code: [https://gitcode.net/weixin_42990464/calib_lidar_imu](https://gitcode.net/weixin_42990464/calib_lidar_imu)code: [https://github.com/APRIL-ZJU/lidar_IMU_calib](https://github.com/APRIL-ZJU/lidar_IMU_calib) lidar和imu标定 code: …

WORD如何调整表格的宽度

目录 1. 调整表格宽度 1. 调整表格宽度 如下图,要求将文档中的表格宽度调整到2厘米。 点击选中要调整的表格,依次点击【布局】-【属性】选项。 如下图,通过上一个步骤的操作,系统弹出表格属性对话框。 在弹出的【表格属性】对话框…

尚硅谷MySQL笔记 3-9

我不会记录的特别详细 大体框架 基本的Select语句运算符排序与分页多表查询单行函数聚合函数子查询 第三章 基本的SELECT语句 SQL分类 这个分类有很多种,大致了解下即可 DDL(Data Definition Languages、数据定义语言),定义了…

DRF的限流组件(源码分析)

限流,限制用户访问频率,例如:用户1分钟最多访问100次 或者 短信验证码一天每天可以发送50次, 防止盗刷。 对于匿名用户,使用用户IP作为唯一标识。对于登录用户,使用用户ID或名称作为唯一标识。 缓存{用户…

图文结合丨带你轻松玩转MySQL Shell for GreatSQL

一、引言 1.1 什么是MySQL Shell ? MySQL Shell 是 MySQL 的一个高级客户端和代码编辑器,是第二代 MySQL 客户端。第一代 MySQL 客户端即我们常用的 MySQL 。除了提供类似于 MySQL 的 SQL 功能外,MySQL Shell 还提供 JavaScript 和 Python 脚本功能&a…