(三)微衆Fate-橫向聯邦學習實踐-訓練評估

總目錄
(一)聯邦學習-入門初識
(二)聯邦學習-Fate單機部署
(三)微衆Fate-橫向聯邦學習實踐-訓練評估
(四)微衆Fate-橫向學習聯邦-預測
(五)微衆Fate-橫向聯邦學習實踐-在線預測

以經典的分類問題判斷腫瘤良性惡性爲例,使用橫向聯邦學習,基於邏輯迴歸進行訓練。基於前一章已經部署好的單機Fate進行實踐。

1. 準備上傳數據

我們直接使用Fate提供的案例數據目錄在examples/data/breast_homo_guest.csv、examples/data/breast_homo_host.csv、

這裏上傳數據需要準備host以及guest兩方的上傳數據
根據官方解釋在Fate的概念中分成3種角色,Guest、Host、Arbiter

Guest表示數據應用方,Host是數據提供方,在縱向算法中,Guest往往是有標籤y的一方。arbiter是用來輔助多方完成聯合建模的,主要的作用是用來聚合梯度或者模型,比如縱向lr裏面,各方將自己一半的梯度發送給arbiter,然後arbiter再聯合優化等等,arbiter還參與以及分發公私鑰,進行加解密服務等等。一般是由數據應用方Guest發起建模流程。

2.編寫上傳數據配置upload_data_role.json

編寫host的上傳配置文件upload_data_host.json

{
"file":"examples/data/breast_homo_host.csv",
"head":1,
"partition":10,
"work_mode":0,
"table_name":"fuqlaihomo_breast_host",
"namespace":"fuqlaihomo_breast_host"
}

字段說明:

  1. file: 文件路徑
  2. head: 指定數據文件是否包含表頭
  3. partition: 指定用於存儲數據的分區數
  4. work_mode: 指定工作模式,0代表單機版,1代表集羣版
  5. table_name&namespace: 存儲數據表的標識符號

編寫guest的上傳配置文件upload_data_guest.json

{
"file":"examples/data/breast_homo_guest.csv",
"head":1,
"partition":10,
"work_mode":0,
"table_name":"homo_breast_guest",
"namespace":"homo_breast_guest"
}

3. 上傳數據

上傳數據命令:

python ${your_install_path}/fate_flow/fate_flow_client.py -f upload -c ${upload_data_json_path}
${your_install_path}: fate的安裝目錄
${upload_data_json_path}:上傳數據配置文件路徑

注:每個提供數據的集羣(即guest和host)都需執行此步驟 運行此命令後,如果成功,將顯示以下信息:
docker exec -it fate_python bash進入fate節點內部
導入訓練數據、測試數據以及評估數據輸入以下命令

python fate_flow/fate_flow_client.py -f upload -c  examples/federatedml-1.x-examples/homo_logistic_regression/upload_data_guest.json 

python fate_flow/fate_flow_client.py -f upload -c  examples/federatedml-1.x-examples/homo_logistic_regression/upload_data_host.json 

python fate_flow/fate_flow_client.py -f upload -c  examples/federatedml-1.x-examples/homo_logistic_regression/upload_data_test.json 

控制檯顯示以下提示表示上傳成功

在這裏插入圖片描述

打開fate監控面板fate_board http://${boardhost}:8080

根據上傳完之後的job_id查詢得,剛剛上傳的兩個任務
在這裏插入圖片描述

選擇具體的任務查看詳細信息

在這裏插入圖片描述

4. 建模

4.1 編寫dsl配置

爲了讓任務模型的構建更加靈活,目前 FATE 使用了一套自定的領域特定語言 (DSL) 來描述任務。在 DSL 中,各種模塊(例如數據讀寫 data_io,特徵工程 feature-engineering, 迴歸 regression,分類 classification)可以通向一個有向無環圖 (DAG) 組織起來。通過各種方式,用戶可以根據自身的需要,靈活地組合各種算法模塊。

爲了嘗試多一點的組件,我們的實踐將涵蓋訓練以及評估模型。

4.1.1 建模數據流定義

使用dataio組件,基於上一步上傳好的數據定義建模數據輸入/輸出
這個例子裏面定義了兩個dataio,分別輸出訓練數據以及評估數據

在這裏插入圖片描述

組件結構體具體說明:https://github.com/FederatedAI/FATE/blob/master/doc/dsl_conf_setting_guide_zh.md

4.1.2 訓練輸入輸出定義

在這裏插入圖片描述

將dataio_0的輸出對象作爲訓練的輸入數據對象,輸出橫向聯邦學習邏輯迴歸訓練模型以及訓練數據。
同理對評估數據進行訓練定義,將dataio_1的輸出對象以及homo_lr0的訓練模型作爲評估的輸入數據對象,輸出橫向聯邦學習邏輯迴歸訓練模型以及評估數據。

4.1.2 評估輸入輸出定義

對評估數據集基於homo_lr_0輸出的模型進行訓練並且輸出預測結果以及模型。
在這裏插入圖片描述

4.2 編寫運行配置

運行配置主要是用於指定guest、host、arbiter運行dsl任務相關配置,具體查看https://github.com/FederatedAI/FATE/blob/master/doc/dsl_conf_setting_guide_zh.md

4.2.1 定義建模角色以及運行模式

在這裏插入圖片描述

4.2.2 定義角色參數

主要包括data數據結構定義以及組件配置按照角色區份。

4.2.2.1 guest角色參數

在這裏插入圖片描述

4.2.2.2 host角色參數

在這裏插入圖片描述

4.3 定義算法配置

具體查看算法參數https://github.com/FederatedAI/FATE/blob/master/federatedml/param

在這裏插入圖片描述

5. 開始訓練評估任務

具體命令如下:

python {fate_install_path}/fate_flow/fate_flow_client.py -f submit_job -c ${runtime_config} -d ${dsl}

c${runtime_config}:運行配置文件路徑
${dsl}:dsl文件路徑

控制檯輸出命令:

python fate_flow/fate_flow_client.py -f submit_job -c examples/federatedml-1.x-examples/homo_logistic_regression/test_homolr_evaluate_job_conf.json  -d examples/federatedml-1.x-examples/homo_logistic_regression/test_homolr_evaluate_job_dsl.json

控制檯與監控面板顯示如下信息

在這裏插入圖片描述

顯示運行進度:
在這裏插入圖片描述

6. 查看結果

通過監控面板查看job執行結果 ,通過job_id查詢對應任務

在這裏插入圖片描述

可以看到建模的每個過程組成的DAG圖

6.1 查看dataio_0執行結果

根據dsl定義的輸出我們點擊"view the outputs"查看結果如何

在這裏插入圖片描述
由於輸出類型是data類型,可以在"data output"看到輸入的數據列表項如上

在這裏插入圖片描述

點擊"log"可以查看日誌

6.2 查看dataio_1執行結果

dataio_1是用於評估的數據,數據輸出結果如下
在這裏插入圖片描述

6.3 查看分析訓練結果

6.3.1 homo_lr_0

homo_lr_0是分別在guest,host訓練homo_breast_guest以及homo_breast_host得出最終模型
在這裏插入圖片描述

最大迭代次數爲20
是否收斂:false

下面表格列出所有特徵variable以及通過LR分類得出特徵對應權值weight

下面還有一個曲線圖,表示LR損失函數值隨着迭代次數的變化

在這裏插入圖片描述
查看data output 訓練結果如下

在這裏插入圖片描述

id:id
label: 標籤值,真實結果
predict_result: 預測結果
predict_score: 預測得分
predict_detail:預測結果的細節

6.3.2 homo_lr_1

home_lr_1是基於homo_lr_0預測test數據集的結果。
輸出模型結果如下:
在這裏插入圖片描述

查看data output 訓練結果如下:

在這裏插入圖片描述

6.4 查看模型評估結果

6.4.1 homo_lr_0模型評估evalation_0 結果

模型評估結果如下:
在這裏插入圖片描述
這裏的auc值、ks值顯示訓練數據集的正樣本概率以及好壞樣本累計差異率

下面是幾種常見評估曲線

序號 中文 簡稱 描述
1 受試者特徵工作曲線 ROC 用於描述模型分辨能力,對角線以上的圖形越高越好, ROC=0.5表示模型的預測能力與隨機結果沒有差別
2 洛倫茲曲線 K-S KS用於模型風險區分能力進行評估,指標衡量的是好壞樣本累計分部之間的差值。好壞樣本累計差異越大,KS指標越大,那麼模型的風險區分能力越強。
3 Lift曲線 Lift Lift圖衡量的是,與不利用模型相比,模型的預測能力“變好”了多少,lift(提升指數)越大,模型的運行效果越好。
4 增益圖 Gain Gain圖是描述整體精準度的指標。
5 召回率 Precison Recall 針對我們原來的樣本而言的,它表示的是樣本中的正例有多少被預測正確了。
6 精確率 Accuracy 精確率是針對我們預測結果而言的,它表示的是預測爲正的樣本中有多少是對的

在這裏插入圖片描述

6.4.2 homo_lr_1模型評估evalation_1 結果

homo_lr_1使用homo_lr_0訓練的模型對test數據集進行預測,得出的結果如下圖,相對evalation_0各部分指標略有下降。

在這裏插入圖片描述

下一篇:(四)微衆Fate-橫向聯邦學習-預測

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章