目录

  • 1. 获取数据集
    • 1.1 下载数据集
    • 1.2 横向数据集切分
  • 2. 通过DSL Conf运行训练和预测任务
    • 2.1 数据输入
    • 2.2 模型训练
      • 2.2.1 配置DSL文件
      • 2.2.2 运行配置Submit Runtime Conf
      • 2.2.3 提交任务,训练模型
    • 2.3 模型评估
      • 2.3.1 修改DSL
      • 2.3.2 修改conf
      • 2.3.3 提交任务

1. 获取数据集

1.1 下载数据集

  • 数据集:乳腺癌肿瘤数据集(内置在sklearn库)
from sklearn.datasets import load_breast_cancer
import pandas as pd breast_dataset = load_breast_cancer()
breast = pd.DataFrame(breast_dataset.data, columns=breast_dataset.feature_names)
breast.head()

  • 观察数据发现,样本数569,特征数30(10个属性分别以均值mean、标准差std、最差值worst出现),标签(1-良性肿瘤,0-恶性肿瘤)1:0 = 357:212

1.2 横向数据集切分

  • 为了模拟横向联邦建模场景,将数据集切分为特征相同的横向联邦形式
  • 切分策略:
    • 前469个数据作为训练数据,后100个数据作为测试数据
    • 训练数据中,前200个作为机构A的数据,存为breast_1_train.csv,后269个数据作为机构B的数据,存为breast_2_train.csv
    • 测试数据不切分,存为breast_eval.csv
  • 数据集完整代码
from sklearn.datasets import load_breast_cancer
import pandas as pd breast_dataset = load_breast_cancer()
breast = pd.DataFrame(breast_dataset.data, columns=breast_dataset.feature_names)breast = (breast-breast.mean())/(breast.std())  # z-score 标准化col_names = breast.columns.values.tolist()columns = {}
for idx, n in enumerate(col_names):columns[n] = "x%d"%idx
breast = breast.rename(columns=columns)   breast['y'] = breast_dataset.target
breast['idx'] = range(breast.shape[0])
idx = breast['idx']
breast.drop(labels=['idx'], axis=1, inplace = True)
breast.insert(0, 'idx', idx)breast = breast.sample(frac=1) # 打乱数据train = breast.iloc[:469]
eval = breast.iloc[469:]
breast_1_train = train.iloc[:200]
breast_2_train = train.iloc[200:]
breast_1_train.to_csv('breast_1_train.csv', index=False, header=True)
breast_2_train.to_csv('breast_2_train.csv', index=False, header=True)
eval.to_csv('breast_eval.csv', index=False, header=True)

2. 通过DSL Conf运行训练和预测任务

  • 可以通过 Flow Client HF提交 conf 和 dsl 来开始训练作业
  • 这个流程包括
    • 数据输入
    • 模型训练
    • 模型评估
  • 注:配置文件中的注释在使用时要去除,否则无法进行 Flow Client 任务

2.1 数据输入

  • 上传数据的配置文件示例可以从以下目录找到

    • example/dsl/v2/upload

      • upload_conf.json 或 upload_tag_conf.json(配置项相同)
      • 该配置文件结构
        {"file": "/data/projects/fate/examples/data/breast_hetero_guest.csv", // 数据文件路径,相对于当前所在路径"table_name": "breast_hetero_guest",  // 需要转换为DTable格式的表名"namespace": "experiment",// DTable格式的表名对应的命名空间"head": 1,  // 指定数据文件是否包含表头,1: 是,0: 否"partition": 8,    // 指定用于存储数据的分区数"work_mode": 0,     // 指定工作模式,0: 单机版,1: 集群版"backend": 0    // 指定后端,0:EggRoll, 1: Spark _ RabbitMQ, 2: Spark + Pulsar
        }
        
  • 这里使用较新的dsl v2版本,配置文件如下

    • workspace/HFL_lr/ 是我建立在fate根目录下的目录
    • 上传训练数据至机构1 upload_train_host_conf.json
      {"file": "workspace/HFL_lr/breast_1_train.csv","table_name": "homo_breast_1_train","namespace": "homo_host_breast_train","head": 1,"partition": 8,"work_mode": 0,"backend": 0
      }
      
    • 上传训练数据至机构2 upload_train_guest_conf.json
      {"file": "workspace/HFL_lr/breast_2_train.csv","table_name": "homo_breast_2_train","namespace": "homo_guest_breast_train","head": 1,"partition": 8,"work_mode": 0,"backend": 0
      }
      
    • 上传测试数据至机构1 upload_eval_host_conf.json
      {"file": "workspace/HFL_lr/breast_eval.csv","table_name": "homo_breast_1_eval","namespace": "homo_host_breast_eval","head": 1,"partition": 8,"work_mode": 0,"backend": 0
      }
      
    • 上传测试数据至机构2 upload_eval_guest_conf.json
      {"file": "workspace/HFL_lr/ 是我建立在fate根目录下的目录breast_eval.csv","table_name": "homo_breast_2_eval","namespace": "homo_guest_breast_eval","head": 1,"partition": 8,"work_mode": 0,"backend": 0
      }
      
  • 上传数据命令

    workspace/HFL_lr/ 是我建立在fate根目录下的目录
    $ flow data upload -c workspace/HFL_lr/upload_train_host_conf.json
    $ flow data upload -c workspace/HFL_lr/upload_train_guest_conf.json
    $ flow data upload -c workspace/HFL_lr/upload_eval_host_conf.json
    $ flow data upload -c workspace/HFL_lr/upload_eval_guest_conf.json
    


    数据上传成功

  • 提示:若出现以下问题,说明

    {                                                                                                                 "retcode": 100,                                                                                               "retmsg": "Fate flow CLI has not been initialized yet or configured incorrectly. Please initialize it before using CLI at the first time. And make sure the address of fate flow server is configured correctly. The configuration file path is: /ai/xwj/federate_learning/fate_dir/standalone_fate_master_1.6.0/venv/lib/python3.6/site-packages/flow_client/settings.yaml."
    }
    

    说明Flow未初始化,执行命令flow init --ip 127.0.0.1 --port 9380即可

2.2 模型训练

  • 目前,FATE框架提供的 DSL 中,可以将各种任务模块通过一个有向无环图 (DAG) 组织起来。用户可以根据自身的需要,灵活地组合各种算法模块。
  • 这里采用逻辑回归模型。

2.2.1 配置DSL文件

  • 官方提供的示例可以以下目录找到

    • 官方示例中的各种模块说明

      • 数据读取组件(支持图像)
      • reader_0:dataio_0: 数据IO组件,用于将本地数据转为DTable
      • feature_scale_0:特征工程组件
      • homo_lr_0:横向逻辑回归组件
      • evaluation_0:模型评估组件,如果未提供测试数据集则自动使用训练集
    • /examples/dsl/v2/homo_logistic_regression
      {"components": {"reader_0": {"module": "Reader","output": {"data": ["data"]}},"dataio_0": {"module": "DataIO","input": {"data": {"data": ["reader_0.data"]}},"output": {"data": ["data"],"model": ["model"]}},"scale_0": {"module": "FeatureScale","input": {"data": {"data": ["dataio_0.data"]}},"output": {"data": ["data"],"model": ["model"]}},"homo_lr_0": {"module": "HomoLR","input": {"data": {"train_data": ["scale_0.data"]}},"output": {"data": ["data"],"model": ["model"]}},"evaluation_0": {"module": "Evaluation","input": {"data": {"data": ["homo_lr_0.data"]}},"output": {"data": ["data"]}}}
      }
      
      • dsl文件中数据流动的如图所示

2.2.2 运行配置Submit Runtime Conf

  • 每个模块都有不同的参数需要配置,不同的 party 对于同一个模块的参数也可能有所区别。为了简化这种情况,对于每一个模块,FATE 会将所有 party 的不同参数保存到同一个运行配置文件(Submit Runtime Conf)中,并且所有的 party 都将共用这个配置文件。
  • 除了 DSL 的配置文件之外,用户还需要准备一份运行配置(Submit Runtime Conf)用于设置各个组件的参数。
  • 角色说明
    • arbiter:是用来辅助多方完成联合建模的,它的主要作用是聚合梯度或者模型。比如纵向lr里面,各方将自己一半的梯度发送给arbiter,然后arbiter再联合优化等等。
    • initiator:任务发起人
    • host:数据提供方
    • guest:数据应用方
    • local:本地任务,该角色仅用于 upload 和 download 阶段
  • 官方提供的示例可以以下目录找到
    • /examples/dsl/v2/homo_logistic_regreesion/homo_lr_train_conf.json,对部分内容进行修改
     {"dsl_version": 2,// 发起人"initiator": {"role": "guest","party_id": 10000},// 所有参与此任务的角色// 每一个元素代表一种角色以及承担这个角色的party_id,是一个列表表示同一角色可能有多个实体ID"role": {"guest": [10000],"host": [10000],"arbiter": [10000] // 仲裁者},"job_parameters": {"common": {"job_type": "train","backend": 0,"work_mode": 0}},// 设置模型训练的超参数信息"component_parameters": {"common": {"dataio_0": {"with_label": true,"label_name": "y", "label_type": "int","output_format": "dense"},"homo_lr_0": {"penalty": "L2","tol": 1e-05,"alpha": 0.01,"optimizer": "sgd","batch_size": -1,"learning_rate": 0.015,"init_param": {"init_method": "zeros"},"max_iter": 10,"early_stop": "diff","encrypt_param": {"method": null},"cv_param": {"n_splits": 4,"shuffle": true,"random_seed": 33,"need_cv": false},"decay": 1,"decay_sqrt": true},"evaluation_0": {"eval_type": "binary"}},"role": {"host": {"0": {"reader_0": {"table": {"name": "homo_breast_1_train", // 修改DTable的表名,对应上传数据时配置文件的内容"namespace": "homo_host_breast_train" // 修改命名空间,对应上传数据时配置文件的内容}},"evaluation_0": {"need_run": false}}},"guest": {"0": {"reader_0": {"table": {"name": "homo_breast_2_train", // 修改DTable的表名,对应上传数据时配置文件的内容"namespace": "homo_guest_breast_train" // 修改命名空间,对应上传数据时配置文件的内容}}}}}}
    }
    

2.2.3 提交任务,训练模型

  • 执行pipeline任务

  • flow job submit -c ${conf_path} -d ${dsl_path}

    参数 Flag 必要参数 说明
    conf_path -c 任务配置文件路径
    dsl_path -d DSL文件路径。如果任务是预测任务,可以不输入。



    需要全部通过,才说明运行成功

可以看到训练结果

2.3 模型评估

  • 官方示例在目录examples/dsl/v2/homo_logistic_regression
  • homo_lr_train_eval_conf.json
  • homo_lr_train_eval_dsl.json

2.3.1 修改DSL

{"components": {"reader_0": {"module": "Reader","output": {"data": ["data"]}},"reader_1": {"module": "Reader","output": {"data": ["data"]}},"dataio_0": {"module": "DataIO","input": {"data": {"data": ["reader_0.data"]}},"output": {"data": ["data"],"model": ["model"]}},"dataio_1": {"module": "DataIO","input": {"data": {"data": ["reader_1.data"]},"model": ["dataio_0.model"]},"output": {"data": ["data"],"model": ["model"]}},"scale_0": {"module": "FeatureScale","input": {"data": {"data": ["dataio_0.data"]}},"output": {"data": ["data"],"model": ["model"]}},"scale_1": {"module": "FeatureScale","input": {"data": {"data": ["dataio_1.data"]},"model": ["scale_0.model"]},"output": {"data": ["data"],"model": ["model"]}},"homo_lr_0": {"module": "HomoLR","input": {"data": {"train_data": ["scale_0.data"],"validate_data": ["scale_1.data"]}},"output": {"data": ["data"],"model": ["model"]}},"evaluation_0": {"module": "Evaluation","input": {"data": {"data": ["homo_lr_0.data"]}},"output": {"data": ["data"]}}}
}

2.3.2 修改conf

{"dsl_version": 2,"initiator": {"role": "guest","party_id": 10000},"role": {"guest": [10000],"host": [10000],"arbiter": [10000]},"job_parameters": {"common": {"job_type": "train","backend": 0,"work_mode": 0}},"component_parameters": {"common": {"dataio_0": {"with_label": true,"label_name": "y","label_type": "int","output_format": "dense"},"homo_lr_0": {"penalty": "L2","tol": 1e-05,"alpha": 0.01,"optimizer": "sgd","batch_size": -1,"learning_rate": 0.15,"init_param": {"init_method": "zeros"},"encrypt_param": {"method": null},"max_iter": 10,"early_stop": "diff","cv_param": {"n_splits": 4,"shuffle": true,"random_seed": 33,"need_cv": false},"validation_freqs": 1},"evaluation_0": {"eval_type": "binary"}},"role": {"host": {"0": {"evaluation_0": {"need_run": false},"reader_1": {"table": {"name": "homo_breast_1_eval","namespace": "homo_host_breast_eval"}},"reader_0": {"table": {"name": "homo_breast_1_train","namespace": "homo_host_breast_train"}}}},"guest": {"0": {"reader_1": {"table": {"name": "homo_breast_2_eval","namespace": "homo_guest_breast_eval"}},"reader_0": {"table": {"name": "homo_breast_2_train","namespace": "homo_guest_breast_train"}}}}}}
}

2.3.3 提交任务

  • flow job submit -c ${conf_path} -d ${dsl_path}


【联邦学习FATE框架实战】(二)用FATE从零开始实现横向逻辑回归相关推荐

  1. 二、 FATE实战:实现横向逻辑回归任务的训练及预测

    文章目录 前言 一.数据集描述 1. 数据描述 2. 逻辑回归模型 二.FATE单机版部署 1.安装centos7 2. 安装Docker 3. FATE-standalone部署 三.FATE实现横 ...

  2. 联邦学习实战-2-用FATE从零实现横向逻辑回归

    一.安装FATE平台 FATE是微众银行开源的联邦学习框架 官方地址:https://fate.fedai.org 文档:https://fate.readthedocs.io/en/latest/_ ...

  3. 联邦学习开源框架方案选型

    无知者:[联邦学习开源框架]FedLab - 加速FL算法验证 联邦学习开源框架FedLab相关 FATE 单位:微众银行 github: https://github.com/FederatedAI ...

  4. 个性化联邦学习算法框架发布,赋能AI药物研发

    摘要:近期,中科院上海药物所.上海科技大学联合华为云医疗智能体团队,在Science China Life Sciences 发表题为"Facing Small and Biased Dat ...

  5. Coursera吴恩达《神经网络与深度学习》课程笔记(2)-- 神经网络基础之逻辑回归...

    转至:https://blog.csdn.net/red_stone1/article/details/77851177 上节课我们主要对深度学习(Deep Learning)的概念做了简要的概述.我 ...

  6. Coursera吴恩达《神经网络与深度学习》课程笔记(2)-- 神经网络基础之逻辑回归

    红色石头的个人网站:redstonewill.com 上节课我们主要对深度学习(Deep Learning)的概念做了简要的概述.我们先从房价预测的例子出发,建立了标准的神经网络(Neural Net ...

  7. 【联邦学习FATE框架实战】(四)用FATE从零开始实现纵向线性回归

    目录 1. 制作数据集 2. 通过DSL Conf运行训练和预测任务 2.1 数据输入 2.2 模型训练 2.2.1 配置DSL文件 2.2.2 运行配置Submit Runtime Conf 2.2 ...

  8. 联邦学习开源框架FATE

    FATE (Federated AI Technology Enabler) 是微众银行AI部门发起的全球首个联邦学习工业级开源框架,可以让企业和机构在保护数据安全和数据隐私的前提下进行数据协作. F ...

  9. 联邦学习开源框架FATE助力腾讯神盾沙箱,携手打造数据安全合作生态

    近日,微众银行联邦学习FATE开源社区迎来了两位新贡献者--来自腾讯的刘洋及秦姝琦,作为云计算安全领域的专家,两位为FATE构造了新的功能点,并在Github上提交修复了相关漏洞.(Github项目地 ...

最新文章

  1. android 百度地图zoomtospan,android百度地图:MapController
  2. nChain首席科学家CSW:闪电网络会把BCE变成空洞的幽灵
  3. Serializable Parcelable
  4. 【正一专栏】曼彻斯特德比落幕——曼城独孤求败继续超神
  5. mysql中难以理解的sql
  6. python break语句作用_Python
  7. 简单六步,用数据说服你的听众
  8. mysql二进制方式_MySQL数据库之MySql二进制连接方式详解
  9. 如何使用Docker轻松设置Ruby on Rails开发环境
  10. 华为手机多久可以摆脱美国技术依赖?任正非放出豪言!
  11. ComboBox信息读取
  12. Linux-install-mysql5.6
  13. jdk完全卸载(亲测jdk1.7.0_80在win7)
  14. C语言winform中
  15. [转]第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV...
  16. 高等数学(第七版)同济大学 习题1-2 个人解答
  17. Android 12中系统Wallpaper详解1--锁屏透看壁纸和桌面透看壁纸的切换
  18. 黑苹果(Hackintosh)驱动Intel HD 4600
  19. a4的尺寸大小转换为像素
  20. 一种基于linux系统的精准流量统计方法

热门文章

  1. 实验四 SQL语言的数据更新和视图
  2. PhotonServer中日志的配置
  3. 中层管理者应该做什么?
  4. 2K和XP的CMD命令教程(命令篇.要求置顶)
  5. STM32F427利用FSMC接口访问FPGA的SRAM(3)—— STM32F427访问FPGA的SRAM
  6. 计算机任务管理器不能打开,电脑任务管理器无法打开怎么办
  7. html怎么用空格占位符,HTML空格占位符
  8. 【JAVA类与对象----5(static、代码块)】
  9. linux局域网下远程启动机器
  10. android mp3 wav转换工具,音频提取转换工具app