-
4.3. list index out of range
-
四、Tips
-
- 4.1. 重新启动fate-flow和fateboard
-
4.2. ‘NoneType’ object has no attribute ‘count’
-
4.3. list index out of range
=====================================================================
FATE是微众银行开源的联邦学习框架
官方地址:https://fate.fedai.org
文档:https://fate.readthedocs.io/en/latest/_build_temp/standalone-deploy/doc/Fate-standalone_deployment_guide_zh.html
https://github.com/FederatedAI/Practicing-Federated-Learning/tree/main/chapter05_FATE_HFL
注意:书本使用的FATE是1.4.0版本,而我使用的是1.6.0版本(2021-8-13),文中的配置文件中的注释在使用时要去除
官方文档中的命令都是用sh
运行,因为本机的环境不同,所以采用bash
wget https://webank-ai-1251170195.cos.ap-guangzhou.myqcloud.com/standalone_fate_master_1.6.0.tar.gz
tar -xzvf standalone_fate_master_1.6.0.tar.gz
cd standalone_fate_master_1.6.0
source bin/init_env.sh
bash init.sh init
问题:service.sh: [[ not found
解决:修改init.sh文件中的sh命令为bash
测试:
cd standalone_fate_master_1.6.0
source bin/init_env.sh
bash ./python/federatedml/test/run_test.sh
会输出一系列的测试输出,最终:
toy测试
python ./examples/toy_example/run_toy_example.py 10000 10000 0
运行起来之后可以看到:
控制台(IP:8080
):
安装FATE-Client和FATE-Test
为方便使用FATE,我们提供了便捷的交互工具FATE-Client以及测试工具FATE-Test.
请在环境内使用以下指令安装:
python -m pip install fate-client
python -m pip install fate-test
二、切分数据集
数据集:威斯康星州临床科学中心开源的乳腺癌肿瘤数据集
from sklearn.datasets import load_breast_cancer
为了模拟横向联邦建模的场景,我们首先在本地将乳腺癌数据集切分为特征相同的横向联邦形式,当前的breast数据集有569条样本,我们将前面的469条作为训练样本,后面的100条作为评估测试样本。
从469条训练样本中,选取前200条作为公司A的本地数据,保存为breast_1_train.csv,将剩余的269条数据作为公司B的本地数据,保存为breast_2_train.csv。
测试数据集可以不需要切分,两个参与方使用相同的一份测试数据即可,文件命名为breast_eval.csv。
splitDataset.py
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())
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_1_train.to_csv(‘brea