官术网_书友最值得收藏!

5.4 橫向聯(lián)邦模型訓(xùn)練

數(shù)據(jù)準(zhǔn)備好之后,下一步可以利用FATE來(lái)構(gòu)建橫向聯(lián)邦模型進(jìn)行訓(xùn)練。在FATE中構(gòu)建橫向聯(lián)邦模型,通常情況下會(huì)涉及下面三項(xiàng)工作。

? 數(shù)據(jù)輸入:將文件(如csv、txt等文本文件)轉(zhuǎn)換為FATE支持的DTable格式。DTable是一個(gè)分布式數(shù)據(jù)集合,是FATE的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),F(xiàn)ATE的所有運(yùn)算都基于DTable格式進(jìn)行。

? 模型訓(xùn)練:數(shù)據(jù)轉(zhuǎn)換為DTable格式后,F(xiàn)ATE可以為模型訓(xùn)練構(gòu)建流水線(pipeline)。

? 模型評(píng)估:橫向聯(lián)邦的模型評(píng)估與集中式的模型評(píng)估一樣,將訓(xùn)練好的模型作用于測(cè)試數(shù)據(jù)集來(lái)評(píng)估模型性能。

FATE為橫向聯(lián)邦訓(xùn)練提供了豐富的接口,如4.3節(jié)所述,開發(fā)人員只需要通過提供dsl和conf配置文件,就能完成上面的所有操作。為了后面的敘述統(tǒng)一,我們假設(shè)讀者安裝的FATE單機(jī)版本目錄如下,后面的講解都以該目錄作為基目錄。

5.4.1 數(shù)據(jù)輸入

FATE提供了將本地文件轉(zhuǎn)化為DTable格式的工具,首先將本地的訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)上傳到$fate_dir/examples/data目錄,該操作可以使用rz命令完成。

我們定義上傳數(shù)據(jù)配置文件,將其命名為upload_data.json,其內(nèi)容如下所示。需要修改其中的三個(gè)字段,即file,table_name和namespace,其余字段使用默認(rèn)值。

這三個(gè)字段對(duì)應(yīng)的含義如下。

? file:對(duì)應(yīng)的本地文件位置,也就是剛剛上傳的目錄文件夾。

? table_name:將本地文件轉(zhuǎn)換為DTable格式的表名,可根據(jù)需要自行設(shè)置。

? namespace:DTable格式的表名對(duì)應(yīng)的命名空間,可根據(jù)需要自行設(shè)置。

以上傳文件breast_1_train.csv為例,修改后的upload_data.json文件如下所示。

修改完成后,在命令行中執(zhí)行下面的命令(upload),F(xiàn)ATE會(huì)自動(dòng)將原始的本地文件breast_1_train.csv轉(zhuǎn)換為DTable格式。

如果成功執(zhí)行,那么系統(tǒng)將返回下面的信息,可以將board_url字段中提供的網(wǎng)址輸入瀏覽器中查看執(zhí)行結(jié)果。

同理,對(duì)于breast_2_train.csv,可以按照上面的過程執(zhí)行。對(duì)于測(cè)試數(shù)據(jù)集,我們將本地測(cè)試文件上傳到兩個(gè)參與方,并各自轉(zhuǎn)化為DTable格式。如下所示。

5.4.2 模型訓(xùn)練

當(dāng)我們?cè)谏弦徊綄⒈镜財(cái)?shù)據(jù)轉(zhuǎn)換為DTable格式后,就可以開始構(gòu)建聯(lián)邦學(xué)習(xí)訓(xùn)練流水線了。FATE官方提供了很多模型參考例子。當(dāng)前FATE支持下面幾種常用的機(jī)器學(xué)習(xí)模型,如圖5-5所示。

? 線性模型:包括橫向和縱向的線性回歸、邏輯斯蒂回歸等線性模型實(shí)現(xiàn)。

? 樹模型:基于縱向的GBDT實(shí)現(xiàn)。

? 神經(jīng)網(wǎng)絡(luò):支持橫向的深度神經(jīng)網(wǎng)絡(luò)模型DNN。

圖5-5 FATE支持的幾種常用機(jī)器學(xué)習(xí)模型

本章使用的是邏輯回歸模型。進(jìn)入 $fate_dir/examples/dsl/v1/homo_logistic_regression目錄,在該目錄下已經(jīng)有很多預(yù)設(shè)的dsl和conf文件。在本節(jié)的模型訓(xùn)練中,我們挑選其中兩個(gè)來(lái)修改,即使用test_homolr_train_job_dsl.json和test_homolr_train_job_conf.json兩個(gè)文件來(lái)幫助構(gòu)建橫向聯(lián)邦模型。

? test_homolr_train_job_dsl.json:用來(lái)描述任務(wù)模塊,將任務(wù)模塊以有向無(wú)環(huán)圖的形式組合在一起。

? test_homolr_train_job_conf.json:用來(lái)設(shè)置各個(gè)組件的參數(shù),比如輸入模塊的數(shù)據(jù)表名、算法模塊的學(xué)習(xí)率、batch大小、迭代次數(shù)等。

首先查看dsl配置文件。在命令行中輸入命令,打開上述dsl文件。當(dāng)前的dsl已經(jīng)定義了三個(gè)組件模塊,這三個(gè)組件也構(gòu)成了最基本的橫向聯(lián)邦模型流水線,在本案例中直接使用即可。

? dataio_0:數(shù)據(jù)I/O組件,用于將本地?cái)?shù)據(jù)轉(zhuǎn)換為DTable。

? homo_lr_0:橫向邏輯回歸組件。

? evaluation_0:模型評(píng)估組件,如果沒有提供測(cè)試數(shù)據(jù)集,將自動(dòng)使用訓(xùn)練數(shù)據(jù)集進(jìn)行模型評(píng)估。

接下來(lái),查看conf配置文件,該文件包括運(yùn)行相關(guān)的所有參數(shù)信息,在一般情況下使用默認(rèn)值即可,需要修改的地方包括以下幾處。

? role_parameters字段:找到role_parameters字段,該字段下包括guest和host,分別對(duì)應(yīng)于兩個(gè)參與方。這里需要修改三個(gè)參數(shù)。首先是train_data下面的name和namespace,代表的是訓(xùn)練數(shù)據(jù)的DTable表名和命名空間;此外,label_name表示的是標(biāo)簽列對(duì)應(yīng)的屬性名,比如本案例中,我們的標(biāo)簽列名是“y”。

? algorithm_parameters字段:algorithm_parameters字段用來(lái)設(shè)置模型訓(xùn)練的超參數(shù)信息,包括優(yōu)化函數(shù)、學(xué)習(xí)率、迭代次數(shù)等,可以根據(jù)實(shí)際需要自行修改。

文件配置修改完后,在命令行中輸入下面的命令(submit_job)執(zhí)行模型訓(xùn)練,該命令只需要提供dsl和conf配置文件即可。

如果一切運(yùn)行正常,我們可以得到下面的輸出信息,將board_url中的網(wǎng)址輸入瀏覽器中可查看當(dāng)前的任務(wù)運(yùn)行情況。

5.4.3 模型評(píng)估

模型評(píng)估是機(jī)器學(xué)習(xí)算法設(shè)計(jì)中的重要一環(huán),在聯(lián)邦學(xué)習(xí)場(chǎng)景下也是如此,常用的模型評(píng)估方法包括留出法和交叉驗(yàn)證法。

? 留出法(Hold-Out):將數(shù)據(jù)按照一定的比例進(jìn)行切分,預(yù)留一部分?jǐn)?shù)據(jù)作為評(píng)估數(shù)據(jù)集,用于評(píng)估聯(lián)邦學(xué)習(xí)的模型效果,如圖5-6所示。

? 交叉驗(yàn)證法(Cross-Validation):將數(shù)據(jù)集D切分為k份,D1,D2,· · ·,Dk,每一次隨機(jī)選用其中的k-1份數(shù)據(jù)作為訓(xùn)練集,剩余的一份數(shù)據(jù)作為評(píng)估數(shù)據(jù)。這樣可以獲得k組不同的訓(xùn)練數(shù)據(jù)集和評(píng)估數(shù)據(jù)集,得到k個(gè)評(píng)估的結(jié)果,取其均值作為最終模型評(píng)估結(jié)果,如圖5-7所示。

圖5-6 留出法

圖5-7 交叉驗(yàn)證法

為了評(píng)估模型的效果,我們使用額外的數(shù)據(jù)集作為評(píng)估數(shù)據(jù)集(即采用留出法)。在5.4.1節(jié)中,我們?yōu)閮蓚€(gè)參與方都分配了一份測(cè)試數(shù)據(jù)breast_eval.csv,并將其轉(zhuǎn)換為DTable格式。為了將這部分?jǐn)?shù)據(jù)用于模型評(píng)估,需要修改dsl的組件配置。具體來(lái)說(shuō),在test_homolr_train_job_dsl文件中,在components組件下添加一個(gè)新的數(shù)據(jù)輸入組件“dataio_1”,用來(lái)讀取測(cè)試數(shù)據(jù),如下所示。

dataio_0與dataio_1的設(shè)置方式基本一致,主要需要設(shè)置module、input和output,如下所示。

然后,需要修改conf文件,在role_parameters字段中為guest和host添加測(cè)試數(shù)據(jù)的DTable表名。

修改完文件配置,為了和沒有測(cè)試數(shù)據(jù)的版本做區(qū)分,我們將dsl文件另存為test_homolr_evaluate_job_dsl.json,將conf文件另存為test_homolr_evaluate_job_conf.json,然后執(zhí)行submit_job命令。

在輸出信息中,通過提供的board_url可以查看帶有模型評(píng)估算法組件模塊的有向無(wú)環(huán)圖,如圖5-8所示。該圖實(shí)際上由訓(xùn)練模塊組件和評(píng)估模塊組件兩部分構(gòu)成。可以點(diǎn)擊評(píng)估模塊組件中的evaluation_1,然后點(diǎn)擊右邊的view the outputs按鈕查看模型在評(píng)估集上的結(jié)果,如圖5-9所示。

打開可視化界面,將看到內(nèi)置的各種評(píng)估指標(biāo)變化曲線,如ROC、K-S、Accuracy等,如圖5-10所示。

此外,我們還可以查看各評(píng)估指標(biāo),如AUC、K-S、混淆矩陣的具體數(shù)值,如圖5-11所示。

圖5-8 有向無(wú)環(huán)圖

左邊是沒有添加評(píng)估數(shù)據(jù)組件的流水線;右邊是添加了評(píng)估數(shù)據(jù)組件的流水線

圖5-9 查看評(píng)估集上的結(jié)果

圖5-10 各種評(píng)估指標(biāo)變化曲線

圖5-11 各評(píng)估指標(biāo)

主站蜘蛛池模板: 岑巩县| 泽库县| 昔阳县| 肇庆市| 陵川县| 阿图什市| 松潘县| 西乌珠穆沁旗| 习水县| 南汇区| 武定县| 印江| 新平| 万盛区| 古田县| 蚌埠市| 石台县| 行唐县| 巢湖市| 肥乡县| 宣化县| 重庆市| 利川市| 青神县| 英山县| 寿阳县| 常宁市| 保德县| 大埔县| 理塘县| 宣汉县| 宁城县| 宁河县| 渝北区| 廊坊市| 门源| 新宾| 额尔古纳市| 赤壁市| 大石桥市| 麻江县|