總目錄
(一)聯邦學習-入門初識
(二)聯邦學習-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"
}
字段說明:
- file: 文件路徑
- head: 指定數據文件是否包含表頭
- partition: 指定用於存儲數據的分區數
- work_mode: 指定工作模式,0代表單機版,1代表集羣版
- 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各部分指標略有下降。