隐私计算 FATE - 多分类神经网络算法测试

news2024/11/28 8:28:22

一、说明

本文分享基于 Fate 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练,并使用该模型对数据进行 多分类预测

  • 二分类算法:是指待预测的 label 标签的取值只有两种;直白来讲就是每个实例的可能类别只有两种 (0 或者 1),例如性别只有  或者 ;此时的分类算法其实是在构建一个分类线将数据划分为两个类别。
  • 多分类算法:是指待预测的 label 标签的取值可能有多种情况,例如个人爱好可能有 篮球足球电影 等等多种类型。常见算法:Softmax、SVM、KNN、决策树。

关于 Fate 的核心概念、单机部署、训练以及预测请参考以下相关文章:

  • 《隐私计算 FATE - 关键概念与单机部署指南》
  • 《隐私计算 FATE - 模型训练》
  • 《隐私计算 FATE - 离线预测》

二、准备训练数据

上传到 Fate 里的数据有两个字段名必需是规定的,分别是主键为 id 字段和分类字段为 y 字段,y 字段就是所谓的待预测的 label 标签;其他的特征字段 (属性) 可任意填写,例如下面例子中的 x0 - x9

例如有一条用户数据为: 收入 : 10000,负债 : 5000,是否有还款能力 : 1 ;数据中的 收入 和 负债 就是特征字段,而 是否有还款能力 就是分类字段。

本文只描述关键部分,关于详细的模型训练步骤,请查看文章《隐私计算 FATE - 模型训练》

2.1. guest 端

10 条数据,包含 1 个分类字段 y 和 10 个标签字段 x0 - x9

y 值有 0、1、2、3 四个分类

上传到 Fate 中,表名为 muti_breast_homo_guest 命名空间为 experiment

2.2. host 端

10 条数据,字段与 guest 端一样,但是内容不一样

上传到 Fate 中,表名为 muti_breast_homo_host 命名空间为 experiment

三、执行训练任务

3.1. 准备 dsl 文件

创建文件 homo_nn_dsl.json 内容如下 :

{
    "components": {
        "reader_0": {
            "module": "Reader",
            "output": {
                "data": [
                    "data"
                ]
            }
        },
        "data_transform_0": {
            "module": "DataTransform",
            "input": {
                "data": {
                    "data": [
                        "reader_0.data"
                    ]
                }
            },
            "output": {
                "data": [
                    "data"
                ],
                "model": [
                    "model"
                ]
            }
        },
        "homo_nn_0": {
            "module": "HomoNN",
            "input": {
                "data": {
                    "train_data": [
                        "data_transform_0.data"
                    ]
                }
            },
            "output": {
                "data": [
                    "data"
                ],
                "model": [
                    "model"
                ]
            }
        }
    }
}

3.2. 准备 conf 文件

创建文件 homo_nn_multi_label_conf.json 内容如下 :

{
    "dsl_version": 2,
    "initiator": {
        "role": "guest",
        "party_id": 9999
    },
    "role": {
        "arbiter": [
            10000
        ],
        "host": [
            10000
        ],
        "guest": [
            9999
        ]
    },
    "component_parameters": {
        "common": {
            "data_transform_0": {
                "with_label": true
            },
            "homo_nn_0": {
                "encode_label": true,
                "max_iter": 15,
                "batch_size": -1,
                "early_stop": {
                    "early_stop": "diff",
                    "eps": 0.0001
                },
                "optimizer": {
                    "learning_rate": 0.05,
                    "decay": 0.0,
                    "beta_1": 0.9,
                    "beta_2": 0.999,
                    "epsilon": 1e-07,
                    "amsgrad": false,
                    "optimizer": "Adam"
                },
                "loss": "categorical_crossentropy",
                "metrics": [
                    "accuracy"
                ],
                "nn_define": {
                    "class_name": "Sequential",
                    "config": {
                        "name": "sequential",
                        "layers": [
                            {
                                "class_name": "Dense",
                                "config": {
                                    "name": "dense",
                                    "trainable": true,
                                    "batch_input_shape": [
                                        null,
                                        18
                                    ],
                                    "dtype": "float32",
                                    "units": 5,
                                    "activation": "relu",
                                    "use_bias": true,
                                    "kernel_initializer": {
                                        "class_name": "GlorotUniform",
                                        "config": {
                                            "seed": null,
                                            "dtype": "float32"
                                        }
                                    },
                                    "bias_initializer": {
                                        "class_name": "Zeros",
                                        "config": {
                                            "dtype": "float32"
                                        }
                                    },
                                    "kernel_regularizer": null,
                                    "bias_regularizer": null,
                                    "activity_regularizer": null,
                                    "kernel_constraint": null,
                                    "bias_constraint": null
                                }
                            },
                            {
                                "class_name": "Dense",
                                "config": {
                                    "name": "dense_1",
                                    "trainable": true,
                                    "dtype": "float32",
                                    "units": 4,
                                    "activation": "sigmoid",
                                    "use_bias": true,
                                    "kernel_initializer": {
                                        "class_name": "GlorotUniform",
                                        "config": {
                                            "seed": null,
                                            "dtype": "float32"
                                        }
                                    },
                                    "bias_initializer": {
                                        "class_name": "Zeros",
                                        "config": {
                                            "dtype": "float32"
                                        }
                                    },
                                    "kernel_regularizer": null,
                                    "bias_regularizer": null,
                                    "activity_regularizer": null,
                                    "kernel_constraint": null,
                                    "bias_constraint": null
                                }
                            }
                        ]
                    },
                    "keras_version": "2.2.4-tf",
                    "backend": "tensorflow"
                },
                "config_type": "keras"
            }
        },
        "role": {
            "host": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "muti_breast_homo_host",
                            "namespace": "experiment"
                        }
                    }
                }
            },
            "guest": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "muti_breast_homo_guest",
                            "namespace": "experiment"
                        }
                    }
                }
            }
        }
    }
}

注意 reader_0 组件的表名和命名空间需与上传数据时配置的一致。

3.3. 提交任务

执行以下命令:

flow job submit -d homo_nn_dsl.json -c homo_nn_multi_label_conf.json

执行成功后,查看 dashboard 显示:

四、准备预测数据

与前面训练的数据字段一样,但是内容不一样,y 值全为 0

4.1. guest 端

上传到 Fate 中,表名为 predict_muti_breast_homo_guest 命名空间为 experiment

4.2. host 端

上传到 Fate 中,表名为 predict_muti_breast_homo_host 命名空间为 experiment

五、准备预测配置

本文只描述关键部分,关于详细的预测步骤,请查看文章《隐私计算 FATE - 离线预测》

创建文件 homo_nn_multi_label_predict.json 内容如下 :

{
    "dsl_version": 2,
    "initiator": {
        "role": "guest",
        "party_id": 9999
    },
    "role": {
        "arbiter": [
            10000
        ],
        "host": [
            10000
        ],
        "guest": [
            9999
        ]
    },
    "job_parameters": {
        "common": {
            "model_id": "arbiter-10000#guest-9999#host-10000#model",
            "model_version": "202207061504081543620",
            "job_type": "predict"
        }
    },
    "component_parameters": {
        "role": {
            "guest": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "predict_muti_breast_homo_guest",
                            "namespace": "experiment"
                        }
                    }
                }
            },
            "host": {
                "0": {
                    "reader_0": {
                        "table": {
                            "name": "predict_muti_breast_homo_host",
                            "namespace": "experiment"
                        }
                    }
                }
            }
        }
    }
}

注意以下两点:

  1. model_id 和 model_version 需修改为模型部署后的版本号。

  2. reader_0 组件的表名和命名空间需与上传数据时配置的一致。

六、执行预测任务

执行以下命令:

flow job submit -c homo_nn_multi_label_predict.json

执行成功后,查看 homo_nn_0 组件的数据输出:

可以看到算法输出的预测结果。

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

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

相关文章

【微机接口】可编程串行异步通信芯片8250

8250能实现数据串并变换,实现全双工异步通信。 支持异步通信协议,数据格式、通信速率由初始化编程设定。 内部有中断机制,CPU可用查询中断方式与之交换信息。 8250内部寄存器: 发送保持寄存器:保存CPU传送来的并行数…

通过sls采集k8s集群上的服务日志

1. 概述 日志服务SLS是阿里云提供云原生观测与分析平台,供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能。 sls采集K8S集群的日志,通过安装logtail dameonset,结合sls 控制台方式采集容器文本日志、控制台日志,通…

长链点击化学PEG试剂m-PEG12-DBCO用于生物标记

m-PEG12-DBCO物理参数: CAS号:N/A | 英文名:m-PEG12-DBCO | 中文名:甲基-十二聚乙二醇-二苯并环辛炔 分子式:C44H66N2O14 分子量:847 纯度标准:95%(HPLC) 外形颜色:淡黄色油状&…

MacBookPro 安装cx_Oracle,并配置环境

一、安装cx_Oracle 本机系统:macOS Monterey 版本 12.5 Anaconda版本:Anaconda3-2022.10-MacOSX-x86_64.pkg python版本:3.9.13 mac下安装cx_Oracle比较简单,直接打开终端 pip install cx_Oracle 二、安装Oracle客户端 直…

[ Linux ] 进程间通信介绍 管道

目录 0.进程间通信介绍 0.1通信背景 0.2进程间通信目的 1.管道 1.1 管道是什么 1.2 匿名管道 1.2.1管道通信的特点 1.2.2 匿名管道编码 父进程控制子进程的行为 进程池 -- 池化概念 1.3管道的特征总结 1.4命名管道 1.4.1创建一个命名管道 1.4.2 命名管道编码 0.进…

dump文件类型与dump文件生成方法详解

目录 1、概述 2、dump文件的分类 2.1、dump按大小分类 2.2、查看dump文件中函数调用堆栈中变量的值 3、调用SetUnhandledExceptionFilter设置异常处理回调函数,然后调用MiniDumpWriteDump生成dump文件 4、使用Google开源库CrashRpt捕获异常,并自动…

内网域环境搭建教程

搭建环境 win2012(DC):10.10.10.161 win2008 : 10.10.10.160 win7 : 10.10.10.157 环境配置 WIN2012域控机配置 将域控机配置成静态IP 更改计算机名 方便之后识别 安装域控制器和DNS服务 重启——安装 升级配置为域控制器 配置根域名为…

TOUGH2系列建模方法及在CO2地质封存、水文地球化学、地热、地下水污染等领域中的实践技术应用

TOUGH2系列软件是由美国劳伦斯伯克利实验室开发的,旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同,TOUGH2系列软件采用模块化设计和有限积分差网格剖分方法,通过配合不同EOS模块,软件…

[Geek Challenge 2022] crypto部分

这个比赛是一个网友让我看看的,这个比赛很有意思,crypto题全是百度网盘,pwn题全是谷歌网盘,这样我这pwn题就基本over了。还好这些crypto都不怎么难,都答出来了。最后成绩到10名了。 w_or_m? 第1个50分的题&#xff…

股票level2接口-API程序化文档说明

股票level2接口-API程序化文档说明,新手在API程序化上跟随老手进行。这是一种新的模式,适合那些想要而不知道如何投资正确项目的人。 股票level2接口TickRecord 逐笔说明(部分) 现在网络发展,使用组也很常见&#xff…

Html代替<iframe>标签的三种方法<object>, <embed>和<video>

背景 某平台对iframe标签做了些许限制但是前端代码有bug导致提交不了代码, 最开始想着是不是能够在本地替换js文件从而绕过bug 简单搜索后找到了 chrome浏览器F12调式,修改替换js文件这篇博客, 简单试了下虽然能替换成功但是效果不理想, 改不了平台就只能适应平台了…

mysql日志持久化机制

文章目录前言binlog的持久化机制redo log 的持久化机制组提交MySQL的io瓶颈性能优化总结前言 之前的文章介绍过,mysql 的日志是保证数据恢复的关键。那么日志肯定是要持久化到磁盘的,不然也会出现断电或者重启丢失的问题。那么接下来,我们将…

哈佛大学:三个简单的方式,患癌风险降低60%以上

癌症是全球主要的公共卫生问题,近年来,由于饮食、环境、人口的老龄化等因素,全球癌症发病率不断增长,癌症作为主要死因的情况日益突出。根据国际癌症研究机构(IARC)发布的2020年全球最新癌症数据&#xff0…

求斐波那契数(递归,非递归)

目录 一、斐波那契数? 二、递归实现求第n个斐波那契数 2.1代码与运行结果 2.1.1图解递归过程 三、非递归求法 3.1为什么不用递归求法 3.2非递归 一、斐波那契数? 它指的是这样的数列:1,1,2,3&#xff0…

【附源码】计算机毕业设计JAVA智能社区管理系统

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

安泰测试-信号发生器常见的故障与解决方法

信号发生器是一种能提供各种频率、波形和输出电平电信号的设备。在测量各种电信系统或电信设备的振幅特性、频率特性、传输特性及其它电参数时,以及测量元器件的特性与参数时,用作测试的信号源或激励源,经常和示波器是老搭档,也是…

三菱FX3U——ST编程流水灯

当D0的默认值为0时,赋值1; TON_1每隔1秒触发输出M1,M1触发D0左移一位,D0的值相当于每1秒乘以2; 在通过M1复位定时TON_1; 每一秒使一个输出得电,当D0的值不在选项内的值,将D0赋值为0&#xff1…

无序和混乱终结者,极狐GitLab Workflow 到底有什么魔力?

效率和质量是软件产品追求的两个核心关键点,软件产品研发是一个覆盖多阶段、涉及多团队的过程,业界也已经总结出了一些很好的实践,在保证研发效率的同时还能保证代码质量。比如代码提交规范、Code Review、代码准入、CI/CD。 但是由于缺乏行之…

冒死开源。阿里新产Spring Boot+Spring Cloud微服务开发实战笔记

昨天跟粉丝聊到了一个问题,他说现在很多招聘要求需要有微服务经验,本人目前生产上没有微服务经验,该如何弥补? 小编在这儿就分享一份学习资料,这份资料既是初学者学习微服务开发的技术宝典,又是中级开发人…

不同版本的谷歌浏览器跨域怎么设置?

由于项目前端使用8001端口,后端使用的8080端口,因此前端调用后端接口时需要跨域,在浏览器中需要设置跨域,否则会由于跨域安全性导致请求失败。 一. 浏览器版本大于49 1.在chrome中,需要新建一个chrome浏览器的快捷方…