关于 Fate 和单机直接训练效果差别的疑问

测试了一下发现联邦学习方式建模和单机直接训练的结果差异很大,以下叙述具体的测试流程。

测试数据集是这样的:

id,y,x1,x2
1001,0,11,5
1002,0,12,10
1003,0,13,15
1004,0,14,20
1005,0,15,25
1006,0,16,30
1007,0,17,35
1008,0,18,40
1009,0,19,45
1010,0,20,50
1011,1,21,55
1012,1,22,60
1013,1,23,65
1014,1,24,70
1015,1,25,75
1016,1,26,80
1017,1,27,85
1018,1,28,90
1019,1,29,95
1020,1,30,100

首先尝试单机,使用最传统的逻辑回归进行训练,编写脚本如下:

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

X = []
y = []
lines = open('data.csv').readlines()
for line in lines[1:]:
    line = line.strip()
    if not line:
        continue
    id, _y, _x1, _x2 = line.split(',')
    X.append([int(_x1), int(_x2)])
    y.append(int(_y))

X_train, y_train = X, y
X_test, y_test = X, y

model = LogisticRegression(max_iter=50)
model.fit(X_train, y_train)

print(model.n_iter_)
print(model.coef_)
print(model.intercept_)

print('--------------------')

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

运行结果:

[33]
[[0.14421473 0.72107365]]
[-40.81276865]
--------------------
              precision    recall  f1-score   support

           0       1.00      1.00      1.00        10
           1       1.00      1.00      1.00        10

    accuracy                           1.00        20
   macro avg       1.00      1.00      1.00        20
weighted avg       1.00      1.00      1.00        20

可以看出,迭代了 33 次后收敛,模型参数为 [0.14421473, 0.72107365], -40.81276865 并且以训练集来预测的结果很好,全都预测成功了。


接下来尝试使用 fate 来进行纵向联邦学习

数据拆分为 guest 方的 test_data1.csv

id,y,x1
1001,0,11
1002,0,12
1003,0,13
1004,0,14
1005,0,15
1006,0,16
1007,0,17
1008,0,18
1009,0,19
1010,0,20
1011,1,21
1012,1,22
1013,1,23
1014,1,24
1015,1,25
1016,1,26
1017,1,27
1018,1,28
1019,1,29
1020,1,30

和 host 方的 test_data2.csv

id,x2
1001,5
1002,10
1003,15
1004,20
1005,25
1006,30
1007,35
1008,40
1009,45
1010,50
1011,55
1012,60
1013,65
1014,70
1015,75
1016,80
1017,85
1018,90
1019,95
1020,100

分别 upload 后,在 guset 方创建 dsl 和 conf 文件,参考了test_hetero_lr_job_dsl.jsontest_hetero_lr_job_conf.json,去掉了其中特征工程的两个步骤,其他基本没有变化。

其中 dsl 文件如下:

{
    "components" : {
        "dataio_0": {
            "module": "DataIO",
            "input": {
                "data": {
                    "data": [
                        "args.train_data"
                    ]
                }
            },
            "output": {
                "data": ["train"],
                "model": ["dataio"]
            },
            "need_deploy": true
        },
        "hetero_lr_0": {
            "module": "HeteroLR",
            "input": {
                "data": {
                    "train_data": ["dataio_0.train"]
                }
            },
            "output": {
                "data": ["train"],
                "model": ["hetero_lr"]
            }
        },
        "evaluation_0": {
            "module": "Evaluation",
            "input": {
                "data": {
                    "data": ["hetero_lr_0.train"]
                }
            },
            "output": {
                "data": ["evaluate"]
            }
        }
    }
}

conf 文件如下:

{
    "initiator": {
        "role": "guest",
        "party_id": 111
    },
    "job_parameters": {
        "work_mode": 1,
        "processors_per_node": 1,
        "align_task_input_data_partition": true
    },
    "role": {
        "guest": [111],
        "host": [222],
        "arbiter": [222]
    },
    "role_parameters": {
        "guest": {
            "args": {
                "data": {
                    "train_data": [{"name": "testtb", "namespace": "testns"}]
                }
            },
            "dataio_0":{
                "with_label": [true],
                "label_name": ["y"],
                "label_type": ["int"],
                "output_format": ["dense"]
            }
        },
        "host": {
            "args": {
                "data": {
                    "train_data": [{"name": "testtb", "namespace": "testns"}]
                }
            },
             "dataio_0":{
                "with_label": [false],
                "output_format": ["dense"]
            }
        }
    },
    "algorithm_parameters": {
        "hetero_lr_0": {
            "penalty": "L2",
            "max_iter": 50,
            "optimizer": "rmsprop",
            "init_param": {
                "init_method": "random_uniform"
            }
        }
    }
}

然后发起任务

python fate_flow_client.py -f submit_job -c job_conf.json -d job_dsl.json

等待运行结束后查看结果,发现迭代了 50 次,仍未收敛,输出模型参数为 [0.030564, 0.151934], -0.157896, 并且对结果的预测的评估也比单机训练的差了不少。


疑问

  1. 同一份训练数据输出的模型参数为何会有如此大的差异?
  2. 本例中纵向联邦训练效果不理想的主要原因是什么,调整 dsl 流程或参数可以得到改进吗?
  3. 如果可以,针对此例的数据集,应该如何调整流程和参数?
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342